BT协议分析之Torrent文件格式

概述

Torrent对于BT协议来说非常重要,它记录了被下载文件的文件名、文件长度、分片大小、分片数量、每个分片的sha1效验码等信息,没有了它BT客户端也就无从通过BT协议把文件下载到本地。下面就来看看Torrent文件的组成吧。

B编码

说道Torrent文件就要先了解一下B编码。B编码是Torrent文件的基础编码,Torrent文件使用B编码组织和存储信息,它跟JSON类似,是用来交换和存储信息的一种编码格式。B编码有4种存储类型,分别为字符串、数值、列表和字典,其中列表和字典可以嵌套使用,也就是说列表里面可以包含列表或字典,字典也类似。

1、字符串

字符串的表示形式为“长度:内容”,长度为十进制表示的字符串的长度,内容为字符串的内容。例如:6:isoft8为“isoft8”这个字符串的B编码表示形式。

2、数值

数值的表示形式为“i数值e”,数值可以使用“-”表示负数,不可以使用“.”表示小数。例如:i23e为“23”这个数值的B编码表示形式。

3、列表

列表以l开头以e结尾,l和e中间为列表的内容,列表的内容由多个值组成。例如:l6:isoft83:com表示一个含有两个元素的列表,第一个元素为字符串“isoft8”,第二个元素为“com”。

4、字典

字典以键值对的形式保存数据,它以d开头以e结尾,d和e中间为字典的内容。字典的内容由多个值组成,其中第一个值为键,第二个值为值,第三个值为键,第四个值为值,如果字典中含有更多的键值对,则以此类推。例如:d3:key4:name5:value6:isoft8e表示一个由两个键值对组成的字典,其中第一个键值对为“key=name”,第二个键值对为“value=isoft8”,写成JSON的形式就是{"key":"name","value":"isoft8"}

以上就是B编码的基本格式,Torrent文件就是由若干个上述使用B编码存储的数据组成。下面附上一段用Python写的解析B编码的代码。该代码能实现基本的功能,但是未经过严格测试,在某些情况下可能会有一些bug,仅供参考。

#_*_ Encoding:UTF8
    '''
    Created on 2014-6-21

    @author: junwe_000
    '''
    import string

    def addToParent(s, r, withRaw=False):
        if len(s) >= 2:
            if s[-2]["t"] in ["list", "dict"]:
                s[-2]["d"].append(processData(s[-1], r[-1], withRaw))
            return None
        else:
            return processData(s[-1], r[-1], withRaw)

    def processData(d, raw, withRaw=False):
        if d["t"] == "integer":
            return string.atoi(d["d"]) if not withRaw else {"data":string.atoi(d["d"]), "raw":raw}
        elif d["t"] == "string":
            return d["d"] if not withRaw else {"data":d["d"], "raw":raw}
        elif d["t"] == "list":
            return d["d"] if not withRaw else {"data":d["d"], "raw":raw}
        elif d["t"] == "dict":
            return {"data":dict(zip([v["data"] for i,v in enumerate(d["d"]) if i % 2 == 0], [{"data":v["data"], "raw":v["raw"]} for i,v in enumerate(d["d"])if i % 2 != 0])), "raw":raw} if withRaw else 
                dict(zip([v for i,v in enumerate(d["d"]) if i % 2 == 0], [v for i,v in enumerate(d["d"])if i % 2 != 0]))

    def write_raw(r, b, isPush):
        if isPush:
            r.append("")
        for i in xrange(0, len(r)):
            r[i] += b

    def decode(data, withRaw=False):
        s = []
        r = []
        for b in data:
            #如果正在处理整数和字符串则假设任何字符都是数据内容,不进行数据头的判断
            if not s or s[-1]["t"] not in ["string", "integer", "stringLength"]:
                #处理数据头
                if b != "e":
                    write_raw(r, b, True)
                else:
                    write_raw(r, b, False)
                if b.isdigit():
                    s.append({"t":"stringLength", "l":b})
                elif b == "d":
                    s.append({"t":"dict", "d":[]})
                elif b == "l":
                    s.append({"t":"list", "d":[]})
                elif b == "i":
                    s.append({"t":"integer", "d":""})
                elif b == "e":
                    if s[-1]["t"] in ["list", "dict"]:
                        ret = addToParent(s, r, withRaw)
                        r.pop()
                        s.pop()
                        if ret:
                            return ret
            else:
                #处理数据内容
                write_raw(r, b, False)
                if s[-1]["t"] == "integer":
                    if b != "e":
                        s[-1]["d"] += b
                    else:
                        ret = addToParent(s, r, withRaw)
                        s.pop()
                        r.pop()
                        if ret:
                            return ret
                elif s[-1]["t"] == "string":
                    s[-1]["d"] += b
                    s[-1]["curr"] += 1
                    if s[-1]["curr"] >= s[-1]["l"]:
                        ret = addToParent(s, r, withRaw)
                        s.pop()
                        r.pop()
                        if ret:
                            return ret
                elif s and s[-1]["t"] == "stringLength":
                    if b != ":":
                        s[-1]["l"] += b
                    else:
                        s[-1]["t"] = "string"
                        s[-1]["d"] = ""
                        s[-1]["l"] = string.atoi(s[-1]["l"])
                        s[-1]["curr"] = 0;



Torrent文件结构

上面提到Torrent文件是由若干个使用B编码存储的数据组成,那么现在就来讨论一下Torrent文件是怎么组成的。由于B编码格式本质与JSON相近,为了方便阅读,下面会以JSON格式讨论Torrent文件的结构。

下面是一个典型的Torrent文件结构。

{
        'info': {
            'length': 93843183,
            'piece length': 131072,
            'pieces': '1\x95AG\xb3\xa5\tX\x91>\xf5\xac\'\xf5\xe6\x8f\xfb\n\xfb\x03\xd5\xd5H+E"\xa8\xa1\xaa\x00r\x0bFc\xbd\\\x9b]\x06_\xb8v<Ld~\x0c\xa7W0\x1f\xe7\xb0@\xa2\xf3\x90\x88\xd9\x95\xcf\xb6\x04\xb38&\xc3\xce\xce\xde\x88\x9d\xfb\xabP,\xe3o\xff\xc3\x94\xb5doKiv\xfdy\xf8\xa9@pA\xc6\xe8>\x82/LL^ \xd1\x98\xb4\x1ar \xf2\xf9\x14D\x972\xc3\x84\xdbd\xed\xf7O\x8b\x80(\xf7ZQ\xcf\xdcf\xa2\xe8\xe7\xb2\x00L\xb9\xb9\xa0\xf1\x14y\xcd\x08\xe0\xac\xf5\x88\x96\x1ab\x17V\x8e2x\xb5]\x81D\x08\xe5\xfa/\xd2ZoQ%t\x10\x84\x121\x14\xe0?\x9b~^\xd8\xf2\xa9\xfd"\xc0\x1bs\xfb\xb0(5 \xbd^\x8b\x80\xd4\xc8]\x10\x1a \x07\xf6\xc3[`\xd0\x0e/"\x85\x0b\x0e\xbeH_\xf6\x177\xf4\x1e\xf0\x14\xc3\xf4\xe2\xbe\x126\xcb:$\xa7[\xa5\x07\x07P\xfav\x17\xf5Uz1`\xcbi\xb3\xde+\xc3(:\xce(\x80\xf6|\xab\xe1\x889\x03\x8a\xff\xba\xde\x00\x9a"\x18]\xe9v\xb0B~\xf8\xb5\xda\x1aI\x00QX\xb1\xb1\x1fS\x1b@7Q\xd0\x82\x8c\xd67\xe2\x00\xef<\x1fo\x17\x87\xb7^\x82t4mm\xda\x0c\x80\x81\x817?\xf8\x809 \x8cm,U$\x8a\xad\xa6\x8f(\xbb\xafu=`\xc0K\x98\xb4B\xb9S\xe8\xb7\xb4\x0e\xb1\x80\x0bs\x91\x13\xdc\x9d\xec\xef]\n\xff\xc8\x07j\xe2\x9e8\x08K\\\xcd\xbcY\x87{\xa4\x08[\x99\xf0\xec\x96<\x8b\n\x90\xa6<\x92>0\xfd\x98\xdb"\xd0Gd8\xfa\xdc\xd7C5\xd9\x9cmr\x11\x07\xe96\x8ev\\\x02\x8c\xb5Dg8a\xd8+\xd3\xde\x96w\xc5y\xfc\xb0ox\xb5\xf6\x89x\\\xbd\xc8\xca`\x94\x13\xe9UK\x11M\xc6\x0f&\x19\xc4\xd3\x8e\r\x131#\xb8&\xa8\xd3\xb8m\tH\xdc(\n\x86oM\x15\x91\x8b\t\xa7\xa3\x90\x11>\xb3\x99\x8c\xf4F\xd4e\xcc\x98\x01w\xb8\xd6>\xb3\xdf\xfb{(]\x9d\xf9P\xc1|\xbe"]\x95\xdaJ\x1e\x88\xc7\xc7X/J\x95\x18\xdc\x94\xc6`\x95\x9fe-\xc0\x99\x8b\xea\x97\x18}Na\xc9\xd0V\xf9z\x19\xe5\xdb2\xb1\xa0\xdc\x18\x0f\x9e\x02\xb1\x05\xcfW\xf9\x00\x93`X\x8b\x02\x10\xc1Hv\xf5\xcc\xdd\x9c\xb5\xef\x15\xd6\xc6_@\x82/\xd3\xaa\xbd"\x96\xaa\x92h\x1e\xc5\xa8\xef\x04\x9c]\x98gd\xfb\xe0\x93\x92$M\x97\x8e\xc3\xf9\x94\x8bp4\x9a\xa8\x8c\xd2\xa8\xf3:\xa9\x84u\xcf\x94jF\xe7Ra\x05\xa8b\nS\r\x80\xa0+A;\x9cFP\xea\x07\xf3\xdd\x1c#<\x91\x02\x9b\xb6\x18bV^\x96@$\xef\xb7\x8f\xdb\xf4\x9b\x11+\xe4\x0e\xb0\xd6TG\xe7\x93D\x1bn\x86\xedq{B\xbf\x16sUj\xff\x8dN\xf4\xbd\x8a0e\xd1\x05(\xf5\xa7\x8e\x81\x17\xc7*\n\x98\xd6\xc0\xa4\xdb\x97\x12\xa7\x9d\xc7]\'W\\A\xd0.\xdd\xc4\xa9\x02Wi\x12N\xb4\x15\xee+l\t\x11\xa6iQ\xe2\xa2\xb5t\xd4\xa5=\xc0\x81\x83\xb6\x19\xde\xed\xcd\x8c+?\xd0gK\x0b@pQ\xcf\xf7\xdb\xb9\xf4\xdc\xb2\xb5^!5+8\xee\x8d_\xa1D\xd2!M\xec\x87\x87\xf3F\x15a\xa0\x91\x8e9\x14\x04\xe2\x92H\x00\x96\x83;\x9e\xa8\x02\x05\xfb[\xbd\x0f\x08~\xb3\x02\x8b\xfd\xbe\x1fr.\x8fU\xc2\x1d\xd4\x1a\xd9e\x0ci\xb4\xa7\xc8I"\xa0\xea\xffN\x1c\x01\xa3C\xe6\xad\xca\x0567\xcd\x99\xfa\x88\xe8[\xd9N\xbd`2S\xde\x9dM\xb9\x18\x1d\xdeM\xd3\xd7\xe5EZ\x80\xfbP\xc6\x0f\xf7\x0c\xf8\xb43i\x8f\xe63gi\x98B)\xb6\x8e\xb8\xe7\x7f\xfb\xa2\xf9\x9eu\xbd6xS,\xfc\x1a~\x13c\x98U\x8f\x81\xae\x0c\xd9\xbe3\x13O\xdb^\xa3\xc7\xcb\xfa\x0cs\x99\x15r\x8b\x03I\x97\x19[\xa7HB\x96\xe8\xc2*\xadn`\t\xc7\xceZ\xeb\xb2\xcf(\xb6SA\xb6\xc77\xe7\xd7\xacC\xa9\x0cy\xf6D\xf0R\x10\xefLc\xc6\x13\x92\xdc\x0fHY@SuH\xe7X\xd5}\x17\xdc\xf3\x97\xd5\xf3\xba\x90\x18\x1e\x85K\xc6\rG\xa6\xa5>\x8bah=%\xfc\x17\xa9\x04\x9a\xcfwy\xd9\x96\xba\x8dx8T\xd7\xfav]e9\x91\xfb\x93)!\x91\x155\x0c\xf2\xbcmO\xe1\x0f\xf2\xb6z\xc8\xed@\xef[U\xeb\xef\xdfQ6\xda"\xaf7\xd8a\'\xe6\xc9\x1c\x94\x9d\r\x13){\xac\xe4\xd6\xa7\x81\xe0\xb6\xc2\x0b\xaa\xf8\xb1w\xd9O\x8e\x89\x12\xe3U\xb4.R\x13\x16\xca\x10\xe4e\xad>\xe9\x8fWm\x9a\x0c\xa5X\xe4\xe1\x9c\x1aM(\xeao\xc6\xbe\xeb\x98\x94*\xe8\xbc\xd4\x91\xc9\xb2\xb3x1\xc8\xef\x90@}\x1ai\x12\xfb\xc9\xb9\xe5;U{P\x82 \xc5\x9auR\xe4\xc2\x1aV\xf2/8f$I\xb4\xe5i]\xea\x01/\x8am\xac\x9f\x99\xa4O\xd9\xc0D\xeb9N)\x88Au]GP6:\xc4\xfb\x04\x93!\xf1\xbc\xc1Z\xe1^F\x08\xf2\xe4\xa7\x0e\xa84\x84\xed/\xd7{\xab\x7f\xda\xe1\\\'P\xc0\xfe\xf2*k\x8c\xed\x9f\x08P\xb2\x9a^\xc6)Y4\xac\xcc\x82\x8a\xc7\x9f\x13\xd2.a\x87m\n\x9d\x94,L\xf6\xc0\x0f\xf9\x13m\xfaE4\x9fX\x99\xb3%Jg\xf1\xe3\xf0\x89\x05\xc0\xca\xaf\xce\x046\xbb\xac\xf7dL\x9ej"\xa6U\xf6\xd6\x86\xea\xa2\x83\xca\xab9\x97\xd2T\xdc\x94\xbe\x1e\x93\x1eNO\x0e3\x10\xa1I"\xc7\x83V\xc2_\xb2\xeb\xba\xb0\xac\xea9\xf8\x03\x15\xees]\xa3t\xf0\x8e\xd1\xda\xa9f\xa9\xf15\x12C\xa9\xc7\x89\x1f\xdd\t\xff\x9ag\xc3!a\xb4{\\\xa7I\xda\xf6\x19\xaew\x90\xbdJJ\xe0^\xdc\x91\x0eU\xd64\x95e\x97K\xb7\xfd\xd6\'h\x1f\x0b\xc6\x00\x13C\x8e\x9e\xcf{p\xf4e\xa5!o{\x7f\\\x02\xa2z\x03q\xad\xdf>\x81\xbc\xa7I\xa8\x80\xc4\xafG\xc1\xa9\xf9u\x06\x8a@\xd21\xa0|#\x11\xb9\xd6\x81\x08\x98\xba\xf1\xc5\x99\x19+\x9a\xb7\xc8DEv\xa7\x88\xb9H\xc5\xdd\x80\xa2<\xc0\x87\x908\x81xAz3vN\x85\xbd\x0e\xfbq/\xb0Mh\n\xb8\rB\x8d\x0b%\x00j\xdaG\x18\x03\xe1G\x12\xb5\xd47\x86\x8cJ\xec%!\xee*M\x85\xb5@\xda\xfe\xa9*>\xccY\xa6\x1e\xd6 \xf1d&\x7fp\xc5\x18R<-b\xab\x1be\xe2+\xab\x17\xaa\x18\x01\xb0w\xad\x1a\t\x96\xb8P\xcdm9\xae\xdd\x98\xbcR&Ra\xb5\xbdN\x1680\x03\xbe\xb7/\x87n\xc1\xf7\x82\x10\xc4\x8aX-\\G\x95#\xb8\x1f_\xa1\xe9 0\xce\xa3_<\xb6vA\xd4x\x8e\x81\xb0\xe2\x04\xa0\xc4\xe8\xf9f\xd0U\n\xcd\xb4\xab\'|\xc4Wr\x05Q\x93\x18\xdd\xe0\n#\xb9\xe2&\x8e\xceb\xb5L/\xbe\xbb\x07{R\xad\x1d\xb85\xe2\x05\x0f-U`\xb1*\xb8\xa4:\xf0\xfb\x0fA\xe4nG\xfe\xc6\x13\xb8\r\xa0\x99P+\x98\xc3bKY\x8bx*\xd2\xd3\x8cVV\x92\xa33\x9fI\xbb\xba&\x7f\xd1I\xec\xf4-\x00+\x05\x98_\x11L\x8a\xe6\xa3\xdb\xdc\xff\x9a\x17\xc0\x904\x97\x07\xfe`\xba#\xfa\x02XH\xc8|s\xc8\xe8`\xf5= \xb2\xd5\xda\x8c\x86\x80\xe0\xd6^%\xbc\xed\xd9\xe3]\xa1W\x84\x83\xa4\x94`T~\xc88\x11\x1b\x92\x16\xfe#\xe8\x06\xb6\xca\x9er\x8dS\xa5Ab\xd1t<{\xe0\x17\xb2\x95r\x1b\xa8\xd1\'\xbb\x0e\xbe\xc7|\xe3 \x88\xae_n\xa5@\xca\xdb\xb05\xf2\xac<\x0c\x8dd\xa2v\xed\\+\x8dm\xf2\xa6nv\x91$2\x15\xdas/\t\x04\x83\x9b\xc1\xa1\xe4^\xdc\x14\xb5K]\xff\x9dcF2\xe0_0\x05\x06\x08\xd0\xf9\x98\xf4R\xcd\xe0\xd8A\xeer$\x88\x9d\x03x\xbb0\x08\x98<)?X\xe5N\x08\xd2\xf9\xf4}`\xc1f:7\x15h\xd5{\nI\xcfT\xda\xd0\x0cq~\xb1\xdf\x12\xe1\x9c\x97^\xe8\xb5\x97\x1cP\xe8\x9d8\tJYC\\T"\xa3\x0b\xaefV\xb8\xe7\xc6\x96?\xfcT\xf2Cd\x87\xef\xb9\x81\x14\xefk\xe33Ex\x81\xceT\xcd\xcc7\x9f\x86\x808\x06\xb7a1:\xf2\xec#\xf9cx5E]\xc8\xdb.\x9e\x13\x96\x84\xdc\xa9\xd9\xbf\xda\r\xf3y\x0b+\xe8Mf\x11\xe1"\t0*O\xedL\xc1\xab\x05\x89\x10\xfeP\xf4\xcc\xc0i\xb9O\xcc\xb4\x17=\xea\xf3\x8d{ 2\x8a \xa4\x02\xbd\xd1G\xa5^\x80R\t~\x1dX\x1e\xa7")s\xe9\x10\n\x9f\xf7\xfd:Q\x11\xdd\xdb\xb4\xd4\xa5\xe6m\xee]C\xba \x9f\x99\x01\x15\x9c\xfc\xae\x96:\x1e _\x88\x0b\x0c\xac\xd9Zw\xc3;0a\xb2\xe6\x82\x91\x05\xe7F\xd9\xfex\xf7\x00a\x19\x8b \x98\x0e {\xad~\naXT\x83\x17_\xe8\xd2\xab\xd7Eq\x08\x7f-\x85\tO\x08!\x92\xe7\x93q\x0e\xaeG\xbd\x84b\xb4\xfb\xe9a\x1f\x89\x9c\xcc\xfb\xa0\xaf\xb5\xf3\xb5\xa6\xdfC\xe4\xb2\x17\x13-Z\xebds\xac\xdc\x15\x7f\x84\xa5\x1c\xb91\x88U\x01\xa1SF\xc7\xb4\xc6\xb2\xccMS\'\xddC\xd1d\xacS+\x84\xe3$8\x80\xa4UA\xe26\x8f\xdb\xe5bv\xc0\xd8C8\xf9\xf6r\xea\x00,\x13\x06\x84\xf3\x1a\x8cy\x96d\xc8\xe9\x94|\xb1\xdfGdix\xc5\x07F\xbf\x81\xe6\x8d\xe9\n9\xbf\x7f\xd1\x16\x00\xdb\xb5\x9d\xec\x18\xd3\x07\xf2\xda5\xcb\x0c*\xa7\xe0\xfft\xa0P\xffS\\e\xb4V\xbdm\x9dx\x11\xff\xbf\x05/\xf8|\xf7IZ_j(\x80G\xa5/\xd3T1\xd0\xa36\x80\xb7\xdd\x8b)\x93\xf0*\xdd\xf5\x83\x92\xa2\xb1j2\xb2z\xb6~1\x7f\x15\xfa\xc7\xee\xddt24\xa1\x92j0\xf6\x9a\x9b\x8d\x97\xfa\xcb\x1a\'\xa0\x8f{\x07P)~\xbe\x83\xa3:B\xd8\xbf\x11\xe6i;\xcb\xdeba8\xd3\xac\xe2\x8fS<\xde\xc7\xff\xf6K\x0c\x9a\x9cn\x8cl\xa0\xad\xd3\x18\xfc\xe6\x17zX\xd84\x8f\x0f\x08sf\xfc\xa1\xc7\x8c\xec\xc0t\x15\x05\xfb#i\xb9\xf5\xd2t\x81\x16\xc5\xc4S}Be\xe7\xf6)\xb4\\,\x16\xc4\xe5\x97\xab\x1c\xc6g\x8b\x8a\xe0\xfcG\xc0M\xe3|t%\xc6\xdf\xeb\xa1\x0e\x98^\x92\xd0*}\xfe\xa4\xc0H3\xa9\xd7\xa8\xa3j\xa6\xea r|\xc6;\x95}\x036,/\xd9s\xcc\xce\xc4\xf6\x96D\xf6.\x12\xf6Q\x1bY\x92\xdes\x93\x05\xe0b\x96\xe2\xa2\xa9\xaf\x88\xa9Y\xa5,\xb0\x87\xfb\t\xf7\x8c\xf0\x0b\xebOWJ\x95\xe9_r0%\x0b\xde\x99\x02\xb5\x1f`\xe3\x03\x9cK\x9eM\x05\xe9h, ~\xdcY6K\xb0\xa8\x14RT\xe3\x8f\xadU\r?\xde\xb2\x7f\xd2c\xb6)+(\xb0et\x07Z -\xdd\x95\xc1a\xb0yMr3\xbb\x0c`^\xf4\xb1\x15\x1c\xe2\x02\xb8\x8c\x1a9\x03\x7f\xceZ\xf1\xdd8\xb4y\xdc\xf1\x86\xc0\x9a\xfe\x96\xbf+5<\xb3\x13\xf0N\xbc5&yh4^\x15\xf1\xc3b\xf3\x0f6\xa6\xf1\x19c\xf5f4\xde\x8cJ\x0b{v\xce\xd7\x85?\xee\xf6\xce \xa3\x80\x9a\xf4P\x13\x15\xce\xd4\x9fp\xd2Z\xe1k\x1cd\x8bo\x9a\xbd\xc4\xfe\xe6\xb0zj\xb3Wq":\x86f<\xe7\x94\x00\xb2\xca\xfc\x1c#\xa1\xa7\xd8F:~\xc3\xea\x98f\xc4-\xdc\xcft\xde\xe5\xf3\x07]\xc5\xcd\xd2\xf8x\t\xaa\xfa\xe2L\xc3g\x9d\x82m\xef\xf1\x1aj\xd27\x11^\x9a\xa9\x0b\t\xd2\xeb^\x95\x8b\x02\xf9\xf3\x9b\xca\xb8U\x94\x08<{]S\xe7\xd6\x1e\xd3\xa9\xfcFIYv\xe8\xcb\xcdp\xfd-"-\xe2\x17U\x15\xc0\xacC\xbb#\xf9?\xac\xb18\x85\xd4\xb2\xc7\x9a\xbc\x04\x9a^4\x83\xe8b\x8c\xa0\x04Ry\xc7\xab\xebKU\xc1\xb0\xe4\xf6\xc7\xe3\xc4\x1f\xe5\x05\xa7d\x8c\x98\xbd\xdfF\x07b\x1e\xcc\xd4c\x8c\xfb\x998\xb7\xeb\xcc\x99\xd1V\xa8\xf6:v\x85\xa6\xee,\x89\xf8J\\\xcf\x7f\xc5:\x99\xca\xd6\x8f\xfaN\xae\xe2\x98\x85\'js\x81T\xa9\x99L\xff\xbc\xcapY}\xfci~\x10w\xf5\xe07\x11\x02)\xa8\xf4z\xef7y\x16pbQ\xc5]~y\xca\x1f\xdc#]\xcd5\xc2\xf2\x9a\xf4\xaa9\xac\xe0\x01\xa2\x85\x07\xe8\xb7\xd3\xbf\x81\xd1\xbb&\xa2\x1f!\xd8\xf8q\xd3\x94\x0cnI\xbf[\xd4\x06\x9bl\xa0\xb2:\x9f\x19\x9d\xb5\x04\x1f\xa8\xc4\x1b\x93\xd6\xb26\xb7\xb1\xb0\x83\x0fo\xf4\x95\xc0b\xf4\xf9\xfa\xe6\xfb=\xf6{\x19\x86i\x9fQZ\xdf4\x13}\xcd\xb2Mn\xc8.\xd4\x90[\xcdQ\x0f\xa6V\xf8\xf5\x89\x9bN\x06\xb5d\x19\xff\'\xaev%+\xa7O~e\xdfA\xa3\xf5\x00\xfek\xa6\xe3)\n\xedh\x8c+\x94\x90T\xf6,\xa8Ws&I\xb0b\xa9\xfdq\x1blN\x95U\xdc\xdd\xd9\xa3\xe5\xe2\x92&\x9eO\xe6\x1d\xa63\xdc\xde\xd3\x05z\x7f\x99\xd2\x03<\xa5x\x11\x89\x02\x7fe\xd4\xe3\xebF\xc4\xe6AH\n\x11\xbf\x04F\xcf&(\x02>\x8fz\r\xe9\x9a\x7f\xd5\xa8\xbf}\xf3\xf5\xd5\xf4\x1c\xe6\x8cQ0\xd8\xe3\'nw\xae\xdfr\xc0;\xf5\x16\xe5\x15\x8e\x0fr\xdf\x16rg\xfc\xd9\x05\xc8\xc2\xda\xf7\'\x946\xab\x8c\x88G%\t(7ae:_a\xec\xfe\n\xfd\x87%\xf6\xdfS\xeb\xa8\x8bif`0I6C\x14\xb0\xea\xb9\xc4\x818\xaf\xcd\xcc\x98yE\xee\x83\xa7G\xa7V\x1d\to\x95\x8a\x9f\xb8\x11vQ\x10\x15Rl\xbe\xcevq\xb0\x9cA#f\x8b\xa1\xaf\x7f\xa1Po\x12\x8c\x89\xda\xb8\xf8\xac\x0ew\xcc\xc7\xaf\xb8\xfb\xe7&3\x1f\xb9\x8e\x0fZ}o\xdf\xe9\xef\xb3\xeaQ\xado\xe7\xd3\xb0\xf8g\xb3t\xf1\x13\xc0\xd3\xd9x=\xcd\xbbE\xd3(>4\xa5-\x8b\x81\xc2\xe0\x8f\xc4\xf5:=\xfa\xd0\xf1\x12qXk\xba\xad\x8d\xa0\xd9\xd6rA\xef^o\xea_\x82\x99\x9fQE\xe2\'\xad\xcb{\x93\x93\x1b\x9d\xd9.\x90\xa4\xdb6~i\x063\xab\xba\x93\x9aO\x96\x979\x8c\x1c\x07\xbc^]\x01px\t\x0b\x1d\x8a7\x8a^\xb4\xbb\xdc\xd9\x15\xd1\xb6Ybu\xbb\xaa\x83\xcb\xb6!\x13\xc8\x1e~\x9d\x1b\xd1m\x95L\xf1\x03Sb\xe5\xa5\xd9\x02\x94\xc6B\xfcm\xe9\xcb\xb5\n\xb6F\x9b5\x89n\x12VzIQ}\xe8\xba_\x1b7r\xc3\xdf\x846o\xa7e\xd4\x16\xdfX\x99\xf9\x1by\xc6\x9d\xf3\xa9_\xed\x97=^\xceE\xef\xb1\xce\x0b\xc7\xa1\x84\xfbP\x87b^\x8e\xd9\xbc\xb6m\xb8yP\xbf\x8c\xa2M\xf0\xb2\x82l\xfalQw\x9e\xe9*\x9a\x02y\xc5\xf1Wi\x1b\x1a\xa3\xbbpM\xb0<t+\xe0\xd6\xc6C\xa7\x1e\x81\xeb!\xde\x97 \x89\xa3]\xa5T[\x8fE\xc7\x1au\xba\xe4\x91n\xd2\x12\x16\xb5%\x9eFup/7\xf4\xb2\xfa\xb7\x17\x82yaa\xdc\xc9\x9b\xc72\x7f\x8f=\xed\xd2\xce,@\x8en:\xdc0z<\x02lW\xdc\x96\xa7Y\xb2\x11E\x9d\xde8\xecX(\xcfDj\x8e\xc9\xa5_uE\x11N\xd2j\x9a\x86p\x02\x81\xa3\x89\xf5\x1d\x01\x17i\x19a\x8e\x1d\x18G\xac"\xae\x91\xf8\x06Zj\xcc\xbcF\r\x96\xa62$\x81\x8f+\xbeZ\xcfs\xab\x0c\xb9\x99\xce,V\x1fa\xa2\xaaO\xdd\x0ct5n\x0b\xed\xe6\x05\r\\(\xf0UUW\t\x1a\'\xc9\xc1\x85r\xea\xf8rV\xccr\x0f\x8cHJ\x9fT\x92=\xfaed\\\x01\xed>\xfbs\xd9\xceE\xf8\xb6 \xa7U\xce5\xd2O\xcb\xfbg\t\x9eq\xb6\x80\xcew"9\xdd\xcaC\xe0X\xd7~<r\\1\xb0\xc4\xa0S\xbd\x1b\xae\xb7K1\x8fI&l\x8d\xe2u\xc2p\xe6\xceG\xa1\xc2\xc29\x97e<\xea\xa1\x9a]\x1b\x93\xc8\x15Y\x9c\xad\xb0}\xbd\xe2\x88\x11ni\x97]3^!|\xa9\xc7\xc8\'\xa4Uc\xf7w\xca\x08\x189\xb5l\xf9\xd7~\xb4\x05\xdd\xe6\x8c\xd2q;\xad\xc5f\x06`\x8a\xaek3\x9f\x18\xe7`4u\xe3\x00!:\xbe\x90\x98\xb9\x98:\xdao\xa1\xa8(c\x1d\xbb\xfb4\xd9N\x84qk~\xa8\xc4\xfb\x0e\xc9\xa7\xb9\xc7\x97\xc9\x84.q\x1b+\xad\x9bV\x1b\xd3\x16%\xd1\x9aj\xd1J\xaf\x1f\x80^(\xdbC\xdc\r\xf1HJ\x15\x16\x0b,`x\xf4\xd7\x8e]\x06\xcb\x88\xcb\x15\xb5\xff \xe0A\x00Z\x82o\x0ee\xd3\xb0\xad\xff"q\x98d\x95\xc8\'\x88\xc1it6&\x83\x0c\xfc\xa1\x837\xb18\xca\xeeN\x10\x1f\xf6to\x92\xa8\x87\x8a\xb3\x13XZysF\xe9\xcd\xbd\xfa_}o\n\x95%\x17\x80\xb0(\x01\xcb\x04\r\t:\x1a\xe7S\xbaQ\x86\x83\x85`\xee\xfeR\xe9^\xa6\xd1\xffT\xea\xef\x81E\x7f\x89\x1dI\xd2+[&\xba`N\xe7\x8e\xbd\xddK\xaa\xad\xaa-\x1d\xfe\x1dP\xfe\xeb\x18;~k\xc5*K(d\x0f\x077y_\x19\x97\xf0g\xd4\x96=(o@\'\xe6\x86{r\x91"\xce\x1c\x1a\xac;\xe9\x12zv_\xcb\xd8\xb7\xc6a\xd2\xe7"\xd2\xc8La\x1e\x0c97\xfd\xab\xceO\xd1R\xab\x9e\xd6v]\x17$-qfE\x81\x90\xa8\xc9\x03[\x82\xaf\xbd\xbb\xb1\xaa#q@\xbc[\xa5\x8c\xf6\xf3YmR^\xf5~W\xa7\x8dO\xe8/j^5\xa9\x0e\x01\x8c\xcb\r\xd0\xaa\xac)\x1c\x91\xb4\xb0\x8e\x11v\xc8\xbd\x86D\x83\xb14\xdd,\xb5\xef\x01\xb5\xc4\xe0\x9a\xa1az\x06\xb1\xf3\xef\xe7\xf6\x9e\xde\x90Q\x13\x12\xc3^\xad\x99Ol6\x1eG\xa8?\x85\xad\x97h\x16\x99\xd0\xb2h\x9b\xd7\x1f"\xa1\xae\x82\xc2\\\x83\xce\x94\xcd\xd6\xf2\xa9s\xe1\x19V\xdd\x16\x1b\x10]:\xdf3\x0b\xce\xb3\xc8T\xc3\xa85pq\x0bo\x93c6=LY\xa6\xad\xfe\xac\xa1G\xe1\xb3\x91\xcc\x8c\x89[\x15\xb1\x94\xbc\xc5\xd5\xdf\xbb\x14|\x94Z\x1b\xe6\x1a\x85\x8b\x17\xfdX\x1a\xb5\x9c\xaa\x98%t(\'\xad\x89\xec3\x9c\x02\x9b&9\xe1F\x19c\x92\x90\xdc\xa4\x9b\x96q\xbf\'\xeb\\\x19\xe2z

amp;R\xf7\xfc\xeeW\red\xc4#E\xcaE\x10\xf0\x84\xf4\xce\xd9YT\xf7\xe3\xa3\xff.0Z@k\xb7\x83\x06\xd0\xd2\xb4\xd6i\x0b\xec,\x05\x16\xf1\x0ef\xfe\xe8X\x82/\xb7\xaer\xc6\xcf\x83\x03F\x982Q\xa2\xf5\x9bC\x8bo\xb2\xcb\xc1\x8e\ty\xe1\xa1E\x8a\xd4V\xf8_dr\xc0;1(` \x84\x12C\x0bu\x87\xfa{\xd3\xe7u\x85\x81A\xb3a5\xb5\xfae\xe6\xb4\xc3\x16\x19S\xb3\xd9\xd1\xa5\xf7UA#\x0b\xfaQ\x0b\xe4\x9f\x15\x01\x048\xf0\xab\x12\x15\x8c\xde\x98\xcdeM\xe3\xdaV@C\xb7\x82\x1a\x0b\xf7\xf0\x8e6\x83\x8e\x9c\x82\x8f\xa5\xe7\x8b\xd1\xaa\x12\xae\xcd\x8a\x99\x1c\xa1\x07 \x94\x18\x98~\xd3\x9d\xc0\x92\xbf\xcer\x13\xc4\x87\xdc]\n\xce}\xa1Z\xce&ZUqK\xcdl\xd0B\xcc\x8b\xf9\xa9\x83\xbdF?x\xe7\x7f\x87"\xb5\x96\xcf\x81\xddk)d!\x1f\x1c$\xd1\xc4\xd9\xe0c;\x97\x96\x98\xab\x19\xd9\x17\xd5\xbe\x85.\xf1\xf5\xbb\x8f40*\x02\xf3w\xca\x84\xc3\x86\xf6A\x91h\xc5\xe4a[\x15;B\xa8\x07\x10l\xe5\x19tt\xe2\xb4K\x88 \xb0y\xa9\xf9Y\x00\xf0K\xd0\xab$\xc8\xac\x16\xa9\x00\x1b\xee\xcda\t\x9b\xb6dr\x11\xd1\xd4\x8f\x88\x07\xe7\xeeI=\xb1\xca1\xe6\x94-\x17\xe5\x02x@$\xef(\xea?\x81\xc7\xa3\x83Q\x92\xe3T\xde}\t?\x9e\x00\xab\x8c\xb3\xbc"\xc5\xa4\xbb\xf1\x1c\x08n\xc9\x83c\xfc\xb7\x07w\x0f\xa1N\x95GS8h\x8bK\xefw\xb6mH\x9a\xc9\x13\xc7\xa7I\n:\xeb\x8a\xe9\xc8\xacx\xad\x9f\x99\xbeV\x18\x99\x98nt^\xdb\x13\x87\xbc\xf9\x84\x1fV\xd5\x15"\x8e\xcf\x12L\x17\xcb\xc3\xfa\x1b\x89dc\x93\xf9\xce];\x83\xb9\xcf\xeb\xb1qw\xa31\xd2\x9a\x1f[q\xc80\x93?\x91\x95MP\x0e\x89\xcb\x19\xe8\xfa\xa2\x87\xcc!\xc6\x9a\x06\xe9O\xdf~v]\x94\x94\x9b\xbc2!\xda\x8a\xa8\x06\xe4~j/\x84\xc4\xa7Spj.\x8e\xbb\xb3\x9aq\r\x16D\xceM8\x0c\xa9\xab\x7f3{"\x06\xc6\xc7))\x88G\xc1\r\xeb\xbd\x1e\xf2\x1aV<\xf9\r\xb32\x98 \xf7\xc8\x02\xb2x\x9e#\xbd\xad\xe6\xb4 U\x96W\xa3\xe8-\x99\xeecW13\xa8\x95a@!g/X\x92=NP\x18V\x17\xd3\xdb\x81\xf2\xd6J\xe3\x1b\xce\xc9\x1bu\x84\xd1\xc4\x03$\xf5\xa6S\xc4\xd84\x19\xc6\xc4(\x1bAP\xc37\xb1!0\xf7\r\xc3\x9a\xdc\x16\xd4\x08\nw\x01\xd4\xe2\xbb\x92\xeaw5\xf2/j\x13\xce\x8aa\x1e\x00h\xe9\xcf\x07qf`\xec&^x\x0b\x86R\xc6>\xbb\xf9\x9b\xfe6\x10\x89 ^K\xd3\xe0k\xa7\xff\x15-\x11\x14\xb9*%j2\x95\x92\xa9J\xc8y\xa3\xb4\x9c\x8a\x1b\xad\x99\xc7\r\x80e\xd4\x9f\\\xc7D\x17\nr\x94\x06\xe2\x80\xc0x/=\xbb\xda`_\xd1\x96@9\x12\x03\xf4\x984\xcc1\xf8YQ\x17\x91\xed\xf2E\xe8\n\xe4e\xca\x1f\x9es\x13\xe0\xfd\x8a\xdd\xb5\x90%\x99\x14)\xa4UA\x01O\xdf\xa6\x8a\xa1H`\x16\x18i\xe0Y\xedE\xd8U\x84J=\x9f\xef7\xe9zo\x81\xce\xfdy\xccL$\xaa \x91\xc2\xb1>\xe5\xd9\xe7\x0f-\xd6\xbeD\xb1\x7f\xach\xf6\xa0Bd\xb4:\xaa\xf8\xdf\xc9\xc8k\x8bd\x88\x17a%\xdc\x89\xe8\xe6\x9b6\x0c\xf1\x1e\x87\x14ma]\xa6\xf2f\x88R\x97o\xa9L\xab\xfc\xa5\xbds\x17\xd0G)\x7f\x92\x0e%3\xb49\xad5\xb3\x96\nS\x12\xda\xc3S\x0c\x14\xed\xb1BnS09\xce\xd0\nN=\xab\xef\x98#I\xda\xd1\xd4\xa0\x937^\x86\tR\xe98`Qzs\x10\x05\xb8\xee03T2\x9ca\xe1\x11\x95\xb5B\xc4{\xa6gj\xd7\x89As\x87:L\x1cf\xbd9!>\xd2\xff\xb6\xa1K\xc5\x83\x02\x1b\xba=W\x9b\xd9\x17?\xea\xe3NH\x0eUY\xe0\x1f\xb9\x97/\x18\xb6I\xe6V\x8c\xd1\x1c\xc21&\xa7\x9f\x82\xa6!m\x0b9\xba\xa1\x05j\xa0\xfd\x85\x14\xb4\x10}\xff\xc2\x18\xea\xf5\xefYaryM\xcd\x1a\xce\x86M\xe6\xe3\xf6\x96\xd29\\\xc3\x14\'P9"e\xa6\xd7]\xac\xf9!c\x97\x8a\x96<\x90\xcb\xf3e\x8b\x8a(\xf7A;l\x82(l\xfcU1\xd7\xb3_F-\x08@\xa3$\x11Do\x91\xcc\xba\xad|\xa2|eP\x04\xe84\xae\xe1\x03_\x95o\x05\x17W\xaf.;\x1f\xd9Z\x96\xeeD\xb5Q2$,y\xd6\x1bL\x1c\x94\xdf\xa2\xe9\xc7\x9e\xa8\xba\xbe\xef\x84\xe5\xc5\xc5\x93\x14\x04\xe1;\x9b \x9dv\xe3\x0c\x8bB\x0c\xd1\x03\x17\xa7u\x1a?\xa5c\xb5\r\x1er\x7f\x81\xa5\x92\xeb;\x19\xd1}\x02o<io\x1f\xec(\x0c\xa6\x8f\xb6+\xeaU\x03\xf6\x88i\x02Rl\xe2!\x1d\xe2\x12\x00\xcf\xad\xc3\x02\xc0[\x06\x9d\xfc \x1c\x9emM\x1f\n\xb1\x1d\x16\xd6\x93\xffo\rW\x1bG\xa9)\xc5\xf6q\xe6\x8f\x18\x0f<R\x1bfZ\xe6\xe5\xf7Y7\x1b\xb6D\xc4\xc4\xb4\x10E\x91\xbc\xe1zt\xb4H(tg\x141\x1cL\xae\xb3\xfa\x85\xfdX\xe5M\x80"\x80MB8\x06\xc1Y\x11ou"\x99\x9d\x94;\xe9\'K\xf6c\x9b\x03\xfa8\xcfj:\xeetV!^N({nwvT\x0e\xe7\xfe.s\xd9\x86Wi\x15\x9c\xfaf\xf5\xa0\x96\x80r\x03>\x90\xa2\xebQ\xc5/\xb9\xc7\x8cF\xc6#\x02\xdb\xd8\xae&\xdav\x93\xf0\xeav\x9d~\xc4\xeb\xad\x97\xa3\xed;\x92\x8b\xaa)\xb4\xccO\x95\xfe\xde\x04@\x0b\x05j\x9bW\x99o\x00!\xf9\xd7\x1aM\xc1\xa6\xb2\x02H\x0b52\xab\x92\xd9FN\xd7\xfdJ\xdd\xe6\x88\xbe\xc0\xe7\xf9\r#\xc6)h4^\xd7\x19\xe7\x14\x8e\xe9L\xea1\xf2\xd0\x9b\x92\x86\xc9T\x96\xd6\x80\x90\xe4#\xce\xe8`\xb0\xc1y3\xeb\x00\xa8-\x89OJ\xddB\x18\xb5\xabBuZr8\xd4\xdd\xbcB=\xe8\xac\x12t\x1f\xba<\x99\x06\x16\xf8J\xd6\x97\xea\x91\x92\xc6VqE\xdczn4~`oI(\x0b\xdf\xaa\x90x\x1d!\xfa\xda\xbd\x17\xfa\x91#\xa6F\\P8\xb8\x8ex\xe5^\xb1dq\x83\xde\\8\xb9SfW\xb2pc4\x7fd8/\x99\xf0\xf8\xbac8\xbaiBO\xc1\xd3\xfeLx\xde\xcf+\xe3\xa2{{M\x17\x98\x117\x87\x91\xb9\x946\x97\xb1\xcc\x02\x9b\x1e \x15\xec\xf3\xaa\xe3C\xccM8Yp\xa5\x14\xb6\xafXm\x9e,\xdej\\>\x0e\x80\x13,\x8a\xfev\xb4\xae\x9c\x9b\xcf\xd4`\xb7F\x82\x87\x8cs\xc6\xbe\xb6n\xca\xff\xe8\xf4y\x9a\x0f\x97\xf8z\x83~\xc0\xbdrr\x0e\xbfx\xad\x15^\xe0\x8d\xdc7\xb2\x11W\xaek\x05\xebe\xf5\xa1F\x83\xee<g\xc7\x19\xa6\x1e\x95\x8c\xd6`\xfa_\xe5]5\xcd\xe6\xc9\xedX!\x7f\xd9H\xdadP#^\xd7&\rug\x91\x1d\x9a.\xdfQ*N\x95\xec\xab|\xf6\xf9L\xb1\xbc\xf7F\xba\xd5\x1dR\x1bP\xfb{\xf2}7/\xa3\x10\xb9\x0ez\x12\xf5r\xab\xe6#\xeb\xddJ\xd2\x8d{\x91\r\xbc\x89\xb5\x00\xc6\x9aP)\xa2e\xadq\x8a\x94H\x02h\xac\xddl\x84\xc9\xcd\x95(m\xa4\xecL=Kp\xb9R\xf7D\xe5\xc7u\xbe\x17\x96#C\x9e~%\x94\x96@1]\xc4\xe4\xb1\x88].\x02\xf2\xfcGS\xecw\xcfz\xbf\xeb\xe8~\xfa\x8f@\xea\xd2?\xc15%\xa3\x1f \x8cq\xa6X\x0cG}\x87\xb0\x03\x9c\xff\t\xb0\x16lf\xacW\xc0-\xaf\x02\xd21\xef\x1d\x9d\xbf\x8c\xe1\xe0[\x92\x1e;\xbej\xd6]Ix7\x91\x91\x11\x04\x13:h\xd4_\x1a\xcc\xfd\xc1\xef;\x8d\xa6\x90\xf5s\xd2\t\x9d\xca+\x8aGp\x05\x93\\\x07\xb7\xden\xc1"\xae\xd3\xb6%\x05\xc2\xa4,H\xd2\\W\xf5\xe8U\x91\xf1\xed\x14\xa1Fuv\x8fH\xdc\x886\x90F\x83\xb4N46v \xef(IZ\xfd\xe2\xb2\xb8\xe5\x96Gk\xccI\x18\x03\xe7\xdf\xd2e\x07\xdc\xdc\xfab\x0f\x8b\xde\xb7\x8d,A\x91l{G\xady\xec\xe3\xdb\x0c*k\xf9\x8f\x03\t\x17O\xcbf\xd7\n\xf5\x90)\xf60\xeb\x02\xb9owG5\xb13F\xee\x8b\x11kW\xd7o\x99\x8f\xf2\xba\xdc\xe5\xe3k\xf3\xa2\xf3V\xe3p\x06\xff\x8e\xd9\x13R\xae\xbe\x12\xa0\xc8\xcb\xf3i\x9a\n+\xb5+\x12`\x94\xbc\xbd\'jv\xcd\x81oh\x80\x8e\'V\xe2\xea\x93\xfb\xee\rrz\x93z\xe2\xc1\x91\tyA~\xf7H\xd9\xb6\x8f\x17n\xaf\xdc\xcf\x97\x1eI\xca\x83\xc9\xe7\x9c\xd9\xc7\xfa\x93\xd9\xaa\x85\x02\xe1\xf0>\x90\x03\xc5\xc7\x95\x07\xd6k\xf9\x9e77\x90@\xe3b\xfc\x98\x13\'\xeb:\xa8\x83]w\xb2\xda}\xe3Gh\x00\x0eD\xce\x8f\xa2\xb2U\x15\x04f\x16Of\xd3{\x98\xd4FcS\x7fU\x82\xa3\x0c\xd7\xb78\xc1\x1aj:\xbe\xf8C\xf9`>\x8b\x8c\x17#t\xa8\xd3\x8e\x01\xd0!\xb62o\x03\xea\x96\xd2--}/\xab\t\xa8!*\x96\x19\x03\xbdQ\xd8mUP \xe8.\xec\xbb\xe0+P\x9f\x06l\x879\xf3\xa8\xecv\r\xae\\\x1b\xf2\x05?\xff\xd4\xe1\xb9U\x95\xc6\xab\x08\xeaN\x89\x80S\xc69\x1a\xcca\xa3\xf5\x14\xb5~\xc6\t\x9d\xf5\xabY%\x1e\xdcI\xec\xc4o^x*\xcd\x12\x89\x08\xd2\x8c\xb8\xb0\x04\xc104\x92U\tH\x00S\xdc\x8d\\\xe0~\xfa\xdb\x80\xd2e\xe1\xfc\xab\x85y\xb5\xf1\xd6\xee\x84\x17\xcad\xad\x07\xc9l*\xcb\xbf\x9b4\xd7\x8f\x0eR\xa7\x1b\xc9\xc15\xd08m\xdf\xd0\x84:\x8e\xcf\x17\xb6\xad%\xcd\xa5(\xe8[K_\xe0j\x00F,\xc5\xc6\xc9\x9b\x08&\xd9l\xc3;\x03\\\x9f\x9a]c\xf1\tr\x90\xa5^c \x89\x0e\xe2J\xa0\xf7\xed-?\x88=\xdc>\xf7\xb6\x0e\xcb \x1f\xa11\xa1\xe4\xa5\xed\n\x08\x00\xddx\x08\xd2\xeb\xd7N\x06\xb8%t\xc4u}0\x0f2\xbe\xb4\x93\x13\x99s<\x04\xba\x14\xea\xf9\xd4a\xa0\x12\x06.\xb1\x83\xf4\xb0s\'\xc0\xb86\xc5e\xf3\xb5\xa9\xd2\x91\xc2\x02,.\xd5\x8e\xf2\x905\r2\x0b\xaa\xdf\xc8Ce*\x91h \x05\xc2}_)\xbc=w\xe8\r\xbd\xfd\x1f\xed\xee\x93\xf3\xa5\xeaF\xe9V\xb6$U\x11\xf7O\xd6\n3\xa3\xa3N\x13\xa7c\xc2No\xc3\xde\xea!\x1d\x0e\xa0q\xff\xdb\xeb\xd9p\xaeU\x84\xd7d\xf4V\x1f\x1b\xf3\x06\xbe\xfd7\xf6,\xeb\xf5*:1-\x87\x9a\x03\xa1\x04Vp\x88\xc4\xa45\xc4}\xf5\xe9\xc2tt\xeb\xc4\xdcu]\x973D\xc7\xff\\F\xd7\xe3\xdb\x0fv\xa2\x04?\xab\xee6\x93\xc6A\xf7\x02\xfa\xd4\xe6p\xa9U\xb9\x91\xbeeSv\xc0\xde\xc3\x1cg\x86\xd4\xb3\x9b\x8a\xffB+\xa6z\xdc7\x07\x1d\x0b\x1c\xc1w\x81\xfc\x8bZ\xcf\xe2\xfep\x9f\xbb[\xae\xa3r\x10\xaf\x1e(2\xc5\x17\xaf\x00\x88\xe1}yS\xbe)\xf3\x83\xd9\xa2\x0e\\\x0bFuS(2i-\\\xca\xa6f\xa4P\x89\xc0\xaf\x07\xa9q\xfd]\x8f/\tA;B\xf1 \xc0\x8cv^\x9d\x88\xcf\x85d%\xd6l\x93`q\xbb6g\xe5\xacd9\xdf\xd4\xd7\xb0g.?\xd4\xafR1c\x8cg\xf9\x12\xe0\xd7e\xab\xc9}\x88\xa85\x96F\x96_)]\xb7\xa4\xaa\xf3\x94\xaf\xb2\x03\x9a\xf5{T"\xa0W\x86\x1ch\x1c\xf7\xb2\xf1$t\x03\xb8\xcbg\xb4\t\xdd\x9f\x15U\xab\xf1zN>\x1f\x99|\xec\xadAE\xca\xc8\xf3\xa9\x80\xbe\xd2^;\x8d\x8a\xf86]\xf3\xffnC\xd0\x9a?\xd7\xe6Q\xf3\xa6\xefcPP\xdbG\r\x8b\x16\xaf\x8f\x83\xba\xf9M?@4\x8b\xbc\x0f\xfa&L\xc1z?\x1b\x80\xf4\x9f|t&\x0c\n\x1b\xdbv"\xf4\x91\xd5 \xaf\x07\xb9\t\xd9_\xd8\xe3\xf4\x95;\xac\x10\xd4\xa7}p\xd9\x7f\x84\x84b\xc8\x98\xceI\x16?\xdey\xdf\xfb\x00yJ\xaa\xeb\x9c\xf63\xb4\x0c\xf6\xad\'\x92\xc9b\x87\x17r\x84\xf5\xd60\xba\xd2\xb7\xfb\x13\xb3\xc5\xb8|~\xea\xf7j\x96G#\xb6\xf1\xa2\x0e\xcd\x05\x85\x8fo+\xec\xe2=\x90\x93s?\xa5\xd8\x0e\x17t\x15\\\\1\xf8\xdd\x1b\xacT\xa4\x14\xe3\xf4\x10\xfcn{P\xa6\xb8^-\xbba\x10\xcc\x91\xe2^\x19\xf2\xa8\x85\xa4S\xa5\xc8&\xcf]\xa6B\xdf\xc3-\xa1\xcb\xe8\x90_\x1a\xb8\t\xbc\x1bv\xbd!0>\xc6\xde\x87)~\xe6\xf6\x87\xf2\'\\}\x18[0\x8cm\xdf1\xe6\xc1\xa24\x17mC\x87\x87\xc9\x16\xb7\xe2\xfa\x9e#\x03\xff4\xe0\xf2\x02\xfb\xc9\x85g\xce\x98\x9a\xfe\xe9\xb4\xd5[T\xb6\xfa\x88\x11\x84\xb6\xde//3\xf5\x07\xcd^\x83FZ\xbf\'\x7fr\x03\x06\xee\\Up\x14\r\xb9\xdaY\xf0W\xcc\xd1\xdcF=IP(\xa0/M\x08\xddlN\xfdw\xe1\x06(\xb88J\xf6$\xd0\xee\x06i.\xc2\xf0\x89\xc1u\xef\xb8"}\xc7e+\xd2&\xb9\xd26gK\xe8/\x0f\xc2O\xc2\x80\xfaX\xbe\xe6\r\x8be\x9c\x8b\xb8\x0e\xfb\x95r\xca\xeb\xcd3\xb4A\x13$\xe9]4\x873\x97\x08\x00r\x88\xe1M,\xc8\x00b\xcc}QB\xc9\xddNiR\xbe\xdc\x01\x7f\x95\xa9\xf8D\xd5~\xb3=\xfd\x80\x7f\xcf\xfc\x95\x0b\xa4\x0f\x9b\x18`\xb7\xdf\xc7jn\xa0 \xeas\xb8]f\x1d\xd2\xbc\xd6\x88H)\xff\xce;d\xfb6\xc8@\xe4\xe9S\x1bp\x1c\x99\xae\xafP\x86\xfd\\3t\xa3\xf0\xf5\xc4c\xd7\xbd\rH \xdd,0\x99\x18}\xfd)2\xb2x\x16\x97V\xf5\xf1k\r\x02p\xef\xe8\xfaJ=g\xe6\x1d\xe2\x0e-:\xac\xb0\t\xdd\xe0\xa1\xa2\x00\xf1\xc6\xf5\xe4x2j0Ei0\xbb\xfb\x012\xeb\xc6\xe6OD|<\xc4\x92Y\xbf\xd7H\x8c\xfa\x019*oy\x97\x04\xfd}g\x063\x99oM\xa7\xc3\xe5\x04\x96\xbap&Z+9$8;\xa3\x1f\x0c\xe4_\xd2\xf7\x95\x91\x86\xdf9w\x12\xfa\xea\xed::\x87O\x7f\xb4\xefy\xbe}\x966/\xda\xf0\xed\x01\xad.\xf6Y\xa3\xe9\x1d\xafbr\x84\x8b\xa5\xd3Yi\xb2t\xdc\xf3\x86\xf6O\x0f\xdf:Z\x82\xd3\xf6HU!\xc6\xf8\xda\xfe\xcbi\xfc\xb3\x82y\xa4\r%O\xc7s\xa8\xcdG\xce\xca\'\xc5\x02\xe4`\xa25\xb0\x9c)\x003\xc4=\x06\xd8\x1f\x16\x98\x9b\x81\x94\xf2\xc0\x9d\xb79g\xf2\x8a\xcb\xd2\x8a\x97\x02\x96\x1fF\xc0M2\xc8\x17\x12A{\x1az\x0e\xe1\xef]\xe0\xa3\x86xw\x801\xa9d\xc0\xeb\x073B\x8a\xf5{h\xa3\xfev\x9d\xbd\xd3F\xe0\xc9\x13m\x87\xa3\xfa\x1b\xbb\xa7\x0b\xe4k\xc3\xf3\xf6W+\xd0\xda\x17\xaa\x97\xcd\x15\x03\x1b?\xba\x8b\x8fH\xdd9N\x18\r\xe1E\xf9/+\\\x15\x0eZ\xc0_\xc9\x87\xb3-\xc0?vw\xecV\xa4\xc3Y\x83\xa72u@\x83\xdb|\xcbOA\xe2BD\xd7\x1e\xb2\xabn#\x04\xb4\xe6\x9b\xa0\x9d\x01\xa8Ww\xf2u}\r\xb7Q\xd5\xb3\xcf\xa3K|\xc3\xa9\x07\x99\xd8\xa0\xd3n\xd2jEd4\xc5d\rj\xc8\xcd\'\xdb@\xc7\x18oM\xac\xb6\xdf\x84\xd3\x8f\xb6\x8b\xfb\xcf\xaeK\xe4T\x85O\xa0\xbf?M\xc5l(\x02\xa0\x9b\xca\xa0\xf1=\xeb\x0c\xae(\x923Z\xf0\xe2C\xf5\xf5eSP\xe5\x11\x8c\x83\x11\x10\xa5\xb4{\x8c\x02u\x0eu\xc8\xe0\xb6\xd9\xcc\x91\xdb\x8c\x1fn\xe3\xc9\xd7\xbf\xffk.\x12{9P\x81b\x81\x92\xc9yj_W\xa3\x06r4\x8fWv\r\xf5J\xf2\xf5\xe1GR\xb7b\xe0\x909\xa1tI\xdb\xa5_\xdb\x88+\xea\xa2\x94\'\xd6\r\xb3iW\xb8\x8d\xb9\xc8>\xf4\x03y\xcf\xd54\xb3\xa4\x83\xa9\x96\x10\x82\xc5\\\x1cqQ\x07-W\x08\xe6\n,\xc8\x9dd?\xea\x8fX\\B\xac\xcc1c==\x98\xd5v\xafrB\x8f>\x1e\x1e\xb2d\xe5\'MoZ]\x13\xa6\x07\x07b\xf7\xc0\xff\xf0\x17\xf4\x82/\x91\x13\xee\xdc\xd2\xc97\xb4c\xbc\x9c\x8d\x13>=Q\xc3\xd9\x90\x93@\x10V(\xcc\x1b\xe1\xae\x9f\xef<\xfa\xe8\x1cL\xc5\xe4NQ?\x92L\x994\xcc\xf9\x18\xc7i\x81\x82\x8a\xca\xfe\xa9.\xdc\xce\xbd\x928\x12\xe7\xab\x8c\xc0fu\x8e>cD6\xee/*p\x8e\xf0\x0e%\xf4/\xb2\xac<\x83|\x83\xbd\xa4\xfaE\x83\xf0\x10\xc1at\x18\xbdqs\xeb\x86\x17\x8e\x8d\x93\xdf\x16\x16\xf5I\xe5\xa0\xf6\x08\x00\xe9P:V\xa0\xcc\n\x1d\xfb\x7f#\xde\xe8\xbcdDD\xd4\x13\xda\x02\x1c6Y17\xfb\x08\xc7\x8c\xe7{\x9b\x95+gC\x0fI\x81\x80\xbd\xfb\x0f\xa8\x7f)9\x8aX\r8-\x84\xfc5a\xe3\x11\x03]\x97{\x154\xf5dwq\xd9\xef{\x17/K@\x16w\xdd\xa4U\xbb\x0e\xda\xdd\xdboF\x92\xe0\xcf$f\x00_=\xe6\x85\xce@\xe7y(\x15\x87\xea\x8e`\xf6\xf4\x10\xc4\xd3\x08\xef\xdb"\x084+\x8d\xb1\xbdt\xe1\x7fe\xf2IC-\xd8F\xb6\xde\x0bG`A\xa4\xe5\x9d\xdc\xfd\xff\xf75>\xdb\x11\x98\x88\xe5\xd6M\xf9\x9bv\x172\xd4:\xc1\xb7\xd9\xde\xec\x11?\xe4\xcb\x85I]\xb3u^|:\x0c\xf6\xfe\x19\x85\x90\x84F\xa9hH\xa6$\x85\x03/y\x8bQ3\xc5\xbb\xf4\xd6\x8fH\x12\xd2\x1e5:\xe6o\x00c\xaf\x1d\xc5\x1f\xf7t\x90(z\x85s\xe1\x8c\xcd*\t\x88q\xb9}\xb1w\xf6\x13\xe0T\xe3\xb7l\\5\xd0\x86+\x8f\xae\x11\x90\xcc\x9e\xfb\x9eWS\xddhx\xe8Cbc&\xb8\x94\xbd?\xa48\xe6\x8d>i\x07\xc6\x17\x93\x8f\xc5\r\xec\xc2\xf7\xb4S\x18R\xab\xa9)b|Y\xc8}#q\xa5\x19R\xc4(5\x83\xe8\xdf|h\x81\xb6\xa3\x97\x9d\xe1\x80*o\x03\xb6\xecW@\xb8;\x87\x9f}\xd7\x91\xdc\xd0\x03\xac\xbfN\x8b\xe3c\xbb\x96\xef\xde\xab\xe8R\x9a\xacZ-\x91\xc2|T\x10m\x85\xe5Vb\xbd\x1cLM\xc5\x8c\xf2\xfeV\xe7\xd4\xde\xb1\xbc\x86j.\x82\xc4Hb\x90\x1d%\xd0cO\xf9\xb2\x9d\x15A\x02\x83\xb3\x16\x82v)\xfaO\x88S\xa9z\x90\xeei@\r\xcebi\x97\xf0v]\n,\xd1\xd5`D\xbd\x07\x96n\xc5\xfaLW\xa7\x04\x8a\xbcG\xb8\x05gka\xf9\xe7\x11\xba\xda\xe0\xc3W\xf5\x18*j\xbd\x08[\x85\xda5\xa5N^P\x9d\xd0\x87\xe1\x85\x02\xf9>\xbc\x11\x12y[F!\xc4\xde\xa3=V\x1d\xa9\x11\xd5\xee;h\x0cu\x9d\xcc\x83\x1dC\x19\xa9\xea\x82\xe3\x97\xa8C\xfe0\x00\xe1\xcc\xa8\x7f\xf8\xfa\xb6\x13\x86\x01\xe2\xcb\xa1\x07\x1d\x01\x8c\xa5Q2q\xd2ZXWb\x8b\xa9\x19\xe1x\x08\xf4\xf7\xbb\xb9\'\xb2\xe9\xb1Z\x10=\xe4\x00\xea"-\x07\xe1\x10sF\x13\xd1\x14o8\xfa\x05,\xe3Fe!\x91Pb\xd1\x1a"3\x840\x0f\xc2\xd6\x11t\x90u\x01\xc6\xa5(\xa1\xa3\xf8~\xadk\x9a\x16\xac\xf5\x83\xd1G\x84J\xf75p\xf3\xce\xfc\xc0\xea\x900>efs\xc8\xaf\x0f2l`\x80\x1eq,!4\xfb\xb0\x02\xb6\x1f\xe6\xd8l\xfd\x1d\xbd<8\x96O\xc4/]\xa1Mr\xdb}\xb9\x07[#\x94\xec\xb3\x88\xa8\xe0\xdc\x17\xd8\xdd\xcc\xea\xfd\xcc\xf1\xa4\x0f3\xd2h\xb4\xd4~z\x17F63\xe4\xc7%\xe2\xe06S\x04\xc0a\xab\xef\xce\xee\xbao\x12Hi\xfc\x1c|\xb4`\xf9\xec\xdek)]S\xff\x1c\x0f\x1d\x98vj.\xa1\xe3\xec\x93\xc2\x1b\xdcQ?\x82\x05\xc33\xad\x87\x8c\x8cp\xa4\x8c\xe61u\x8f\xa2\x9ae&\xf7\xf1\\@\x1cN\xde\x86x\x06\x1a\xbd[\xa2\xa0\xf0\xbe\x9c^J\t#\xad|D\x89o\xce.q\x96.SG\xf0\xc5l\t@\xdex\x8bDY\x7fC*\xe4\x9ca\xc9\x1b\x9e\xa0\xd7>\xe2\x95\xb8\xfdn\xb2m\x00\x89\xd6d\xcd\x8b\x13\xb1\x93wg\xd6\xb1Mh\xa4E\x03\xa6:\xc1\xf5\xd2\x8c\xa4\n^\x8ed\xf7\xdc\xb2\x9cL{\xa0D\x8e\xf0<\xeb\x02L\xd7v\xc6\xa4\x12\xb4d\x07\x1fx\xff\x93\t\xb2\xfd\x97\xce\xacg]A\x9a\xe7l!V\xd6\xc9G\xc1\xe2C\x03\x9egG]S\xab\xb0d\xf9\xa4\'\x8fSf\x88"+\xc8\xe4r\xcbeU\x99\xa5\xde\xe8\xb2\x8b\x8a\x83v\x11\xdc\xe6cI\xbd\xff\x9ek.\xca\xc4\xbc\xd3\x11\xf5O\xc4\xdd]~V\x9d\xa1\xd6\xfcT\x08VX\xaa<\x7f\x8eI\xd2\xf3f\x04\xad\xc1\x91?|P\x14\x89\xcdt\x05E\xea\xfb\xd5\x93\xbd\xee\x97\xd5\x03\xad\xde\xb4\xc0\xaf\x99\x1c\xdd\xa4\x08\x9a\x90\xdd\xedPqh\x8c\x97\x1e~\xd9f\x13vHR\xf6\n\xeb\xc6\x04&\x81\x88P\x1b\xea\x15\xe2;o\xb6\xc9\xfa\xc4M\xa9w\x87jc2ve\xd0\xe8=\xeb\xf2\x82>\xda\xfayF9\xec\xce)\xfe\x85j;\x92j\xc2\x8b\xf7\x957\xf8\x97\x98Z\xa0R\xfd4[PI\x89J/\xb0\xde\xeei\xbaS\x06\x99\x1b!\xe4\x11\x05nQ\xeb\xf1\xb3\xd4\xd25\x7f7=\x9c6Qh\x94\xfe\x92<\x9a\x8f\x02d\xa6\x04\x97!\xcd\xdf\xc5\xfa\tB\xeb:$o\xc4\x8f\xc5&\xac\xca(\x18\xca!\xe7\xd5a\xe4q\xd3\xabJ@d\x8eP\xf6\xaa\x90\xa7u\xcb\xe2\xcc\xdb\x8e[\xd8\x8c\xfd}=\xd0\x8cEF>K\x94.\x86\xd5w\x0fD\xf1\x08<~\xb6\x0b\xc2\x11\x1b\xefF\xdd\xd7\xaa\xa0\xcc\xb940\x92\x05\x12\x85\xe2\x86\x87\x8f\xb5Y\x96\xcc\xe1\x92\xc9F\x97\xc9\x8a,\xff\xc3\xdbvZ\x80\xd6\xaf\x87\xcf\x96\x9a\xfe\xf8\x1e~\xd6MxlB\x11J\x16\xb8]c\x060\x1c\xe7+s%\xb2:\xa8\x9d\x0c8f*C\xc5\xa8\xd6\xf9\xe45\x9c\xde\xc2\xa7qQ\x07\x05\xb0\x10\x944\xb6\x05\x14\xe32\xee\x9b\x1a\xdc\x17|\xcb/\xaf\xd8~Z\xcf\xb9\xed\xacg\xc2%\xd7\xab\x9b\x1a\xad\xec\xec\x99\xbc\ne\xb30\xae\xaa\xe6\xb4T\xf7\xb1\xadF\xdc>\xef\x02\x9d\xd9m\xb0\x04<\x05\xb9\xd1j$n^\xd5\x833\xa2Lm\xfb\xe8Sq"Z\x1c8\xeb\x8acY\x7fo\xe6\xd0\xb8^\xae_\xda\xeby\xae\xa0\xa9\xad?#f\x1f\xc8#^\xa1\x0f\xcc\x81\xf5\xdb\xf4\xa8\xcaSwL\xdfe^\xf6\x1bX)t\x1f;\x9d\x8eg\xddH\x1d3\xd8\x92:L\x1d\x9e\x80$\x87\x11\x96\x88\xe8\x97:K\xe6E\xf7\xa2\xf2\t _\xce\xbc"\x14l\x12KO\xdf\x9c\x13\xcf*#\xd5\xcc\x18\x89\xda\x04\xad\x17z\xf1\xd3~\xdb\x05|L;qpw\xad\xbe\x15\x07\x8e\x1b\x8d\xf9\\\xf9\x19\x1d\xd2*%\xadT\xcb\xe9W\xf7\xd7\xe94\xd22\xe4\x93\x03Zz\xb8+\xc9\xf3\xec\x0f\xad\xf5/\xccI|mp\xda\x96\x95*\xc18]\x1c\xbd\x82\x0b8X\x1a\xb8\xec$\xdfhsY\x85\x8bI2\x03\xdf\xea\x8au\xf6\xc4\x1bl\xcaP\xd2T\x9b7\xfb\x8b,\xd0\xd6B,\xcaX\xec\xe6\xac\xf8\xc9\xa4\x1b\xa6\xab\xc9\x1e\xd7w,\x83\x97\x12\xd5\x9a\xdc\xd3\x1b\xc6\x02\xe5\xb1\xd9\r\x97\xc5T\x8a>.\xf3\x98\xbc~j\xf1\xf0\\\x1c,\xd5\xf6\xa5!\x9e\x00\xdc\xbc\x05V\xeeTU\xf0\xd0\xb8\x998X#p\xdc\xf6\xeb\xb5\xac\x96\x1c \x1e\x05\x1a\xd4+\xa3tp\xbe1\x8e\xaf)5mO\x01\xa2;\xbf\xb5\xf3^\x18\x976&\xea\xe9\xc4\xcd\x16\x990!\x98\xab\xf1\x02\xf3\xa3\xb1\x95\xbb\xfa{\x87=\xf4\xe0d\xcby\xc2\xcb\xfb 5\xc4\xff~*&q*\xf53\xca\xeenSK\xe0e\xa5\x91\xc8\xb3\xe3Q7\xda]\x851\xf9\xbf\xe2\x8d\x01\xe2\xab\xd1\xf3\xc1\xa5\xd3R\xec\x91\'{\xd5A4\xd4h\x96\xb7\xc3\xa4G\xf0\rG%y\x1f\xb3\xaff\xaa\xac\xcb\x80N\x85\xd7k\xd0\x8c\xbf\xc1\x8c:\x88\xc9@\xdc\xecFs}\xda=\x00\x1c\x02\xe2\x10\xa3\xdc)\x8eI3\xf9\xf1Kq#\xf0\xee\xe0\x94.\xb9Hv\x92m\xe0r\xa3]\xbd\xde5r\x08\xa1TA\x96!\xd1\x01\xf6\xed\xd0\xdb\x07\'y\xfa\xfeI/?Wb\xcaq%7\xe2\x9a\xd0f,?\xf4\xd1\xf3_m\x06\xb74\xc8<\x00\xb01-\xd7\xa2x\xb4\x0f\x8a\xf03|\x90y:I\xf8\xb5\xad\xe2e\xe9\xa01S\x06\xe2\xd4\xe2y\xe0hG\xbd\xec\xacl\xc6\xb0\x03B\t\x0f\xd7:\xe3\x82\xe1"K!\xd4U6\xea]{\xf2\xdbRt\xc7P\x8f\xf3ad\x04NY\x00\xd7\xa5q\x8b/r\x8f\xd5\xbfj\x9d\x82)\xdc\x9c^\xf8@X>I\xa2\xd2\xb6\xecJv\x96\x12V\x06\xff[\x8c\'\x06[\xadY\n\xc6I\xf9K\xc5[\xf7\xe1\xa9\x86\x95B\x8f\xbf\xe0\x88_%y#\xa5\xa6\xa3\x7f\xd5\x7f\xca\x84\xa40cX\xfbRZ\x9f]\x8e\x9d\x10\xd1\x05j\xaa;\x0b\xfa\xda\x9f[F\x02g\x82\x15C\x1cb\xf70\xac\xc5\xe8W\xce\r\x01$\x1d\x92\xa5V\t\xeb\x1d\xb0\xd5\x08,P\xb4\xbb\xf89\xa3\xd1\xf60r\x1ct\x9a\xda\x90I\x10\x95\xf1\x15\x1c\xc1\xc2x\xf4\xd9aV\xac\x8fUH\xcc\xb9jU\x9a\xaa\x02iH\x80\xde\xb0\x8e\xa3\x93\xd4D:\xbe\xa3\xe7D\x7f\x90y\xd2\xa3\xc4\nM\xeb-FAw\xd4\xab\x8b\x16#o\x066\x94}3O\x95\xd2>g\x1e\xe4\xa9\xa7\xbc\xce\x8e\xd9\xb3ii\xbb% ?B\xdc\x8d\xf6\xa1nV\xc1%\x9c\xf1\xfc\x9a&\x81\xd3\xbc\xbc\x88P\xaf\xfb,\x1aN\x99g\x14\xd4\xa0\xd8\xdc\xa8\xb7-\xaeO\xcc\xdfe\xf9\x1f\xb6\x86\x84L\xc4M\x8f\xa8s\x90\xb1\xf7\xdf\x1au\x8b\xb3\x07\xdb/\xd8B\xd3VY\xbcB\xf9\x8b\xbe\xf2\t\xad\xe5\x08O"R\xe8\xf4sI\xa7V\xfff\x94\xcad\xa5|\x0cq?>PLPn\xd7\x1cN\x97\x9aG\xa1\x996[\xac\xd0]\x86\x0cxi\xba\xc01lv\x83\xe5P5<\xdb^z\xff\xb7_\x81\x03my\x12\\\x06\xdb\x8cX\x14\xb6\xcc?\x1eSFQ\n\xa58\x8b\xfccj\xccL\x00\xad\x8a%\xfed\xad\x04\xc7|M\xb7\xd4\xa5\xf6*\xaeM\x9f\xba\xdf\xa8X\x91\xccT\xf2\xf8\xe3}\'\'\xde_\xd4\xc7\x96\xd6\xad\x012`\xff<\x06\x19F,\xfa-\xa8\x17\xa7p\x90\xe3~\xa0\xec\xf5\xeeW\\\xbb\xdeNh\x90\x9d\x94I\x8c\xe6\x1a\xfd 1y\xb7\x8a\x1c\xbc\xf6\xb0,\x94\xe5iv\xde\xd5S\xcb{\xbe?Z\xfd\\+\xd5\xa0s\x13\x96S:>\x83\x0e\xcd\x7f\xdf\xb3\xcf\xfbI\xe2pv\x0c\x81>0\xd7\xf88\x18\xfd,#3z\xe9\x9b\x1f\xee\x98\xec\xa0\xb5\x1c\x81\\\xdc\x9e\xc4\xb1\x8c\xf1o\xa4w\xb6`\r\x15\t\xb4;\xfbKNz\xb6\x92\xeei\r\x07\x92\xb1\x95\x19U\x08\xc31\xa9\x8e\x9d\\\xd9\xf3\xc2\x97\xb45AVcD\xed\xbb\x89\xf4\x92\x0bL\xa3\x05\xb3\xf0\xbf\x01\xdc\xcf\xe6\x8d\x02\xef\x17W\xae\xe5m\xc24\x0c\x9a\xcc}t_TW\xf7\x13\x8e\xd6\xb9U\x15=\x1c\xd9\x92\x90-\xa6":\xe2\\P\xb0\xc7\xba=\xf5\xf4\xbd\xb9\xaa\x8b\xf9\xf7\xe3}\xa2DU\xc6\x1a5\xb8V,\x93\'\xc6r2\x96\x03/\xab3\xc0\xb3\x8at\xc3"\xea=\xfar\xd8p\x1dWW"\xd7\xad\x81\xd2\xdc\xb0\x9bc\x94\xa4\x98\xf8\xcd\xd5\xd7Z\x8e\x0f\xbf\xd9Q8\x80\x15vB\xe9\r\xa6Q\x95\xee\xd2\xf4\x86O\x9e\x95yi\x0b\xef\x9f{\xf5.\x8b\xf6\xa2\x7f\x15V\x82\x1d\xc7\xfb\xb2P\xc3\x86\xe3\x99A\xd50\x07\x06\xf0\x9c\xcf\xf5u"\xb0\xc4_p*\xf8Q\xba_\x9c\xe1"\xc0\x83\xba\x18\xe0\x82g\x8f\xfbD\x07\xe5\xd1z\xf8Js\x84\xc3\x86Q\xf5\xe6(\xd8\xff\xca\x1dp\x8aT\x9b\xca\xdaFJ\x05y\xee\xbc.\xbd\x00\x00\x14fp\xba\xd0\xfd\xb1\xb1\x08\x1c\xe11\xddV\x1f\xb0;:W\x95\x1c\xad-\xa6\x00\xbf\xc6\xd3\x0b\xf4\xbb\'\x85\x7f\t!\xea\xc8\x9a\x8d~U\xe1\x9e}\xc1\'Y_G\xc5\xaa\xb3\x8bAE{f\xb3R\xfe\x8b\x9b \xe6\x81\x96\xc9L_\x99\xf1l\x94\x0ea\xe3\xf3\xc5U\xd5\x83\xe9 \x9e\xbc\xd7\xbf#`m\x81\x80E\xa4\x90\x98-\xcd\xc0YU3\xacK\xb9\x87\x7f\x84\xd3\xa8I\x80\x9aQ\xd62\x05PF\'\x0fK\xc9\x81\x9a<z;\xee\x81\n\x118+t\xb68ILZ\xc0\xd2\xc8\xd0^\xaa\xc7\x12\x86\xe3\x15\x1e \xec\xd2\xaas\x96\xd4\xc8\x10\x82T\x98\xf3f\xc97\xcf\xfa\x91T\xces\xd3e/\x97)\x92\x99\x0e"\xb0\xfc`\xf9\xb9\xf8{\xb7\x81\x1a\'\\(J\x15\x8e\xc6\xdbf\x96o1\xf2il!\x87\x80`_!\xc0<,\x06\xef\x04\xd6\xa70-\xbdX\xca;\x16I3\'33\x02\x00\x00\xd65N\xbb\xfd\x067\x11\x11\xa1\xf4\'S\x1a\xe5\x8c\x04\xf2\x95Y\xa3Q\xebf\xc1j\xbe\xfaN\xad\xcf?\xfa\xdfl\xe5\xce\xef\x92\x1aI\xf2\xd8\x12\x95g\xc9\xa4\x9eS\xb2\xb3.\x8fL\xae\xc5\x08\x8dA\x06\xa8\x08\xd5\xb9\xb3kv\xbf=\xccb\x90\x94\xb5$z\xcbf\xb4\x9fT\xb5\x9c\x055\xeb\xf84\xf7\x12\x99\xe3\xd8\x7f\xe4\x01{\xfa\xd69\xc9Rf<\x0bA\xe8w_\x9ec\xcd\xb2\xac"\xda\xb6]\xf63u\x8bz\x10\t#g\x9c\xf6\x91\xab\x886L\xd8L\xca2\xac:\x08d\xdfQ\xc1\n\xd9I\x94I\xbc4\xf6v\xcf\xc0\xee!_\xb8\x8c6\x17\x00\xadv\x05rj_\xcd\xcdV{\xaf,\xc8\xc6O\x99\xbdFt\x0c\x98\xc3\x0e\x9e\xe4`\x17\xaagu\xf5\xd9\x08\x12\r\xb8\x84\x11\xf6\x13-\x1d\x89\x88\xf5tv<t\xe3\xf0\xe0\xb6\xbcv\xf4\xe1\xb8\xba\x08\x99\x9erB*8\x8b\x1ag\x7f\xc2\xf1\xaf\xf5\x8a\xe2RQ\xe2t\xc6/?\x83\x9d=\x85\xea>.\x1f\x8c\xcf\xef\xde\xab@\x0c\x01\xae\xf9e&,&\x93@\xa8\xb1D]\xf0\xe2\xfc\xb7a\x84\xdc\xbe\xae\xf8\xe3\xb9t\xc10\xb5[E\x92v\x00\xd4b\x89\xc7I01\xa6J\x83S\x97p\'\x81\xcc\x06\x07\xd8p-\xc4\xc08$j\xea\x04z9\xe8t\xb5\r\x85@\xbe}i\x8f\xbd\x1c7\xddm\x94o93_\xf0\xbbi\xf1\xad\xe30n\xfb4=\x9b\x95\x93Mx\xd7Ds\xf1\xfa\x91\x14Y}\xa1\x12\xc3H)\x19\xd2\xc1\x83C\xfe\x89| \x04~\xda\xc0\xee\xe6\xbbz\x86K\x1dY\xce\xf3\x93\x03\xf9\x92Lw0\xccQ\x9b\x8e\x97\xdc\x86\xef\x9482c\xac\xe7\xf5\x93I\x1e\x99\xa0\xb1\xeb\xb4\x1d\xfbU\x158U\xaaC\xde4\xad\xf3\xbc\x89\x83\xc5\x94\xa5b\x1b\xc0\xd3\xba\x93\xbf*\x12J\xe8\xd7O\xd1\x0c\x9fP\xb1:\x1a\x06L\x08\x8b\xff\xab\xc9\xc8\xe1R\x8b7\xd6\xc5\xec\xe7\xdd\xdc\xf9`\xef\x9c^\xcb\xeb\xd9\xff\x8d K\xc8\xb52u\xd9\xb5Hb\x05\xed\x9c\x8d\x8d\x03_\x82\x15\xcbw\x11\x94\x16\x17p\xe7E\xa6\xaaw\xf0D\x8a\xd0h\xdb\xd0\xfaU\'\xdc-\x91\x86+5\x16\x9f\xd9\x13\x83\xdb\x82\xbe\x01Jd\x14\x13\xab\x97\xac\xe1pDdx\xb7F\x8c\xea}X\x83$\xe2\xc28\xb6\x8c^\x91EZ?\x82i\xc5\xce&H\xfe\x0e\xad\x0eG\x8cu!\xd3\x0e\xae3[\x86\xb0`\x1c\xb9\xf4\xde\\+\xb4\xb0\xe8\xcdo8\xe0i\xb3\x12k\x12\xc0#\x88\xc7\xa5\x9e\xec\x05bc\x8e\xa4\x06\xb6 c\xe0\xdeWB\xaez%l\x9e\xa5\xf0d\x9f\xae\xc6\x86\xd7{\x08s\x92\x8c\xfc\xa1\x10\x18wzN\xf5&X\xd3\x84\x96\xca\'\xff\x9a\xe6y\xc8\x9c\xb4>\xbfT\xd7\xf7\xb9ilC[5=\x83\xe6\x00\xf4\x84\xef[=9\xf5\xe3!\xae\xec\x03d{\xa1\x97p\x1ey\xda\xb2\x93\xee\xc0|\xb3\x1f\xbf\x12\x9c)N\xf12\xc9SN\xff\x9d\x8a\xb4E`\xa3\xb3\\\x88\xa6L`\xf3\xee\xc8\x8f\xb0-\xf4\xc9wV\xc1?\xf1i{\xf1b8\xdbD\x81\xe1\xb3\xdd\x97\x8a\xb1\xbc\xf0+\'\x07\xe4\x184\xfd\xc4\xb6\x85w\xcd\x06\xec0\xdauy\xfb\xc0\xda\xb6=~\x8d\xf9\xb6AE\x9d\x15\xbb=\x1bZT\x0c\x8d\x189\x00\'\xafL%}^e7\x00M/S\x92\xe7\xaau\x1aC\xda\x18\xfd\xe2\xc1\xe6\xbe\x91.\xff\x0c\xe2\xf7\xc2\xad\x93yo\xa9\xf7\x9bn=\x89`k\x8d\x8b\x05/^\n\x99a\xdb\xcbE(H\x0f"\x16\x18O\xac\xdd\x1c\x83\x0b\x10\x9c \xf9b\x1f\xad\x13)vT\xd8\x82z\xc8\x1c|O\xf8\x8e\xc7\x8bdh\xf7;/\xd4\xd8\xc3\x8ah,\xb4@p\xe7\x9csk\xb7\x15i8\xab\xfb\xcb\x99\x80\xeePJ\xec$U\xc9\xd0U\x18\xa8/\xa8\xefc\x83\x10/&\xe0\x82\xfb\xd8\xdf\xd1\xae6Kh\xfd|U$\xf5j"\xab\xa7\x01\xfb\xfbQ\xfbk\x83\x88\x06M\xb4\x06\xf9\xec\xb7\x81\xdb\x82r[X\x94\x02gQw\xf2ejI/$:r+\xe4\xf5e\x8fg\x96\xda[T\xd8[\xd6\xbcW|U\x86\xcaN\xd5-\x1c\xef\xac?_g=\x9a\x83\xe5C\xecG1\\\x1f\xa8\x84G\x9bh@\rB]\xcb\xe9\x953\x92\x0f\xeb\xe6\x89\xe8-u\xc8\x99\x1b\xcaPR\xb5BQ\xa5Q\xccWR\x19\xe62zF\x8c\xc1\xff\xf6\xdbsXy\t\xe2\xcd\xcbB\xbcbLn\xcf\xdaJE\xaa%3\x19\xf5\xf5\xe4i\xde\x8b\x85\x18\xff\xcaIH\x13\x87@\xb50[Zy\xcb\xa6\x18\xc1v\t\xb1\xf2\xf3\x84:\x87N\x07\xc5l,\x11R\xfc\x1a\xcaNO\x8aa )\xa0\x8ag\xb6`\x96\xf2\xb4\xa1\x08#\xff\xcd\xda\xe0{\x8f?\\\x11\x14\x88A5\x14\x1e\xfb\x0c\xd0\xf3\xdcM\xc8P\x83^B\xd8=%\x88\x1b\x06fm\xd3\xe8F\xa4 \xa9\xad\x18%\x0c\xdee%`\xc8\xe9\xd5\x81\x18v\x1c\xe4\xd7H\xc8{n\xff\x18n\xe7\xdb;\xcd\xcb\x97<v\xa5,\xd7\x12\xa2\xb5\xbd!i\xe4b:\xc5\xd1\xa4\x85k\xc7&\x8b\xc7\x12\xa2\xc1F&\x10A\xcc1\xf0\xab\xdb\xfb\x99\xa4\xe1\x18\xb1G\x0b]\xc1\x9c\x98\x10k\x0e\xee\xa7\xd8\xb2:\xe9\xe4\x92\xb3\x1eW\xd0\xd2\x9f\xe2\x96D\xdc&\x18Y\xef\x84\xc9a,\xf8\x97+Hw!]\xd8o\xd4Yij\x88\xe3S\xa5\xa8\x14\xda\xa8\x02\xf6c\xbd\x9c)\x8dG^\x14\xf3\x04Z\xf0\xc4L4`4Y\x83\x12$k\xc6\xef\xa4\x02M\xbb~\x84:O\x059\x07\xfe\xebR\xe3\xe20\xe5-\xd4\tX\x14\xfa\xd0\x99DS$7E\x01\x92\xa2\xd5\x9f"O\xbb\x8d\xc9_\xe6\xe4\xdb\x98\xdc\x0c\xc1o5\xedx\xd7t\xa4\xabp^f\x06\x81@/\x1eo\xef\xab5\xb0\x7fp\xf9\xb4\xacC\xb2H\xc5\xce\x93\x83\x94\x06kIG0\xbbU\x8bx\xe0\xb6\xa9\xdc\x03\xc0B\xce\x87\x0b\xcc\xe3\x85\xce7\xac\x97\x8f@\xa7Gl\xceRe\xd9\x18\x17A\xd7\x85\x11\xe2\x92\x8f1H\xd39\x9b\xb2\xc7\x0e\x9e\x9b\x9f\xe6{\xed\xe6x\x89\x85\xd6\xda$\xca\xee\xc8Zw\r\xad\x0c\x9b\x0b\xa8^\x0e\xc0\x8fk\x97w\xd3s[\xf7\x17\xa9\x9bZ\xc9\x93B%A\xcb\x86RG H\xeb\x94\xb4/\xd3\xa5\xf4\xc0\\S{\xd1\x0c\xad\'c\xdc\rF\xa2i\xa5\xb7R\x94\xadN[\x924\xe4<\x87\xb3\x8c\x98q\x13O9\xcd\x93\'\xce3\xab\xd0v\xf8\xd8\x98\xee\xdb7\xb4r0\x95\xc6_\xaf\x91F\x81\xb2\xc6\x9d\x17R\x8b\x9b\xa9E\xd4{R\x8e\xce\x19q\x92\xdc\x15\xa8\x8cP9~\xdf\'\xc9_\x84\xbd\xdf\x8f>\xfa\xa7^\xd52RE\xe8d(\xd0\xcb[V,E8(\xa2\xc5\xe4P\xa6\x0c\xb4\xf7A\x9cG0F8\xd8Z\xc3\xb2\xff\x01\x95\xe6\x81c7\xf6\x0f\xabQ\x08\xe1Uj\x94\xf4\xb4\xe3\xba\x00\xd5%\xe3\x88Q\x0b\x99\xe7\']\x0cJ\x1b\x10\xed\xb7\xbbg1\x14N-\xff\x1bK\xb9fx\xbc\xf2\xf5p\xdc\x01\x14E&\xdbf\xe8\xc9\x97lI\\O\xa6\xa8\xb8\xdb\xb5\xdb\xcd"Y\xef\x81\xde\x930\x15\xc0\xe7<\xbf6\x8dJ{\xba\x8cEAr\x7fc\xaf\xa0r\xb5\xa5\xdb\xf8\x94\x98\xa8\x8eZ\x08\xf2\x97\xcd\xc4lK3\xea@u\xdd\xb5\xeb\x1a\xffj\xae\xdd\xc3M\x18&?\xa5\x98\x08\x88\xb5\xbf\x19\xbc\xdfz\x1f\xf7\xe3\xa1\x80\x9c9\xb9s\x84\xadA_\x87\x14\xb9\x8d\x86\xdc\xac\xfe\xe0\x98\xb1\xf4\x9f\xd3z\xbb>"P\xf7\xcbTJ\xceN\xb13\x88\xa7\xeaX\xf9\xe2\x98\x17\xd2\xf1\xbdy\xf5\xa6\xfb\x90\xd1\xa5\x10C\xc7\x1a\xae\x83\xb4w8\xb1j<\xb9\xd9\xdaZC%Y\xe6\xf3\xa4\x07\xbc\xfeb\x93k#\x04M#\x91\x7f\x87U\xa2\x0b\x90`5\xed\xdc6O\xd4BJ\x12\xd5\x04\x15C(\xb8A\xab\xc5\xd1\x94\xd9s\x85H\x8f \xe4jy\xf3\'\xf0\xfcl~\x1bc\x06i\xcd|e\xf5&|j/,f\x85\x0f\x93.?\x95\xd3\x07\x85FE\xea\'\xdc#\xfe\xe1!/\x9c\x806\xe9\xbf\xf3\tx\xa0\xcb;\xb35[\x7f\x02#\xc8\xc4\xc1\x17\x7f\xf2!R\xe6\x05j\x15-^ \xd6\x02?s\xf8\xd0aK\x91\x96\x81@L\x15\xd5\x7f\xb1\x82x\x00\x1a\xc1D\xefhd\'\x85\xf6OMD\xc7\xee\xd54\x92!x\x87n]\\x\x93\xff4I??}\xdb\xa7\xd6\xf5qk\x86\xbf\xd6\xccW\x80\x12x_\xa6\xebI\xa5)u\x16\xa9\x90\xf4\x98\xd4\t\xfb\xb4\xfb\x80\xe2\x15\xae\xa0@\xfb\x04V\x00\xa1\xea\x88_jz\x06\x03i\x8c\xd1\xd2A\xa0\xc8\x16\x06\xbd\xea\x17\xea\xc3\xe4\x88W\xbe;\x1de,>\x01\x97v!\xb8\x89-~\x0f\xe6\x00$\xc1\xa8\x90\xa0\n\xed\xf0\x08%,"Z0\x0c\xf3p\x03c&g"\xc2\x03j\x97d\xed\xb4\xb4x}"\x9eL\x949\xa9_2G\xc9\x96\xc9?\xdc\xe1~\x84\xb2\xb0\x1dy7@I\xb2z[\xea\x9a\xb3D\xa8\x81\x83\x1c\x9a\x02\x08CE\xf4o>uLO<\x0b\xb1\xf3\x0c\xd1\n\x19\xe5Z\xe2\xff\xe8\x8b\x85\xbb\xac\x8d\x12wV\xfe\xa9;\'\x17\x01xm\xcc\x08\xc0\x1c\x82P\x94Wv\x1b\x14=\x87\x16\xe1?p\xa6!_\xa6\xdcu\xb8\xd9\x88\xd6\xfc\x89\x9d\xffil\x1f\xcb\x00\xc9\x06\xcc\xf0\xfe\xbd\xe5\xf5d\xe5\xf9\x99\xe3X\x85\x19\x12O\xcb8\x7f\t\x03\x91(\xb2?\x9ap\xdeB\xf6\x8c\x85xx\xfc\x00\x07\x97\xa1f\x8f\x05H\x12{\x11[sH_8\x0f\x9c\xa2\\\xef\xbdS)\xeaP\xeb\xa4\xadn\x94\xa5FB]{\x1bP\x9d\xfc\x10\x88\xa9\xf2\x04hcf\xecv\x12&\xd7\xa7u\x93\x8d\xea\xf1\x1e5\xfd\xf4\xcf\xf1@G\xcdi\xc6V)\xe2m:\x16+\xbe\xe2I:\xf1\x08\xe9er\xe9\xf3\x1a\ro\xd7\x1b\x8b\xbeX\xb1\x0c\xa2\x83$\xea\xcc\x124N\xa9D\x87\x9d\xea\x87M\x9d\xac\x0b\x1c\xb7X\x8f\xf2,\xd0+g,\xbd\x1c\xfc\x9f\x7f\xd7\xb7\xbf\xa9Mh\x86a\xdbQ\xffU\x9e|n\xb7\x0f\x9a\xbb\xd4w\x04<\x12R\xda\x04a\xa7m9y\xea9d\xb5\xab\x01R\xa2\xda2\xc7\x9c|3\xc2#\xc5|{\xc9\x03\x97\xf7\xde\xf1\'m\x17\xf9\xda\x84\x97\x8e\xb6*\xdc\xe8\xd9\xbf\xbf\xa4\xed\xf8\xcex\xe0f0\xbd\xa9\xa9\x05BV\xdc\xf4i\x9a0\xee\xda\x16\x99\x14\xff\xb0\xce\xaaF\x11\xd7\xe6X_\xee\xdd\xec\xa6a\x85\xce\x9e\\\xcaob2\xd9\xc8B\x1fmh`\x83\xd7\xb9\xf6\x90\xfd\xc3\x17\xa8\xe8z\x83\x84y<\xdb)\xd4\x88\xe3pE.y\xdc^\x04\xfeu\xaa,\x7f\x02\xd8U \xacA"\x7f{@6 |afy\xbb\x12\x85\xcb\x8f,\xe0=^\xec\xe1v\x02\xdaHQ\x18Wi\x8c\x9cc-\xd5\\\xa1\xfb\xd2\xe0\xd1ZK\xe9h\xcbZ\x00\xc3D4\xfeK\x93l\\\x89\x9f-\x12\xd0\xdf\x8b\xb5\xee\xeb\xe7\x1e\x07\xf2\xa63\xd4\x04\x00m\xba\n|\xcdp\x08\xbe\xfc\xf7\xd2\x10\xe7.[\xba$\t\x87\x81\xfe\xa3\x0b\'\xf0\x7f\x00\x82\x92\xa11\x9ey\xd5\xb9D\xf1\xe5\xcb\xfb\x14\xa5K\xfcm\x0c\xad\xff\xd9F\xcci\x99\x0e\xa6\xc1\xd2\xe4XI3\xb3Wk\xf1\x91\x9d\x16lq?\xeap\x00\xe4\x87\x8b@l\x9a]C\xc3c\x1f\xa6"\xac\xf0\xf4\x02B\xf5\x86\xcd?\x05\x88Cn\x92S\xb9\xcb^\xc2`6\xed]J\x19\x98+\x8c\xdf\xfeIC\xa7\x06\x87e\xb0/H\xaf\xbf\x1f\xbaek\x11\xaeP\xf8\xc4e-\x89:\xaf\xd3Nml\xc1\x94:\x9a\x86\x03\xd042\xd0\\\xe1j\xc4\xffN\xc6\x99K\x88\x9bY\xb6\x00\xd5\xd1\xdb\x9a\xa7\xa4\xcb\x17\xa7S\xaa\xa0l\x9c\xf8\xb3m\x94\xdctG\x0c\x9b\x99;c\x85b\xe7L\xc0', 'name': '[KTXP][Mangakasan][12][BIG5][720P].mp4', 'name.utf-8': '[KTXP][Mangakasan][12][BIG5][720P].mp4' }, 'encoding': 'GBK', 'creation date': 1403558797, 'announce-list': [ ['http://tracker.ktxp.com:7070/announce'], ['http://tracker.ktxp.com:6868/announce'], ['http://tracker.prq.to/announce'], ['udp://tracker.openbittorrent.com:80'], ['udp://tracker.ccc.de:80'], ['udp://tracker.istole.it:80'], ['udp://208.67.16.113:8000/annonuce'] ], 'created by': 'BitComet/0.60', 'announce': 'http://tracker.ktxp.com:7070/announce' }

如上面JSON代码所示,Torrent文件最顶层是一个字典,这个字典包含若干个键值对,每个键值对包含一项Torrent文件的信息,下面我们把这些键值对简称为字段,最顶层的字典简称为顶层字典。顶层字典包含如下的字段,其中红色的是必须的,蓝色的是可选的。

1、info字段

info是一个字典,它包含被下载文件的信息。该字典的结构根据单文件与多文件有所不同,下面一一列出。
单文件:

字段名称 字段说明
name 被下载文件的文件名
length 被下载文件的长度
piece length 被下载文件每一个分块的长度
pieces 存储每个分块的sha1值

多文件:

字段名称 字段说明
name 被下载文件存放的文件夹名字
files 该字段为一个列表,包含多个字典,每个字典保存一个文件的信息。保存一个文件信息的字典包含length和path字段,length表示对应文件的长度,path表示该文件相对于name的路径。
piece length 被下载文件每一个分块的长度
pieces 存储每个分块的sha1值

2、announce字段

默认的Tracker地址。

3、announce-list字段

该字段类型为列表,保存备用的Tracker地址。

4、creation date

该Torrent文件的创建时间,为UNIX时间格式。

5、comment

字符串类型,保存该Torrent文件的描述。

6、created by

创建此Torrent文件的程序信息。

7、encoding

指出info字段中pieces字段的编码类型。

至此,Torrent文件格式已经分析完毕,有时间再分析一下BT客户端与announce服务器的通信协议。

发表评论

电子邮件地址不会被公开。 必填项已用*标注