Ticket #1282: remove-mac-and-windows-apps.darcs.patch

File remove-mac-and-windows-apps.darcs.patch, 355.3 KB (added by davidsarah, at 2010-12-26T04:54:48Z)

Remove unmaintained Mac and Windows GUI apps. Supercedes previous patches.

Line 
16 patches for repository davidsarah@dev.allmydata.org:/home/darcs/tahoe/trunk:
2
3Sun Dec 26 02:05:08 GMT Standard Time 2010  david-sarah@jacaranda.org
4  * Remove unmaintained Mac GUI app. fixes #1282
5
6Sun Dec 26 02:08:58 GMT Standard Time 2010  david-sarah@jacaranda.org
7  * NEWS: remove unmaintained Mac GUI app. refs #1282
8
9Sun Dec 26 02:58:59 GMT Standard Time 2010  david-sarah@jacaranda.org
10  * Remove the Makefile targets relating to the Mac GUI app. refs #1282
11
12Sun Dec 26 04:02:37 GMT Standard Time 2010  david-sarah@jacaranda.org
13  * Remove unmaintained Windows GUI app, except for windows/tahoesvc.py which is moved to src/allmydata/windows. refs #1282
14
15Sun Dec 26 04:21:00 GMT Standard Time 2010  david-sarah@jacaranda.org
16  * Move dependency imports from windows/depends.py (which has gone away) into src/allmydata/windows/tahoesvc.py. Also fix a pyflakes warning, and change the service display name from 'Allmydata Tahoe Node' to 'Tahoe-LAFS node'. refs #1282
17
18Sun Dec 26 04:22:45 GMT Standard Time 2010  david-sarah@jacaranda.org
19  * NEWS: update entry for removal of Mac and Windows apps. refs #1282
20
21New patches:
22
23[Remove unmaintained Mac GUI app. fixes #1282
24david-sarah@jacaranda.org**20101226020508
25 Ignore-this: b3613bf1abfd284d542bf7c753ec557a
26] {
27rmdir ./mac/macfuse
28rmfile ./src/allmydata/gui/__init__.py
29hunk ./src/allmydata/gui/amdicon.py 1
30-#----------------------------------------------------------------------
31-# This file was generated by encode_icons.py
32-#
33-from wx import ImageFromStream, BitmapFromImage
34-from wx import EmptyIcon
35-import cStringIO
36-
37-
38-def getData():
39-    return \
40-'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00 \x00\x00\x00 \x08\x06\x00\
41-\x00\x00szz\xf4\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\x00\x04\
42-\x1aIDATX\x85\xad\x97MLTW\x14\xc7\xff\xef\xbd\x997|\x8c\x86\xb1\x888\x0c\x06\
43-\x17\x80\x03\xa1\x8a\t\xa9\x8d5a\xd3t\xd3\xa4\xed\xae+\xe3\xa6\xe9\x02v\x8d\
44-\xdd\xb8\xd2%D\xb1\x06\x02]\xd9.\xba\xd0\xa4iBqaHHM\xcbnbGZeH\x8d\x16\xad\
45-\xed\x14\x91\xe1c\x98\xb9\xf7\xbdw\xcf\xe9\x02\x9c\xf2\xf1\xde\x9b7\xc8\x99L\
46-2\x99{\xce\xb9\xbfs\xee\xb9\xe7\xde\xabi\xba\x81\xa0\x12\x1eN2\xd9!\x90\x1d\
47-\xc2\xdb\x87\x92\xa8\xab\x8abY\xe41\xb34\x0b=\xec\xc00mX}\x19-\xb0C\x00\xd0t\
48-#\xd0\xd7\xb8\xde\xcd-\xa3\x1f\xf3\xcd\x99\t\xce\x895\xde*9\xb1\xc67g&\xb8e\
49-\xec#\x0e}u\x8a\x83\xfa\xd4t#\x18\x80q\xed4_\xb8s\x85\xcbIN\xac\xf1\x85;W\
50-\xd8\xb8v:0D\xf9\xc9\x87\xba\xf9\xfc\xc4eV;>S\xf3)\x9e\x9aO\xf1\xfdlf\xd7\
51-\xd8\xf9\x89\xcbl\\\xef\x0e\x06\xe1W\x03\xa1\x1b\x1d|&\xf6.\xee~:T\xfao\xe2\
52-\x8fi\\\xfci\x04\x7f\x15\x9e\x03:\x03\xa4!Q\xd3\x8c\xc1\xde>|\xd8z\xb6\xa4w\
53-\xe6\xdb\xcf\x90\x113\xb0\xfbg\xfdk\xa2\\\xea\xc7\x9fL\xf1\x92\xbd\xc8K\xf6"\
54-\x8f\xa4o\xb16\xd8\xc3\x91\xd1\xcem\xd1EF;Y\x1b\xec\xe1\x91\xf4\xad\x92\xee\
55-\xf8\x93\xa9@K\xa1\xfb\xc1\xc5\xab\xe2\xe8ij\x83$\x81\x97\xc5W\xb8to\x0cf\
56-\xb4\xb0\xab\xd2\xad\xbe\x8cfF\x0b\xb8to\x0c/\x8b\xaf I\xa0\xa7\xa9\r\xf1\
57-\xea\xb8\xff\x0e\x00\xbc\x01B7:\xf8\x9dD\x12\x92\x05$\x0b|\xf7p\x12y\xe4<\
58-\xb7\x99\xd5\x97\xd1\xf2\xc8\xe1\xc7\xc7\xd3%\x9bd\xfd1\x84\x87\x93\xbc\'\
59-\x00\x008z \x06I\x02\x92\x04rb\x15\x9a\xa1|\xa3\xd1\x0c\x85\xf9\x95l\xc9\xa6\
60-\xbd>\x01&\xff\x12\x08\xf9\r:\xec@\x92(\xfd\x0e"\x95\xda\x94\x01\xb0\xb78\
61-\xb3\x03\x02Tf\xe3\t\xa0\xa4\t\x87\x1d\x08*\x02\x00\xea\xa3Qt\x1e\xec\x00\
62-\xbe\xe9\xf0]\xd3\xfah\xb4d\xe3\xb0\x03%M_\x00\xd7>\xa0\r\x9e\xe2/\xce~\x82\
63-\x0f\xdaO\x96\x8d\xa0\x9c\xdc\x9d{\x80\xab\xd3?\x80/\xa6]\x8b\xc15\x03-\x07\
64-\xe3\xe8mm/\xa5\xf2M\xa4\xb7\xb5\x1d\xdf\xff\x16\xc7S\xa4]\xc7]\x01\xaa\xcd\
65-\xf0\xbeL\xbe\xd5\x9f\x97\xb8\x020\x13\xc4>\x020Se\x00\x04\x82do\x80\xb9\xec\
66-\x02&\x1feP\xb0,\xd4\x98&\xde\xef8\x81\xf6\xc6\x06O}B\xa5\x00L\xa5J\xde)\x0f\
67-\x9e\xfd\x83\xaf\x7f\xfe\x05\xe1\xda"\xec\xfeY-<\x9c\xe4\xfb\x93\x7f\xe2\xf3\
68-s\xef\xe1\xe4\xb1\xa3\xee\x00{\xca\x80\xcb\x12,;K\xb8\x9dJo;\x0f\xec\xfeY\
69-\xcd\x1c9\xc1\xb7S\xbf\xe2\xad\x06\x0bu\xa1\x18\xc2\xba\xb9\xcb\xdf\x1e\x00$\
70-\x14;X\xb0\xb3\xf8\xd7z\x81U\xb5\x02b\x85e\xa1\x83\xbf\xdc}\x18\xd9\x03\xd5<\
71-\x99\x1b\x07\x81P\xa5W\xe3p\xf8\x08\x8eW\xb5\xe1\x88\x19\xaf\x1c\x80\x99\xf0\
72-B>\xc3\xbc|\x0c\x8b,\x10\x14\x14\x13\x88\x15\x98j\\\x1d1i\x90,A\xacP\xa0u,\
73-\xda\x0bx\xb8\x9e\xc6a\xb3\x11k\x8ew}\xb8\x1eFy\xb5\x86\xb9\xe2\xef(\xa8\xf5\
74-\xcd\x83E\xc2\xa2\x8d\x13\xae\xb1Y\xc0\x18\xea\xda\xd6\r\x8d\xa1.\x8e5\xadl\
75-\xeaHX$7\xecX\xe2\xb9x\x8aU\xb5R\x19\xc0\xeb~.Y\xc2\xe2\xff\x9dY$\xd1p|\t\
76-\xb5Q\xa7\x04a\x0cuq\xa4V\xa2\xae\xe5\xefM\x1d\x01\x8b$\x1c\xb672\x06\xdf\
77-\xce\xed]\x03\x16I((\x10+\x106\xd2\xafX\x81\x0cB]3!\xff\xa8\x11\x00\xc0\xac\
78-\xe1@"\x0bG/\x80\xc9\x7f\xb2\xe0\x00\xbc\xd1\x07\x88is\xfd\xb7C\xd8\xac\xef\
79-\xd2/\x17iE\x00\xbc3\x03L\xdb\xb2\xe1\x90wk\xdd\x17\x00\x02C\x92\x00\x816\
80-\xa3W`\xe6=GY9\x00\x13,\x96\xbe\xa9%+\x04m\xa0\x9b\xc9\xaa\xec%\x16\x08\x80\
81-\xc1P\xec}\xff\x8b\xd4\xad"q.\xf5F\x13\xbf\x16\xd7mHN\xf0\x07k\x10\xf1\xf3\
82-\xe7\n\xa0\xa4\x89\xe2bl_&/.\xc6\xa0D\xc4s\xdc\xf3i\xa6\rt\xb3Q%\xa1\x87\xfc\
83-\xaf\xe2~B\x8e\x01%M\xcf\xeb\x18\x00\xfc\x07\x9aY\xdf_&\xed\xfd\xe8\x00\x00\
84-\x00\x00IEND\xaeB`\x82'
85-
86-def getBitmap():
87-    return BitmapFromImage(getImage())
88-
89-def getImage():
90-    stream = cStringIO.StringIO(getData())
91-    return ImageFromStream(stream)
92-
93-def getIcon():
94-    icon = EmptyIcon()
95-    icon.CopyFromBitmap(getBitmap())
96-    return icon
97-
98-
99rmfile ./src/allmydata/gui/amdicon.py
100hunk ./src/allmydata/gui/amdlogo.py 1
101-#----------------------------------------------------------------------
102-# This file was generated by /opt/local/lib/python2.4/site-packages/wx-2.6-mac-unicode/wx/tools/img2py.py
103-#
104-from wx import ImageFromStream, BitmapFromImage
105-from wx import EmptyIcon
106-import cStringIO, zlib
107-
108-
109-def getData():
110-    return zlib.decompress(
111-'x\xda\x01\n\x0f\xf5\xf0\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x006\x00\
112-\x00\x006\x08\x06\x00\x00\x00\x8cEj\xdd\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\
113-\x08d\x88\x00\x00\x0e\xc1IDATh\x81\xbd\x9ai\x90\\Wu\xc7\x7f\xe7\xde\xb7\xf42\
114-\xdd\xa3\x914\x92,\x8d$[\xdedIF62\x8b\xb0\xc16\xa0\x02C\xb1\x84J\xfc!T\xd9\
115-\x15\x12Ha\x96PT\x92\xa2\x12 \xa4(Hp\x80\xa2\x1c\x8aP\x10\x92\x94M\x9cJ\x11\
116-\x02$\x80C\x19\x8c\xcdb\xcb\x06\x83\xe5\x05!,dY\x8b5\xb24\x9a\x99\xee\xe9\
117-\xe5\xdd\xf7\xee\xbd\xf9\xf0^\xcf\xa6\x91=\xd3\x92y]\xb7\xdf\xed\xb7\x9cw\
118-\xfe\xf7\x7f\xce\xb9\xe7\xdc\xd7\xc2\x1d\xaf\xe4\x05\xdf\xbc\x03\xef\xf3\xbe\
119-\x00(\x10yA\x1f\x19\xbc`\x92m:\x80\xcb\xde\x80\xe8\x9daT=\xaf\x16\x96\x97\t\
120-\x12\xa6\xce\xb6\x1bfj\x8c\xb4{\x10\xf86A\xf8sD\x9f\xf3\xc7\x9f{`.\x1b\xc1\
121-\xd9?\xbct\xf9\x85\x7f\xbcs\xd5E\x97l]\xbe\x96-\xcb\xd6\xb1\xa2TE\x10\x8c\
122-\xb3\x1ci\x9db\xcf\xd8!\xf6\x8e\x8f~\xe4\x87\xc7\x1e\xffv\xa33\xf6/\x84\xa5o\
123-\x15t\x9e\x93M\xce\xa9)f\xc9\xf5C\xa5e\xb7\xdf\xb2\xf5\x8d#o\xbf\xe8%\x04\
124-\xda`|\x82\xb1\x19\xd6[<\xa0D\x08$ R\x01\x91\xaap\xa8\xd9\xe63{\xbe\xc3w\x9e\
125-~\xe0\xbfP\xfaOQ\xfa\xd4\xb9P\xe5\xdc\x01K;\xef\xbb~\xfdK?\xfb\xb1\x1do\rVWC\
126-\x1ai\x13\xeb=R\xb0\xe0\x8bo_|{\x1c\x16GY\x87D\xaa\xca\xcf\x8e\x8d\xf2\xe7\
127-\xbbo\xff\xf5d2y#:z\xecl\xd5\xd1\xbcm\xe3\xd9\xca\x80\xb4{\xcb\xef]x\xfd\xe7\
128-?\xb3\xf3F\x15\x06\x1d\x1aY\x1b\x07\x80\xc7b\xc9\xc8\xf0bq\xe2\xc8HI\xc9\nX\
129-\x8e\xae7\xb4|\x93\xf3\x87\xea\\\xb3z\xfb\xca\xdd\xc7\x0f\xbc\xb6\xd1\x9d\
130-\xb8\x0f\x15\x1c?\x1b\x95\xd49\x00\xf5\xa6\xab\xd7]\xf9\xb9O\xbc\xec\xad4\
131-\xdc\xb34l\x87\x8c\x0c\x83!\xa1K\x1c\x06\xd4\xc2A\xbc+\xd1\xcd4\xb1\xaa3\x18\
132-\r\xe2\xb5\xa3K\x17C\x8a\xc1r\xcc\x9cd\xdd\n\xf8\xe8\xcb\xdevq=\xaa\xfd;\xde\
133-V\xceF\xad\xb3c\xcc\xd9hYi\xd9]\xb7]s\xd3r\x82I\xda\xce\xe0p\xa4\xa4(-T\xf5\
134-\x10\x0f\x8f\x9e\xe4\x0b\x8f\xfe\xd0}\xf1W\xf7M\xde\xb9\xff\xa1\xd6\x0f\x0f\
135-\xef\xf3\xc7\xa7\xba\xd1\x05\xb5\x11\x06+!-\xdf"-\xd8\x9b\xb4S\\0\xb4\x8c5\
136-\xa5\x91U\xf7>\xfd\x88\xa0\x83{\xfaU\xed\xec|,3\x1f\xfc\xe4\xce?\xfa\xcc\xeb\
137-6\xad\xe7\xd9d\x0c\x10\x1c\x96\x81\xb0\xc2\xc4T\xc8\xc7v\xffw\xfa\xcb\x93\
138-\xfbo\xc5e_C\x07\xcf\x80dx[\xc3\xda\xcd\x95\xb8\xfe\xc1?\xb8\xf8\xea\xd7\xdd\
139-\xf4\xa2+9\xe9\x8e\xe1|\xe1\x7fb\x19\x94a>p\xf7\xb7\xba\xfb\xc7\x0f^\x82\x8e\
140-\x0e\xf7\xa3Z\xff\x8c9\xbblye\xc5W\xdf\xb3\xfd\x9a\xda\x94?E\x86\xc7\x92\x11\
141-\x06\x9a\xb1\xa6\xe6\xcf\xee\xbd\xe3\xe9\xdf\x8c\x1f|#Ax;:<\x8e\xa86\xa2\xba\
142-(=\x89\x0e\x7f\x9b\xfa\xec\xab{\x8e\xed\xed4\xd3\xf05\xd7\x8c\\(\xe3n\x1c\
143-\x8b#\x15\x8b\x0e\x1d\x1b\xe2\xf5\xc1=\x87\x9e8\x8aR\x0f\xf4\xa3^\xff>f\xd3K\
144-\xae[\xbbem\xb9\xech{S\xf8TBU\x86\xf8\xa7G\x7f\xdc<\xd28z\x13ai\xf7\x19\xe7&\
145-Q\x10\x97o\xfd\xc6\xbe{\xbf\xfc\xfd\x03\x07)G1F\x0c)\x19\'\xb3S\\\xbaf\x905\
146-\x03\xc37\xe1l_sm\xff\xc0T\xf0\xb2k\xd7]\xca\x94\x9f*\x02\x80!\nC\xee9\xf4\
147-\x14\xf7\x1e\xfa\xf9\x9dD\x95\x1f=\xbf\x10\x01\xa5\xfe\xea\xdb\xbf}\xf4H\xec\
148-\x06I\xa4\x9b\x0f\x907L\x05c\xac\xa9\xd6\xb7\xe1\xdc\xd6\xbe\xd4\xeb\xe7&\
149-\xbc\xa3\x1a\xd7^\xba\xb6^e\xd26HII0X\x0f\xdf=\xf8\x88G\xfc\x9d\x8b\x96\x15D\
150-\xa7\xf6\x9e:t\xc7\xc1\x93M\x02\xad\xc9\xb9\xcf\xe8\xaa6k\xebu\x85\xf7\x9b\
151-\xfaQ\xb1O`\x9e\x81\xa0t\x9e\x0e\x1d\x1d\xdf\xc5H\x8aQ\x06\xe3<\xe3\xdd\xce\
152-\tD\xedY\x92<k\x9e\xdc?~\x12\xad4\xdd\x02\x9aQ\t+\xaaU\xf0\xd4\xfaQ\xb1\xef\
153-\\QDTFF"\x06\xbc`\x8b\x8f\xc7w@\xd2%\t\xf3t\xdaiB&\n#\x06\x80\xc4\x1bJA\x00"\
154-}\xe9x6I\xb0O\xc90\xa4\xf8"\xcc\xa7d\x90G\x8b\xa5f\xb3\x82\xd0\xe3\n\x0f\xc4\
155-\x04\xb8\\=\xdf\x8frg\x95\xddgX\x12\x0cL\x03[\x1aQ\xb37\x87\xc3\xe0\x8a\x81\
156-\xcaA:4\xfdf\xfcg\t,O\x9d@a\xb1\xa4\x92\xf5-\xcb\xe31\xa4$\xa4 `$\xc0\x11\
157-\xf7-\xaf\x0f`\x1e\xbc\xc7{o32\x12RD\x14V2R\x9f\xe2\xbdsx\xdf\x9a\xae\x98\
158-\x17%\xd2w\x1d.\x0fB\x85\x8f\x194\x0e\x0b\xdew\xf1\xbe n\xf1\xec-\x11\x98\
159-\xbf\\\xbc~\xb7\x12U\x0e%\xdc\xe6\xc4c$A\xbc&##\xc3\x12H8\xac%\xbc\x03\x82\
160-\xdc.\x0b]\x9eC%\x0f\\\x18\x10\x90\x15\xf3\xa1 \x18\x02\x14\x9a\x80\xe8\x16\
161-\x91`W\xea\xd2\t\xc4\x7f\n\x91Ee\xfd\x8b\xcf\x15\xbd\xafT\xc2\xd2\x9e\xf7\
162-\xed|\xd5E\xa5\x18B\x89\x08\xeb\x1d\x8e\xfa\xc3(\x14\x19\x19\xcbe\x05As9m\
163-\xdb\xcdo\x91^\x15\x96\x7f\xfb9U\xd9\xac\xf3\xce\xb3\xacZ\xe6p\xe97\xb4\\\
164-\x1b\x00-\x8a\xf5\xc9%L\xb53D{\xa4U\xe1\x8b\x0f\xdc\xff\xe5n\x96\xbck1\xeb%\
165-\x8bg\xcc\xfbrIE\xab\xc2\x15\x934\xa3S8\x0f\xc6Z\x04\xe9ECF\xfd(zp\x14\xa4\
166-\x07c\xee\xc7\xf5z2\xef\x8cx\x8e:\x8b\xcf\x8b\xb8\xfc:\xef\xd8[\xfa%\xaa"X\
167-\x95\xb2\xa3\xbe\x93\x81\xa0\xb2\xa6\x9bv\x17\xb5\x10\xb4\x14S\xf4\x1e\x9f\
168-\xb5\xad\xa1e\xf3\xb9\xeb4\xd5\xc5\x93\xbaY\x00\x168?\x1b$\xf3\xfa\xa7\x01\
169-\xf7\x1eg=\xd6\xa5t2\x03\xf8EG\xa7%\x07\x8f\x9e\x1f\x80,8\xfan\xba\xfc\xef\
170-\xa9\t^f\xc3\x98\xcb\xde\x82\x80\xe6]\x97a\xc8XZ\xc4]2\xb0\xb4\x17\xe2E\x9d\
171-\xd1\xdc(\x94tx\x1c\xaeX\x1a\xf0 \x1e\xe7\x1d\xde\x83BOCu\xd3\x80`>\x7f9\xb0\
172-\x94\x0c\xfb\x02\x02\x13H%\xc5HZ\x98\xe2lEr\x10^ \x9fn\xf3y\xa9\x16\x94Y/\
173-\x1b\xf0I\x88\xb3\x1e\x15\x80\x89[\x1crG\xe8X\x83F\x9f\xc9p\xa7\x99\xcc\xc4\
174-\x90\xc9\x0b\t\x8c\x9c\xb1\x04\x83\xa0\xe6<|\xae\xff8P\x8e\r\xb2\x91\xf2\xe8\
175-\x08O\x1c\x18\xef\xec;1z\xa8\x9b\xa5\x9dZ\\\xaam[\xb3\xf6\x82\xcd\x9b\xd6\
176-\xa9c+\xf6q\xd8\x1e\x01\x9f\xe7\xe2\xc5\xd0\xcc2\xe1\xbc\x97\xfenL1\x9d\xce6\
177-\x98cF\xb3FYYv\xf8\x97\xb0\xfb\xa7\x1d\xee\x7f\xfa\xfe\x7f\xf5\xde|\n\xad\
178-\x9f\x02I\xc7\xba\x93\xa5\x83\xe3\xcf\\\x1e\xed+\xff\xed\x9b\xb6m\x7f\xfd\
179-\xa5WTx\xd8>B\xe4\xa3\x99\xfb\xe7\xc9LI\xb1K4\xc5%\x97-\xbd\xc4\xd7\x14&\x99\
180-\x17\x993\xad--\xce\xf7\x9bxhw\x92\xfd\xf4\xa9\'\xfe\xc4\x07\xfe\x1d\x84\xd1\
181->\x946(\xe5\xd1\xbaC\x18=dTv\xc3\xd7\xf7\xfc\xecS\x13\x8f\xad\xe4\xe2\xf0\
182-\x02Z\xd2\x99\x96\x99\x0f\xdd\x8c\xcc\x04C\xb6\xc4<ti\xc0|\xeec\x89\xf4\x96\
183-\x02z\xf9x\xae@\x87\x84\xc1p\x00\xf3\xf4\n~\xbc\xff\xf1\xcf\x13\x85_9\xf3\
184-\xd2\x80@(\x1f\xba\xeb\xd1}\xdf\r\x8f\x9e\x87U&\xaf\xed0\x18\xc9\xc8$\x9b\
185-\xf6\xe7\xbc\xf4\xfc\x1d\xf8\x98!\x9d\xf6\xb1\x9e? \x1e#\x86\r\xeer\x1e:0q\
186-\x14\xcdG\x9fW\x98(\x92\xac\xf5\xd9\x03\xbf\xed\xde`KN\x0e\x99ch\xad\xd1Z\
187-\x13\xe8\x800\xd4\xe8@c\x83l\xc9\xa6\xd8\xb7\x8f\tz\xba\xf2r\xde\xd1\xcd\x12\
188-&\x92\t\xa6:\xb0\xff\xd4\xb3\xf7\xa3usQ\x02\x95\xfc\xa81\x95=9\xe2\xd7_r\xc0\
189-\x1d!\xf3\x96\xe98!\xf9\x9a\x8f\x04\xc2\x94\x9aZR\x01\xd3\x17c\xa9d\x08\x9en\
190-\xdae\xb2\xdd\xa4c\xba\xb4M\x07/\x9e\xb6\xb1t2s\n\xb5H5D\xd2\xa9\xc4\x1c\xba\
191-\xc0\xd7.A1c\xb9\xc5\xde\x03\xdez\xb2^\xbe\xb5\xc8\xad/\xc6Nu\'\xe8\xb4\x12\
192-\x1a\x9d)\xbc\xf3\xd3\xcc\x89\x06\x15:B\xa5+\xc6g\x8b{\xb9\xe7=q\x10,K\x95\
193-\x99\x0bj^\x7f\xa9\xef\t\x17\x1f<D\x10\x81c\xa7\x9ee\xf4\xc4I&[\xcd\xdc\xbbt\
194-!E\xe5/.Me\x825\x03\x83\xdbX\xec\x08{\x7f\xf1P5\xdez\\?\x93\x83X\x80\xb5~\
195-\x8a\xe8%EE\xef=If\xf2\xbbzU\xfb\xbc\xf6\xb8\xec\xe1\xb2u\x83W\x90\xf9\x9b\
196-\x17\'4\xbc\xa5\xba*)?\xe9\x0e,(\xaf\xd7\xd4\x12\'\xa6%\xcfc\xa2\xe49\x158\
197-\x94\x8e\xd2]\xfb\x94lZ\xbe\xeeV\xb2l\xcbs\n3\xe9\x8d/\xdfx\xfe;\xcc\xc8A\
198-\x12\x9b\x9d&K\x04\x02%h\x05\x91,MU\x85\xcbXR\x19\xcf\x99A!\x80\x87_\x04\x0f\
199-\xb1cG\xb4j]m\xf8\xfb8\xf7\x16 \x9a\'\xa1\x8as7o^\xbd\xe1\xf6\xda\xb6\xd1\
200-\xfa\x83\xf6\xe1\x19\xb9\xcc\x00\x8a\x95\xa6\xac4\xe5~\x80\r\x95\x86rm\xb2dF\
201-r\xbf\xa0\n\x1fifm\xfe7\xfa\x1a\xaf\xb868o\xf3\xf0\x9aob\xed\x85sdX\xfb\xcam\
202-k\xd6\xfe\xdb\xc8\xd5\xc7\xe3{\xf4\xdd\xf9\xb8\x16\x7f$\x08\x95PR\x9a\x8a\
203-\xd2T\x94\xa2\xac4\x15Q\x8b\x07f\x13\xc8\xba\xa8\xdf\xbc\xe5N\xee\xde\xf59v\
204-\x0co\x81d\xe2y\xd9\x93y \xe6\xecg\xb5\xaeMyP\xdf\xcf\xb2\x81\xd8\xe2\x0b\
205-\x93\xef\xc9\xf6\xe8z5\xe4W\xea\t\xac\xf3(\x81PT\xc1N\x0ej\xba/\x8a\x8aR\x84\
206-\xa2xN\xcd\xbc\x83\xa4\xc1\x8e\xe1m|\xfd\xd5\x9fF\xad\x8c\x07y\xed\x9a\xab\
207-\xb8{\xd7m\xfc\xc5\x15\xef\x04g\xc0-\x90I\xf7\xa4>\x0f[\xd3{\x05\x01\x01\xd6\
208-\xb9\xa2\xba\xc9\xf2\x87\xbb\x0c\xbcx\xe7=\x91Dh\xc5i`\xcaJQ\x16\x9d\xb7\xe2\
209-X\xfc\\\xf1\xde\xa5\xe02>\xfc\xe2[\xf8\xc1\xae\xdbx\xdb\x86W\xcd\x04\x8f\xa1\
210-\xa8\xc6\xad;\xde\xcb\xdf]\xf5~b\x15\x805,h\x9a\xb3\x810o\xbf\xd0\xfc\x83@\
211-\xda\xe6\xca\x95\x97\xf1\x8d\xeb\xff\x9e\xd5\x95a\xb0\x1d\x04(\x89\xa2\xa4d\
212-\x06Laz%\xd13\xfd\x02Xx&S\xb4\t5]\xe2\x9f\xaf\xfe\x08\x1f\xbf\xf2]\x0c\x86U`\
213-\xd6\x04\xed\x8b7\xfc\x1f\xda\xfav^\xber\x0b7\xde\xf7\xd7\x9ch=\x0bau\x16]\
214-\xcf\x01j\xa1=\xd0\xb1\t\xdbV]\x9e\xdd\xf5\x9aO\xb3:\x1eb\xa4\xba\x8a7\xfc\
215-\xdf\x07l\xe6\xed\x1cv\x02\x84@\x84@)\xc2^_\x84P\x14\xa2\xdc\xc2>\x96\xb6X_\
216-\x1b\xe1?\xaf\xfd$;\x87\xe7\xbem\x9asuo\x01\xe5\xba\xd5Wr\xf7\xae\xdbx\xf1\
217-\xf0VH\x17H\xf9\x16\xf0\xa9\x85\x9a\x13\x8f\x88\xf0\x89\xed\xef\xde\xba:\x1c\
218-\xba\xcc\x18\xf3\xa2\xab\x96_z\xe9\x87\xb7\xbfk\x93\xb1)%Q\xd3&X\x99\xe3SE\
219-\xf0(\x98\xab(M4\xdf\x14\xcd\x14\xaf\x1d\xb9\x86\x9f\xdc\xf0%v\x0eo\xc5\xcf\
220-\x8b\rgL\xa9\xb6\x0f]\xc4\xf7v\xdd\xc6\x9b\xef\xf9K\x1ex\xe6A@Ci`f(\x16J\x7f\
221-\xe6\x1d\xd7J\x88t(\xc7\xf6\x1e\x1c\xf9\xc5A\xd5\xed8\x13\r\xe8R\xb7\xd1<q^\
222-\xb4,\x98ez\x8a\x00U0T0\x85B\x17\xbf\x95rD*_B \xeb\x02\x96\xb7n\xba\x81;\xaf\
223-\xf9\x1b\xcaA\x8cs\x0e\x99\x07\xfc\x8c\xc0\xbc\xf7\xac\x8c\x07\xf9\xc1\xae\
224-\x7f\xe4+\xfb\xff\x87\xbb\x8e>\x90\xed>\xb57\x17\x9e\x17\xcf\x0b\x9a\xa0\x00\
225-Z\xf2\t\xad\xa2\x02\x9c\xf5\xf2\x1f\x8f|\xef\xa2\x9f\xd8\xc1r\x8a\x0b#\xb4\
226-\xd9\x1b\x9e\xd8\xa8^\xa1(\xab\x80\xb2\xe4>\xd53\xbd@f\x9b\xa2"\x14A\xab\xfc\
227-\xbdK\xa4Bw\xe5\xca\xcd\xbcf\xddN\xfe\xe1\xc5\xef\xc9\xad\xc2-\x9c\xba=o\x12\
228-\\\xd6\x11\xef\xdd\xfc\xfb\xdc\xbc\xe9\x8d[\xae\xf8\xee\xcdq\xc7\xdb\x05}I\
229-\x04\x02\x99\x19u\xb0\x04\xde\xb3}d\xa5:p\xdd\xd8\xfb\x0f\xabg\x11\xc9\xff\
230-\xa73h\x85\xcd\xabVq\x18OE)b\xd1\xd3L\x05"\x04\xa89\xbf5\x1a\xe3\x12\xae^\
231-\xb9m\xe5\xd7\xae\xfd\xf8 0\tg\x06u\x1a\xb0YtF"Ru\xceU\xad\xb55o\xddUGN<s\
232-\xb9sN\xc9\xbc$U\x15\x0c\x85\xd2SF\x15\xca\x05L\xb81~5\xf2MJ\x1b\x03\x02a\
233-\x96\xb9)\x8exG\xcb6\xa9\xaa\x88h\xfa\x1eE\xa0\xa4`,?&\x80+\x1e\xa8\xad\xaci\
234-O\xb4\xde\x19V\xc2GD\xa9\x03Z\xeb)\x11i\x03m`\x0e\xca\x1e\xb0\x92snU\x9a\xa6\
235-\xf5$I\x96w:\x9dz\xab\xd5\x8a\x9b\xcd\xa6dY6X\n\xa2mO\x9e8\x14Yk\x85"WT\xc8\
236-\xb4\x0f\x04s\x80I\x11\xe1\x14\x81@\xc3\x8d\xd3\xf1s#]\xcf\xc4b\x15\x10\x8a\
237-\x9ecz\x81\xca\xef\x9f?\xd1(\xa5i6\x9a\xfa\xb1\xc7\x1f[S\xaeW\xaeK\x92d\xa8Z\
238-\xadR\xadV\xd3j\xb5\xda)\x97\xcb\xe3Q\x14\x8d\x07A0."\'\x03\xa0j\x8cyu\xa3\
239-\xd1\x18h4\x1a\xae\xd1h\xf8F\xa3\xe1\x9a\xcd\xa6o4\x1a\xb6\xd3\xe94W\xad\x18\
240-n\x9cl\x8f\r{\xed\xf1\x92\x9bb \xbeh\x85\t\xe2g\xd8\x12!\x14?\xcb4)\x02\x820\
241-;@\x04\xe2\xa6\xaf\x0b\x11\xb4\xf8\x82\xa1|\xeb\xc59G\x8a(\x8f1\t\xa3\xc7\
242-\x8f\xdb\xe4h\xf7\xe4T\xab\x95\x0e\x0e\x0e\xaaZ\xad\xa6\xeb\xf5z\xad^\xaf/\
243-\xab\xd7\xeb\x9b\xea\xf5\xba\x0c\x0c\x0c\xec\x0b\x00\xa3\x94:\x1cE\xd1\x868\
244-\x8eK\xa5RI\x8c1:MSo\x8c\x91$I\xd2\xb1\xb1\xb1_\xeb\x01\x1d\'>\x8d\xb6\x84\
245-\x1b9/.\x11\xf9`\xc6\x07z\x0e\xaf\x04=\xcb\x8cr\xff\x10B\xa5\x08\n\x8659@M\
246-\xce\x8c.\xda\xe9\xa9\xc0\xec\xf0\xed(\xf9\x01\x8cX\xdd\xedt\x9e\x9el5\x8e\
247-\xd5\xea5]*\x95T\xa9T\x92R\xa9$q\x1c\xfb8\x8em\x18\x86\x13\xc0\xa8\xf8\xfc%\
248-\x1e@\xd997\x94\xa6i\xd9\x183\x90$\xc9`\xb7\xdb\xad\xb4\xdb\xed\xb85\xd5R&1\
249-\xfa\x0b\x8d\xbbnzB\xff\xfa\xf5\x95(\x0e\x05\x01\xe7g\xe6\x0f\xef\xe7\x0c\
250-\xb4\xf4z\x02\xd2\xfb\xd7\xac\xe4g\xe6\xc4\x1e\x99\x03J$wt\x11\x11z\xcd{\xe7\
251-&Mbn\x90W}\xe9\xcd\x03/\xf9~X\x8d\x83J\xa5\x92V*\x95N\x1c\xc7SQ\x14M\x86a\
252-\xd8\t\xc3\xb0\xa9\x94\x1a\xf7\xde\xfbi`\xb3\'\xb8\\\x98\x87\xbc\x9c\x8c\x9d\
253-seA\xa241\xe1c\x13\x07\xd7g\xdeV\xc51d\xad\xad\xa7Y6`\x12S\xeb&\xddJ\x92$a\
254-\x92\x18mR#i\x9ab3+\xd6fX\xe7\xe6\xc8W"(\xad\t\x82\x80 \x08|\x18\x86>\x8a"\
255-\x17\xc7\xb1\x8d\xe38)\x94m*\xa5\xa6\xb4\xd6\xe3\x99\xb8F=\xa8\xb4/\x1f\xdax\
256-\xc4k\xb1\xa2\xa4\x0bt\x94Rf\xb6\xee\xbd\x81\x008\r\xd8\xec\xbd\xf7y\xe6\xe0\
257-\x9c#\x08\x02lf\tu\x98\x87\xc2\xccA\xa0f\x87\xfc*\x8e\xaa\xcf\xec\x80s\xae\
258-\x92eY\xd9Z\x1b9\xe7\x94sN\x9cs\xd2{\xb8R\xca+\xa5\x9cR\xcaj\xad;A\x10t\x95\
259-\xd6-D\x9ahZ\x90\xaf\x8ezc\x11\xa5 \x10|j\xb12W75\xaf\xacVJM\x03\xfb\x7f\xee\
260-r\xc9\xfc\x835!h\x00\x00\x00\x00IEND\xaeB`\x82`\xcd|Q' )
261-
262-def getBitmap():
263-    return BitmapFromImage(getImage())
264-
265-def getImage():
266-    stream = cStringIO.StringIO(getData())
267-    return ImageFromStream(stream)
268-
269-def getIcon():
270-    icon = EmptyIcon()
271-    icon.CopyFromBitmap(getBitmap())
272-    return icon
273-
274rmfile ./src/allmydata/gui/amdlogo.py
275hunk ./src/allmydata/gui/confwiz.py 1
276-
277-DEFAULT_SERVER_URL = 'https://www.allmydata.com/'
278-
279-BACKEND = 'native_client.php'
280-ACCOUNT_PAGE = 'account'
281-WELCOME_PAGE = 'welcome_install'
282-TAHOESVC_NAME = 'Tahoe'
283-WINFUSESVC_NAME = 'Allmydata SMB'
284-
285-CONVERGENCE_DOMAIN_TAG = "allmydata_root_cap_to_convergence_domain_tag_v1"
286-
287-import os
288-import re
289-import socket
290-import sys
291-#import time
292-import traceback
293-import urllib2
294-from urllib import urlencode
295-import webbrowser
296-import wx
297-
298-from allmydata.util.assertutil import precondition
299-from allmydata.util import hashutil, base32
300-from allmydata import uri
301-import allmydata
302-from allmydata.gui import amdlogo
303-
304-from foolscap.api import Tub
305-from twisted.python import usage
306-
307-class AuthError(Exception):
308-    pass
309-
310-def unicode_to_utf8(uobj):
311-    assert precondition(isinstance(uobj, unicode))
312-    return uobj.encode('utf-8')
313-
314-
315-def post(url, args):
316-    argstr = urlencode(args)
317-    conn = urllib2.urlopen(url, argstr)
318-    return conn.read()
319-
320-def get_root_cap(url, user, passwd):
321-    args = {
322-        'action': 'authenticate',
323-        'email': unicode_to_utf8(user),
324-        'passwd': unicode_to_utf8(passwd),
325-        }
326-    root_cap = post(url, args)
327-    if root_cap == '0':
328-        raise AuthError()
329-    elif not uri.is_uri(root_cap):
330-        raise ValueError('%r is not a URI' % (root_cap,))
331-    else:
332-        return root_cap
333-
334-def create_account(url, user, passwd, subscribe):
335-    args = {
336-        'action': 'create_account',
337-        'email': unicode_to_utf8(user),
338-        'passwd': unicode_to_utf8(passwd),
339-        'subscribe': subscribe and 'true' or 'false',
340-        }
341-    result_code = post(url, args)
342-    return result_code
343-
344-def record_install(url, user, passwd, nodeid, nickname):
345-    args = {
346-        'action': 'record_install',
347-        'email': unicode_to_utf8(user),
348-        'passwd': unicode_to_utf8(passwd),
349-        'nodeid': nodeid,
350-        'moniker': nickname,
351-        }
352-    result_code = post(url, args)
353-    return result_code
354-
355-def record_uninstall(url, nodeid):
356-    args = {
357-        'action': 'record_uninstall',
358-        'nodeid': nodeid,
359-        }
360-    result_code = post(url, args)
361-    return result_code
362-
363-def get_introducer_furl(url):
364-    return post(url, { 'action': 'getintroducerfurl' })
365-
366-def get_config(url, user, passwd):
367-    args = {
368-        'action': 'get_config',
369-        'email': unicode_to_utf8(user),
370-        'passwd': unicode_to_utf8(passwd),
371-        }
372-    config = post(url, args)
373-    return config
374-
375-def get_basedir():
376-    if sys.platform == 'win32':
377-        from allmydata.windows import registry
378-        return registry.get_base_dir_path()
379-    else:
380-        return os.path.expanduser('~/.tahoe')
381-
382-def write_config_file(filename, contents):
383-    basedir = get_basedir()
384-    path = os.path.join(basedir, filename)
385-    dirname = os.path.dirname(path)
386-    if not os.path.exists(dirname):
387-        os.makedirs(dirname)
388-    iff = file(path, 'wb')
389-    iff.write(contents)
390-    iff.close()
391-
392-def write_root_cap(root_cap):
393-    write_config_file('private/root_dir.cap', root_cap+'\n')
394-    convergence = base32.b2a(hashutil.tagged_hash(CONVERGENCE_DOMAIN_TAG, root_cap))
395-    write_config_file('private/convergence', convergence+'\n')
396-
397-def get_nodeid():
398-    CERTFILE = "node.pem"
399-    certfile = os.path.join(get_basedir(), "private", CERTFILE)
400-    tub = Tub(certFile=certfile)
401-    return tub.getTubID()
402-
403-def get_nickname():
404-    nick = None
405-    nnfile = os.path.join(get_basedir(), 'nickname')
406-    if os.path.exists(nnfile):
407-        try:
408-            fh = file(nnfile, 'rb')
409-            nick = fh.read().strip()
410-            fh.close()
411-        except:
412-            DisplayTraceback('Failed to read existing nickname file %s' % (nnfile,))
413-    if not nick:
414-        nick = socket.gethostname()
415-    return nick
416-
417-def maybe_write_file(filename, contents):
418-    fname = os.path.join(get_basedir(), filename)
419-    try:
420-        if not os.path.exists(fname):
421-            fh = file(fname, 'wb')
422-            fh.write(contents)
423-            fh.write('\n')
424-            fh.close()
425-    except:
426-        DisplayTraceback('Failed to write file %s' % (fname,))
427-
428-def configure(backend, user, passwd):
429-    _config_re = re.compile('^([^:]*): (.*)$')
430-    config = get_config(backend, user, passwd)
431-    config_dict = {}
432-    for line in config.split('\n'):
433-        if line:
434-            m = _config_re.match(line)
435-            if m:
436-                fname, contents = m.groups()
437-                config_dict[fname] = contents
438-    for fname, contents in config_dict.items():
439-        write_config_file(fname, contents+'\n')
440-
441-def start_windows_service(svc_name):
442-    try:
443-        import win32service
444-        import win32serviceutil as wsu
445-        if wsu.QueryServiceStatus(svc_name)[1] != win32service.SERVICE_RUNNING:
446-            wsu.StartService(svc_name)
447-    except:
448-        DisplayTraceback('Failed to start windows service "%s"' % (svc_name,))
449-
450-def maybe_start_services():
451-    if sys.platform == 'win32':
452-        start_windows_service(TAHOESVC_NAME)
453-        start_windows_service(WINFUSESVC_NAME)
454-
455-def DisplayTraceback(message):
456-    xc = traceback.format_exception(*sys.exc_info())
457-    wx.MessageBox(u"%s\n (%s)"%(message,''.join(xc)), 'Error')
458-
459-class ConfWizApp(wx.App):
460-    def __init__(self, server, open_welcome_page=False):
461-        self.server = server
462-        self.show_welcome = open_welcome_page
463-        wx.App.__init__(self, 0)
464-
465-    def get_backend(self):
466-        return self.server + BACKEND
467-
468-    def open_welcome_page(self):
469-        if self.show_welcome:
470-            args = {'v':    str(allmydata.__version__),
471-                    'plat': sys.platform,
472-                    }
473-            webbrowser.open(self.server + WELCOME_PAGE + '?' + urlencode(args))
474-
475-    def OnInit(self):
476-        try:
477-            wx.InitAllImageHandlers()
478-
479-            self.login_frame = WizardFrame(self, LoginPanel)
480-            self.login_frame.CenterOnScreen()
481-            self.SetTopWindow(self.login_frame)
482-            #self.SetExitOnFrameDelete(True)
483-            self.login_frame.Show(True)
484-
485-            return True
486-        except:
487-            DisplayTraceback('config wizard init threw an exception')
488-
489-    def swap_to_register_frame(self):
490-        try:
491-            self.login_frame.Show(False)
492-            self.regiser_frame = WizardFrame(self, RegisterPanel)
493-            self.regiser_frame.CenterOnScreen()
494-            self.SetTopWindow(self.regiser_frame)
495-            self.SetExitOnFrameDelete(True)
496-            self.regiser_frame.Show(True)
497-        except:
498-            DisplayTraceback('config wizard threw an exception')
499-
500-class WizardFrame(wx.Frame):
501-    def __init__(self, app, panel_class):
502-        #title = 'Allmydata Config Wizard'
503-        title = 'Setup - Allmydata'
504-        wx.Frame.__init__(self, None, -1, title)
505-        self.app = app
506-        self.SetIcon(amdlogo.getIcon())
507-        self.Bind(wx.EVT_CLOSE, self.close)
508-
509-        self.SetSizeHints(500, 360, 600, 800)
510-
511-        banner = wx.Panel(self, -1)
512-        banner.SetSize((496,58))
513-        banner.SetBackgroundColour(wx.WHITE)
514-
515-        banner_title = wx.StaticText(banner, -1, panel_class.title)
516-        banner_desc = wx.StaticText(banner, -1, "        " + panel_class.description)
517-        font = banner_title.GetFont()
518-        font.SetWeight(wx.FONTWEIGHT_BOLD)
519-        banner_title.SetFont(font)
520-        banner_icon = wx.StaticBitmap(banner, -1, amdlogo.getBitmap())
521-        banner_label_sizer = wx.BoxSizer(wx.VERTICAL)
522-        banner_label_sizer.Add(banner_title, 0, wx.EXPAND | wx.ALL, 2)
523-        banner_label_sizer.Add(banner_desc, 0, wx.EXPAND | wx.ALL, 2)
524-
525-        banner_sizer = wx.BoxSizer(wx.HORIZONTAL)
526-        banner_sizer.Add(banner_label_sizer, 1, wx.EXPAND | wx.ALL, 12)
527-        banner_sizer.Add(banner_icon, 0, wx.ALL, 12)
528-        banner.SetSizer(banner_sizer)
529-        banner.SetAutoLayout(True)
530-
531-        background = wx.Panel(self, -1, style=wx.SIMPLE_BORDER)
532-        background.parent = self
533-
534-        button_panel = wx.Panel(self, -1)
535-        button_panel.SetSize((496, 64))
536-
537-        self.panel = panel_class(background, button_panel, app)
538-        sizer = wx.BoxSizer(wx.VERTICAL)
539-        background_sizer = wx.BoxSizer(wx.VERTICAL)
540-        background_sizer.Add(wx.Size(2,2), 0, wx.EXPAND | wx.ALL, self.panel.padding)
541-        background_sizer.Add(self.panel, 1, wx.ALIGN_CENTER_HORIZONTAL | wx.ALL, 26)
542-        background_sizer.Add(wx.Size(2,2), 0, wx.EXPAND | wx.ALL, self.panel.padding)
543-        background.SetSizer(background_sizer)
544-
545-
546-        sizer.Add(banner, 0, wx.EXPAND | wx.HORIZONTAL, 0)
547-        sizer.Add(background, 0, wx.EXPAND | wx.ALL, 0)
548-        sizer.Add(button_panel, 0, wx.EXPAND | wx.HORIZONTAL, 0)
549-        self.SetSizer(sizer)
550-        self.SetAutoLayout(True)
551-        self.Fit()
552-        self.Layout()
553-
554-    def close(self, event):
555-        self.Show(False)
556-        self.app.ExitMainLoop()
557-
558-
559-class LoginPanel(wx.Panel):
560-    padding = 26
561-    title = 'Sign in'
562-    description = 'Sign in to your existing account'
563-
564-    def __init__(self, parent, button_panel, app):
565-        wx.Panel.__init__(self, parent, -1)
566-        self.parent = parent
567-        self.app = app
568-
569-        self.sizer = wx.BoxSizer(wx.VERTICAL)
570-
571-        self.user_label = wx.StaticText(self, -1, 'Email')
572-        self.pass_label = wx.StaticText(self, -1, 'Password')
573-        self.user_field = wx.TextCtrl(self, -1, u'', size=(260,-1))
574-        self.pass_field = wx.TextCtrl(self, -1, u'', size=(260,-1), style=wx.TE_PASSWORD)
575-        self.warning_label = wx.StaticText(self, -1, '')
576-        self.warning_label.SetOwnForegroundColour(wx.RED)
577-        wx.EVT_CHAR(self.user_field, self.on_user_entry)
578-        wx.EVT_CHAR(self.pass_field, self.on_pass_entry)
579-        login_sizer = wx.FlexGridSizer(2, 2, 5, 4)
580-        login_sizer.Add(self.user_label, 0, wx.ALIGN_RIGHT | wx.ALL, 2)
581-        login_sizer.Add(self.user_field, 0, wx.EXPAND | wx.ALL, 2)
582-        login_sizer.Add(self.pass_label, 0, wx.ALIGN_RIGHT | wx.ALL, 2)
583-        login_sizer.Add(self.pass_field, 0, wx.EXPAND | wx.ALL, 2)
584-        self.sizer.Add(login_sizer, 1, wx.EXPAND | wx.ALL, 2)
585-        self.sizer.Add(self.warning_label, 0, wx.CENTER | wx.ALL, 2)
586-        self.SetSizer(self.sizer)
587-        self.SetAutoLayout(True)
588-
589-        self.reg_label = wx.StaticText(button_panel, -1, "Don't have an account?")
590-        self.reg_button = wx.Button(button_panel, -1, 'Create Account')
591-        self.login_button = wx.Button(button_panel, -1, 'Sign In')
592-        button_panel.Bind(wx.EVT_BUTTON, self.on_reg_button, self.reg_button)
593-        button_panel.Bind(wx.EVT_BUTTON, self.on_login, self.login_button)
594-        btn_sizer = wx.BoxSizer(wx.HORIZONTAL)
595-        btn_sizer.Add(wx.Size(2,2), 1, wx.EXPAND | wx.ALL, 12)
596-        btn_sizer.Add(self.reg_label, 0, wx.ALIGN_RIGHT | wx.ALL, 12)
597-        btn_sizer.Add(self.reg_button, 0, wx.ALIGN_RIGHT | wx.ALL, 12)
598-        btn_sizer.Add(self.login_button, 0, wx.ALIGN_RIGHT | wx.ALL, 12)
599-        button_panel.SetSizer(btn_sizer)
600-        self.button_panel = button_panel
601-
602-    def on_reg_button(self, event):
603-        self.app.swap_to_register_frame()
604-
605-    def on_user_entry(self, event):
606-        if event.GetKeyCode() == wx.WXK_RETURN:
607-            self.pass_field.SetFocus()
608-        else:
609-            event.Skip()
610-
611-    def on_pass_entry(self, event):
612-        if event.GetKeyCode() == wx.WXK_RETURN:
613-            self.on_login(event)
614-        else:
615-            event.Skip()
616-
617-    def on_login(self, event):
618-        user = self.user_field.GetValue()
619-        passwd = self.pass_field.GetValue()
620-        self.warning_label.SetLabel('Connecting...')
621-        self.Layout()
622-        wx.Yield()
623-
624-        backend = self.app.get_backend()
625-
626-        if passwd == '':
627-            self.warning_label.SetLabel('You must enter a password')
628-            self.pass_field.SetFocus()
629-            self.Layout()
630-            return
631-
632-        try:
633-            root_cap = get_root_cap(backend, user, passwd)
634-            write_root_cap(root_cap)
635-        except AuthError:
636-            self.warning_label.SetLabel('Your email and/or password is incorrect')
637-            self.user_field.SetFocus()
638-            self.Layout()
639-            return
640-
641-        nodeid = get_nodeid()
642-        nickname = get_nickname()
643-        ret = record_install(backend, user, passwd, nodeid, nickname)
644-        if ret != 'ok':
645-            wx.MessageBox('Error "%s" recording this system (%s)' % (ret, nodeid), 'Error')
646-
647-        configure(backend, user, passwd)
648-        maybe_start_services()
649-        maybe_write_file('nickname', nickname)
650-        maybe_write_file('accountname', user)
651-
652-        self.app.open_welcome_page()
653-
654-        # exit
655-        self.parent.parent.Close()
656-
657-class RegisterPanel(wx.Panel):
658-    padding = 7
659-    title = 'Create account'
660-    description = 'Create a new account on Allmydata'
661-
662-    def __init__(self, parent, button_panel, app):
663-        wx.Panel.__init__(self, parent, -1)
664-        self.parent = parent
665-        self.app = app
666-
667-        self.sizer = wx.BoxSizer(wx.VERTICAL)
668-
669-        self.user_label = wx.StaticText(self, -1, 'Email')
670-        self.pass_label = wx.StaticText(self, -1, 'Password')
671-        self.conf_label = wx.StaticText(self, -1, 'Confirm Password')
672-        self.user_field = wx.TextCtrl(self, -1, u'', size=(260,-1))
673-        self.pass_field = wx.TextCtrl(self, -1, u'', size=(260,-1), style=wx.TE_PASSWORD)
674-        self.conf_field = wx.TextCtrl(self, -1, u'', size=(260,-1), style=wx.TE_PASSWORD)
675-        self.subscribe_box = wx.CheckBox(self, -1, 'Sign up for our Newsletter')
676-        self.subscribe_box.SetValue(True)
677-        self.warning_label = wx.StaticText(self, -1, '')
678-        self.warning_label.SetOwnForegroundColour(wx.RED)
679-        wx.EVT_CHAR(self.user_field, self.on_user_entry)
680-        wx.EVT_CHAR(self.pass_field, self.on_pass_entry)
681-        wx.EVT_CHAR(self.conf_field, self.on_conf_entry)
682-        login_sizer = wx.FlexGridSizer(3, 2, 5, 4)
683-        login_sizer.Add(self.user_label, 0, wx.ALIGN_RIGHT | wx.ALL, 2)
684-        login_sizer.Add(self.user_field, 0, wx.EXPAND | wx.ALL, 2)
685-        login_sizer.Add(self.pass_label, 0, wx.ALIGN_RIGHT | wx.ALL, 2)
686-        login_sizer.Add(self.pass_field, 0, wx.EXPAND | wx.ALL, 2)
687-        login_sizer.Add(self.conf_label, 0, wx.ALIGN_RIGHT | wx.ALL, 2)
688-        login_sizer.Add(self.conf_field, 0, wx.EXPAND | wx.ALL, 2)
689-        login_sizer.Add(wx.Size(2,2), 0, wx.ALIGN_RIGHT | wx.ALL, 2)
690-        self.sizer.Add(login_sizer, 0, wx.EXPAND | wx.ALL, 2)
691-        self.sizer.Add(self.warning_label, 0, wx.CENTER | wx.ALL, 2)
692-        self.sizer.Add(wx.Size(2,2), 0, wx.EXPAND | wx.ALL, 4)
693-        self.sizer.Add(self.subscribe_box, 0, wx.CENTER | wx.ALL, 2)
694-        self.SetSizer(self.sizer)
695-        self.SetAutoLayout(True)
696-
697-        self.reg_button = wx.Button(button_panel, -1, 'Create Account')
698-        button_panel.Bind(wx.EVT_BUTTON, self.on_create_account, self.reg_button)
699-        btn_sizer = wx.BoxSizer(wx.HORIZONTAL)
700-        btn_sizer.Add(wx.Size(2,2), 1, wx.EXPAND | wx.ALL, 12)
701-        btn_sizer.Add(self.reg_button, 0, wx.ALIGN_RIGHT | wx.ALL, 12)
702-        button_panel.SetSizer(btn_sizer)
703-        self.button_panel = button_panel
704-
705-        self.Fit()
706-
707-    def on_user_entry(self, event):
708-        if event.GetKeyCode() == wx.WXK_RETURN:
709-            self.pass_field.SetFocus()
710-        else:
711-            event.Skip()
712-
713-    def on_pass_entry(self, event):
714-        if event.GetKeyCode() == wx.WXK_RETURN:
715-            self.conf_field.SetFocus()
716-        else:
717-            event.Skip()
718-
719-    def on_conf_entry(self, event):
720-        if event.GetKeyCode() == wx.WXK_RETURN:
721-            self.on_create_account(event)
722-        else:
723-            event.Skip()
724-
725-    def on_create_account(self, event):
726-        user = self.user_field.GetValue()
727-        passwd = self.pass_field.GetValue()
728-        pconf = self.conf_field.GetValue()
729-        subscribe = self.subscribe_box.IsChecked()
730-        self.warning_label.SetLabel('Connecting...')
731-        self.Layout()
732-        wx.Yield()
733-
734-        if passwd == '':
735-            self.warning_label.SetLabel('You must enter a password')
736-            self.pass_field.SetFocus()
737-            self.Layout()
738-            return
739-
740-        if passwd != pconf:
741-            self.warning_label.SetLabel("Passwords don't match")
742-            self.pass_field.SetValue('')
743-            self.conf_field.SetValue('')
744-            self.pass_field.SetFocus()
745-            self.Layout()
746-            return
747-
748-        backend = self.app.get_backend()
749-
750-        #print 'calling create_account', time.asctime()
751-        result_code = create_account(backend, user, passwd, subscribe)
752-
753-        if result_code == 'account_exists':
754-            # try and log into it; if valid, use it anyway
755-            try:
756-                #print 'calling get_root_cap (ae)', time.asctime()
757-                root_cap = get_root_cap(backend, user, passwd)
758-                write_root_cap(root_cap)
759-            except AuthError:
760-                self.warning_label.SetLabel('That email address is already registered')
761-                self.user_field.SetFocus()
762-                self.Layout()
763-                return
764-        elif result_code == 'error':
765-            self.warning_label.SetLabel('an error occurred')
766-            self.user_field.SetFocus()
767-            self.Layout()
768-            return
769-        elif result_code == 'ok':
770-            #print 'calling get_root_cap (ok)', time.asctime()
771-            root_cap = get_root_cap(backend, user, passwd)
772-            write_root_cap(root_cap)
773-        else:
774-            self.warning_label.SetLabel('an unexpected error occurred ("%s")' % (result_code,))
775-            self.user_field.SetFocus()
776-            self.Layout()
777-            return
778-
779-        nodeid = get_nodeid()
780-        nickname = get_nickname()
781-        ret = record_install(backend, user, passwd, nodeid, nickname)
782-        if ret != 'ok':
783-            wx.MessageBox('Error "%s" recording this system (%s)' % (ret, nodeid), 'Error')
784-
785-        configure(backend, user, passwd)
786-        maybe_start_services()
787-        maybe_write_file('nickname', nickname)
788-        maybe_write_file('accountname', user)
789-
790-        self.app.open_welcome_page()
791-
792-        # exit
793-        self.parent.parent.Close()
794-
795-def do_uninstall(server_url):
796-    nodeid = get_nodeid()
797-    ret = record_uninstall(server_url + BACKEND, nodeid)
798-    print ret
799-    if ret != 'ok':
800-        print 'Error "%s" recording uninstall of this system (%s)' % (ret, nodeid)
801-
802-class Options(usage.Options):
803-    synopsis = "Usage:  confwiz [options]"
804-
805-    optFlags = [
806-        ['uninstall', 'u', 'record uninstall'],
807-        ]
808-    optParameters = [
809-        ['server', 's', DEFAULT_SERVER_URL, 'url of server to contact'],
810-        ]
811-
812-def main(argv):
813-    config = Options()
814-    try:
815-        config.parseOptions(argv[1:])
816-    except usage.error, e:
817-        print config
818-        print "%s:  %s" % (sys.argv[0], e)
819-        sys.exit(-1)
820-
821-    server = config['server']
822-    if not server.endswith('/'):
823-        server += '/'
824-
825-    if config['uninstall']:
826-        do_uninstall(server)
827-    else:
828-        app = ConfWizApp(server)
829-        app.MainLoop()
830-
831-
832-if __name__ == '__main__':
833-    main(sys.argv)
834rmfile ./src/allmydata/gui/confwiz.py
835hunk ./src/allmydata/gui/macapp.py 1
836-
837-import operator
838-import os
839-import stat
840-from subprocess import Popen, PIPE
841-import sys
842-import thread
843-import threading
844-import traceback
845-import urllib
846-import webbrowser
847-
848-import wx
849-from twisted.internet import reactor
850-from twisted.python import log, logfile
851-
852-import allmydata
853-from allmydata import client
854-from allmydata.gui.confwiz import ConfWizApp, ACCOUNT_PAGE, DEFAULT_SERVER_URL
855-from allmydata.scripts.common import get_aliases
856-from allmydata.gui import amdicon, amdlogo
857-
858-DEFAULT_FUSE_TIMEOUT = 300
859-
860-TRY_TO_INSTALL_TAHOE_SCRIPT = True
861-TAHOE_SCRIPT = '''#!/bin/bash
862-if [ "x${*}x" == "xx" ]
863-then
864-    %(exe)s --help
865-else
866-    %(exe)s "${@}"
867-fi
868-'''
869-
870-def run_macapp():
871-    nodedir = os.path.expanduser('~/.tahoe')
872-    if not os.path.isdir(nodedir):
873-        app_supp = os.path.expanduser('~/Library/Application Support/Allmydata Tahoe/')
874-        if not os.path.isdir(app_supp):
875-            os.makedirs(app_supp)
876-        os.symlink(app_supp, nodedir)
877-
878-    app_cont = AppContainer(nodedir)
879-    return app_cont.run()
880-
881-class MacGuiClient(client.Client):
882-    """
883-    This is a subclass of the tahoe 'client' node, which hooks into the
884-    client's 'notice something went wrong' mechanism, to display the fact
885-    in a manner sensible for a wx gui app
886-    """
887-    def __init__(self, nodedir, app_cont):
888-        self.app_cont = app_cont
889-        client.Client.__init__(self, nodedir)
890-
891-    def _service_startup_failed(self, failure):
892-        wx.CallAfter(self.wx_abort, failure)
893-        log.msg('node service startup failed')
894-        log.err(failure)
895-
896-    def wx_abort(self, failure):
897-        wx.MessageBox(failure.getTraceback(), 'Fatal Error in Node startup')
898-        self.app_cont.guiapp.ExitMainLoop()
899-
900-class AppContainer(object):
901-    """
902-    This is the 'container' for the mac app, which takes care of initial
903-    configuration concerns - e.g. running the confwiz before going any further -
904-    of launching the reactor, and within it the tahoe node, on a separate thread,
905-    and then lastly of launching the actual wx gui app and waiting for it to exit.
906-    """
907-    def __init__(self, nodedir):
908-        self.nodedir = nodedir
909-
910-    def files_exist(self, file_list):
911-        extant_conf = [ os.path.exists(os.path.join(self.nodedir, f)) for f in file_list ]
912-        return reduce(operator.__and__, extant_conf)
913-
914-    def is_config_incomplete(self):
915-        necessary_conf_files = ['introducer.furl', 'private/root_dir.cap']
916-        need_config = not self.files_exist(necessary_conf_files)
917-        if need_config:
918-            print 'some config is missing from nodedir (%s): %s' % (self.nodedir, necessary_conf_files)
919-        return need_config
920-
921-    def run(self):
922-        # handle initial config
923-        if not os.path.exists(os.path.join(self.nodedir, 'webport')):
924-            f = file(os.path.join(self.nodedir, 'webport'), 'wb')
925-            f.write('3456')
926-            f.close()
927-
928-        if self.is_config_incomplete():
929-            confwiz = ConfWizApp(DEFAULT_SERVER_URL, open_welcome_page=True)
930-            confwiz.MainLoop()
931-
932-        if self.is_config_incomplete():
933-            print 'config still incomplete; confwiz cancelled, exiting'
934-            return 1
935-
936-        # set up twisted logging. this will become part of the node rsn.
937-        logdir = os.path.join(self.nodedir, 'logs')
938-        if not os.path.exists(logdir):
939-            os.makedirs(logdir)
940-        lf = logfile.LogFile('tahoesvc.log', logdir)
941-        log.startLogging(lf)
942-
943-        if TRY_TO_INSTALL_TAHOE_SCRIPT:
944-            self.maybe_install_tahoe_script()
945-
946-        # actually start up the node and the ui
947-        os.chdir(self.nodedir)
948-
949-        # start the reactor thread up, launch the tahoe node therein
950-        self.start_reactor()
951-
952-        try:
953-            # launch the actual gui on the wx event loop, wait for it to quit
954-            self.guiapp = MacGuiApp(app_cont=self)
955-            self.guiapp.MainLoop()
956-            log.msg('gui mainloop exited')
957-        except:
958-            log.err()
959-
960-        # shutdown the reactor, hence tahoe node, before exiting
961-        self.stop_reactor()
962-
963-        return 0
964-
965-    def start_reactor(self):
966-        self.reactor_shutdown = threading.Event()
967-        thread.start_new_thread(self.launch_reactor, ())
968-
969-    def launch_reactor(self):
970-        # run the node itself
971-        #c = client.Client(self.nodedir)
972-        c = MacGuiClient(self.nodedir, app_cont=self)
973-        reactor.callLater(0, c.startService) # after reactor startup
974-        reactor.run(installSignalHandlers=False)
975-        self.reactor_shutdown.set()
976-
977-    def stop_reactor(self):
978-        # trigger reactor shutdown, and block waiting on it
979-        reactor.callFromThread(reactor.stop)
980-        log.msg('waiting for reactor shutdown')
981-        self.reactor_shutdown.wait()
982-        log.msg('reactor shut down')
983-
984-    def maybe_install_tahoe_script(self):
985-        path_candidates = ['/usr/local/bin', '~/bin', '~/Library/bin']
986-        env_path = map(os.path.expanduser, os.environ['PATH'].split(':'))
987-        if not sys.executable.endswith('/python'):
988-            print 'not installing tahoe script: unexpected sys.exe "%s"' % (sys.executable,)
989-            return
990-        for path_candidate in map(os.path.expanduser, env_path):
991-            tahoe_path = path_candidate + '/tahoe'
992-            if os.path.exists(tahoe_path):
993-                print 'not installing "tahoe": it already exists at "%s"' % (tahoe_path,)
994-                return
995-        for path_candidate in map(os.path.expanduser, path_candidates):
996-            if path_candidate not in env_path:
997-                print path_candidate, 'not in', env_path
998-                continue
999-            tahoe_path = path_candidate + '/tahoe'
1000-            try:
1001-                print 'trying to install "%s"' % (tahoe_path,)
1002-                bin_path = (sys.executable[:-6] + 'Allmydata')
1003-                script = TAHOE_SCRIPT % { 'exe': bin_path }
1004-                f = file(tahoe_path, 'wb')
1005-                f.write(script)
1006-                f.close()
1007-                mode = stat.S_IRUSR|stat.S_IXUSR|stat.S_IRGRP|stat.S_IXGRP|stat.S_IROTH|stat.S_IXOTH
1008-                os.chmod(tahoe_path, mode)
1009-                print 'installed "%s"' % (tahoe_path,)
1010-                return
1011-            except:
1012-                print 'unable to write %s' % (tahoe_path,)
1013-                traceback.print_exc()
1014-        else:
1015-            print 'no remaining candidate paths for installation of tahoe script'
1016-
1017-
1018-def DisplayTraceback(message):
1019-    xc = traceback.format_exception(*sys.exc_info())
1020-    wx.MessageBox(u"%s\n (%s)"%(message,''.join(xc)), 'Error')
1021-
1022-WEBOPEN_ID = wx.NewId()
1023-ACCOUNT_PAGE_ID = wx.NewId()
1024-MOUNT_ID = wx.NewId()
1025-
1026-class SplashFrame(wx.Frame):
1027-    def __init__(self):
1028-        no_resz = wx.DEFAULT_FRAME_STYLE & ~ (wx.MINIMIZE_BOX|wx.RESIZE_BORDER|wx.MAXIMIZE_BOX)
1029-        wx.Frame.__init__(self, None, -1, 'Allmydata', style=no_resz)
1030-
1031-        self.SetSizeHints(100, 100, 600, 800)
1032-        self.SetIcon(amdicon.getIcon())
1033-        self.Bind(wx.EVT_CLOSE, self.on_close)
1034-
1035-        background = wx.Panel(self, -1)
1036-        background.parent = self
1037-        self.login_panel = SplashPanel(background, self.on_close)
1038-        sizer = wx.BoxSizer(wx.VERTICAL)
1039-        background_sizer = wx.BoxSizer(wx.VERTICAL)
1040-        background_sizer.Add(self.login_panel, 1, wx.ALIGN_CENTER_HORIZONTAL | wx.ALL, 26)
1041-        background.SetSizer(background_sizer)
1042-        sizer.Add(background, 0, wx.EXPAND | wx.ALL, 0)
1043-        self.SetSizer(sizer)
1044-        self.SetAutoLayout(True)
1045-        self.Fit()
1046-        self.Layout()
1047-
1048-    def on_close(self, event):
1049-        self.Show(False)
1050-
1051-class SplashPanel(wx.Panel):
1052-    def __init__(self, parent, on_close):
1053-        wx.Panel.__init__(self, parent, -1)
1054-        self.parent = parent
1055-
1056-        hbox = wx.BoxSizer(wx.HORIZONTAL)
1057-        vbox = wx.BoxSizer(wx.VERTICAL)
1058-        self.sizer = wx.BoxSizer(wx.VERTICAL)
1059-
1060-        self.icon = wx.StaticBitmap(self, -1, amdlogo.getBitmap())
1061-        self.label = wx.StaticText(self, -1, 'Allmydata')
1062-        bigfont = self.label.GetFont()
1063-        bigfont.SetPointSize(26)
1064-        smlfont = self.label.GetFont()
1065-        smlfont.SetPointSize(10)
1066-        self.label.SetFont(bigfont)
1067-        ver = "Version 3.0 (%s)" % (allmydata.__version__,)
1068-        self.ver_label = wx.StaticText(self, -1, ver)
1069-        self.ver_label.SetFont(smlfont)
1070-        copy = u"Copyright \N{COPYRIGHT SIGN} 2004-2008 Allmydata Inc.,"
1071-        self.copy_label = wx.StaticText(self, -1, copy)
1072-        self.copy_label.SetFont(smlfont)
1073-        self.res_label = wx.StaticText(self, -1, "All Rights Reserved.")
1074-        self.res_label.SetFont(smlfont)
1075-        ##self.ok = wx.Button(self, -1, 'Ok')
1076-        ##self.Bind(wx.EVT_BUTTON, on_close, self.ok)
1077-        hbox.Add(self.icon, 0, wx.CENTER | wx.ALL, 2)
1078-        vbox.Add(self.label, 0, wx.CENTER | wx.ALL, 2)
1079-        vbox.Add(self.ver_label, 0, wx.CENTER | wx.ALL, 2)
1080-        hbox.Add(vbox)
1081-        self.sizer.Add(hbox)
1082-        self.sizer.Add(wx.Size(8,8), 1, wx.EXPAND | wx.ALL, 2)
1083-        self.sizer.Add(self.copy_label, 0, wx.CENTER | wx.ALL, 2)
1084-        self.sizer.Add(self.res_label, 0, wx.CENTER | wx.ALL, 2)
1085-        #self.sizer.Add(wx.Size(42,42), 1, wx.EXPAND | wx.ALL, 2)
1086-        ##self.sizer.Add(self.ok, 0, wx.CENTER | wx.ALL, 2)
1087-        self.SetSizer(self.sizer)
1088-        self.SetAutoLayout(True)
1089-
1090-
1091-class MountFrame(wx.Frame):
1092-    def __init__(self, guiapp):
1093-        wx.Frame.__init__(self, None, -1, 'Allmydata Mount Filesystem')
1094-
1095-        self.SetSizeHints(100, 100, 600, 800)
1096-        self.SetIcon(amdicon.getIcon())
1097-        self.Bind(wx.EVT_CLOSE, self.on_close)
1098-
1099-        background = wx.Panel(self, -1)
1100-        background.parent = self
1101-        self.mount_panel = MountPanel(background, self.on_close, guiapp)
1102-        sizer = wx.BoxSizer(wx.VERTICAL)
1103-        background_sizer = wx.BoxSizer(wx.VERTICAL)
1104-        background_sizer.Add(self.mount_panel, 1, wx.ALIGN_CENTER_HORIZONTAL | wx.ALL, 26)
1105-        background.SetSizer(background_sizer)
1106-        sizer.Add(background, 0, wx.EXPAND | wx.ALL, 0)
1107-        self.SetSizer(sizer)
1108-        self.SetAutoLayout(True)
1109-        self.Fit()
1110-        self.Layout()
1111-
1112-    def on_close(self, event):
1113-        self.Show(False)
1114-
1115-class MountPanel(wx.Panel):
1116-    def __init__(self, parent, on_close, guiapp):
1117-        wx.Panel.__init__(self, parent, -1)
1118-        self.parent = parent
1119-        self.guiapp = guiapp
1120-
1121-        self.sizer = wx.BoxSizer(wx.VERTICAL)
1122-
1123-        self.label = wx.StaticText(self, -1, 'Allmydata Mount Filesystem')
1124-        self.mnt_label = wx.StaticText(self, -1, 'Mount')
1125-        self.alias_choice = wx.Choice(self, -1, (120, 64), choices=self.guiapp.aliases.keys())
1126-        root_dir = self.alias_choice.FindString('tahoe')
1127-        if root_dir != -1:
1128-            self.alias_choice.SetSelection(root_dir)
1129-        self.at_label = wx.StaticText(self, -1, 'at')
1130-        self.mountpoint = wx.TextCtrl(self, -1, 'choose a mount dir', size=(256,22))
1131-        self.mnt_browse = wx.Button(self, -1, 'Browse')
1132-        mount_sizer = wx.BoxSizer(wx.HORIZONTAL)
1133-        mount_sizer.Add(self.mnt_label, 0, wx.ALL, 4)
1134-        mount_sizer.Add(self.alias_choice, 0, wx.ALL, 4)
1135-        mount_sizer.Add(self.at_label, 0, wx.ALL, 4)
1136-        mount_sizer.Add(self.mountpoint, 0, wx.ALL, 4)
1137-        mount_sizer.Add(self.mnt_browse, 0, wx.ALL, 4)
1138-        self.mount = wx.Button(self, -1, 'Mount')
1139-        self.Bind(wx.EVT_BUTTON, self.on_mount, self.mount)
1140-        #self.Bind(wx.EVT_CHOICE, self.on_choice, self.alias_choice)
1141-        self.Bind(wx.EVT_BUTTON, self.on_mnt_browse, self.mnt_browse)
1142-        self.sizer.Add(self.label, 0, wx.CENTER | wx.ALL, 2)
1143-        self.sizer.Add(wx.Size(28,28), 1, wx.EXPAND | wx.ALL, 2)
1144-        self.sizer.Add(mount_sizer, 0, wx.EXPAND | wx.ALL, 0)
1145-        self.sizer.Add(wx.Size(28,28), 1, wx.EXPAND | wx.ALL, 2)
1146-        self.sizer.Add(self.mount, 0, wx.CENTER | wx.ALL, 2)
1147-        self.SetSizer(self.sizer)
1148-        self.SetAutoLayout(True)
1149-
1150-    def on_mount(self, event):
1151-        mountpoint = str(self.mountpoint.GetValue())
1152-        if not os.path.isdir(mountpoint):
1153-            wx.MessageBox(u'"%s" is not a directory' % (mountpoint,))
1154-        else:
1155-            alias_name = self.alias_choice.GetStringSelection()
1156-            self.do_mount(alias_name, mountpoint)
1157-
1158-    def on_mnt_browse(self, event):
1159-        dlg = wx.DirDialog(self, "Choose a Mountpoint Directory:",
1160-                           style=wx.DD_DEFAULT_STYLE|wx.DD_NEW_DIR_BUTTON)
1161-        if dlg.ShowModal() == wx.ID_OK:
1162-            mountpoint = dlg.GetPath()
1163-            self.mountpoint.SetValue(mountpoint)
1164-        dlg.Destroy()
1165-
1166-    def do_mount(self, alias_name, mountpoint):
1167-        log.msg('do_mount(%r, %r)' % (alias_name, mountpoint))
1168-        self.guiapp.mount_filesystem(alias_name, mountpoint)
1169-        self.parent.parent.Show(False)
1170-
1171-class MacGuiApp(wx.App):
1172-    config = {
1173-        'auto-mount': True,
1174-        'auto-open': True,
1175-        'show-webopen': False,
1176-        'daemon-timeout': DEFAULT_FUSE_TIMEOUT,
1177-        }
1178-
1179-    def __init__(self, app_cont):
1180-        self.app_cont = app_cont
1181-        self.nodedir = app_cont.nodedir
1182-        self.load_config()
1183-        self.mounted_filesystems = {}
1184-        self.aliases = get_aliases(self.nodedir)
1185-        wx.App.__init__(self)
1186-
1187-    ## load up setting from gui.conf dir
1188-    def load_config(self):
1189-        log.msg('load_config')
1190-        confdir = os.path.join(self.nodedir, 'gui.conf')
1191-        config = {}
1192-        config.update(self.config)
1193-        for k in self.config:
1194-            f = os.path.join(confdir, k)
1195-            if os.path.exists(f):
1196-                val = file(f, 'rb').read().strip()
1197-                if type(self.config[k]) == bool:
1198-                    if val.lower() in ['y', 'yes', 'true', 'on', '1']:
1199-                        val = True
1200-                    else:
1201-                        val = False
1202-                elif type(self.config[k]) == int:
1203-                    val = int(val)
1204-                config[k] = val
1205-        self.config = config
1206-
1207-    ## GUI wx init
1208-    def OnInit(self):
1209-        log.msg('OnInit')
1210-        try:
1211-            self.frame = SplashFrame()
1212-            self.frame.CenterOnScreen()
1213-            self.frame.Show(True)
1214-            self.SetTopWindow(self.frame)
1215-
1216-            # self.load_config()
1217-
1218-            wx.FutureCall(4096, self.on_timer, None)
1219-
1220-            self.mount_frame = MountFrame(guiapp=self)
1221-
1222-            self.setup_dock_icon()
1223-            menubar = self.setup_app_menu(self.frame)
1224-            self.frame.SetMenuBar(menubar)
1225-
1226-            return True
1227-        except:
1228-            DisplayTraceback('exception on startup')
1229-            sys.exit()
1230-
1231-    ## WX menu and event handling
1232-
1233-    def on_timer(self, event):
1234-        self.frame.Show(False)
1235-        self.perhaps_automount()
1236-
1237-    def setup_dock_icon(self):
1238-        self.tbicon = wx.TaskBarIcon()
1239-        #self.tbicon.SetIcon(amdicon.getIcon(), "Allmydata")
1240-        wx.EVT_TASKBAR_RIGHT_UP(self.tbicon, self.on_dock_menu)
1241-
1242-    def setup_app_menu(self, frame):
1243-        menubar = wx.MenuBar()
1244-        file_menu = wx.Menu()
1245-        if self.config['show-webopen']:
1246-            webopen_menu = wx.Menu()
1247-            self.webopen_menu_ids = {}
1248-            for alias in self.aliases:
1249-                mid = wx.NewId()
1250-                self.webopen_menu_ids[mid] = alias
1251-                item = webopen_menu.Append(mid, alias)
1252-                frame.Bind(wx.EVT_MENU, self.on_webopen, item)
1253-            file_menu.AppendMenu(WEBOPEN_ID, 'Open Web UI', webopen_menu)
1254-        item = file_menu.Append(ACCOUNT_PAGE_ID, text='Open Account Page')
1255-        frame.Bind(wx.EVT_MENU, self.on_account_page, item)
1256-        item = file_menu.Append(MOUNT_ID, text='Mount Filesystem')
1257-        frame.Bind(wx.EVT_MENU, self.on_mount, item)
1258-        item = file_menu.Append(wx.ID_ABOUT, text='About')
1259-        frame.Bind(wx.EVT_MENU, self.on_about, item)
1260-        item = file_menu.Append(wx.ID_EXIT, text='Quit')
1261-        frame.Bind(wx.EVT_MENU, self.on_quit, item)
1262-        menubar.Append(file_menu, 'File')
1263-        return menubar
1264-
1265-    def on_dock_menu(self, event):
1266-        dock_menu = wx.Menu()
1267-        item = dock_menu.Append(wx.NewId(), text='About')
1268-        self.tbicon.Bind(wx.EVT_MENU, self.on_about, item)
1269-        if self.config['show-webopen']:
1270-            item = dock_menu.Append(WEBOPEN_ID, text='Open Web Root')
1271-            self.tbicon.Bind(wx.EVT_MENU, self.on_webopen, item)
1272-        item = dock_menu.Append(ACCOUNT_PAGE_ID, text='Open Account Page')
1273-        self.tbicon.Bind(wx.EVT_MENU, self.on_account_page, item)
1274-        item = dock_menu.Append(MOUNT_ID, text='Mount Filesystem')
1275-        self.tbicon.Bind(wx.EVT_MENU, self.on_mount, item)
1276-        self.tbicon.PopupMenu(dock_menu)
1277-
1278-    def on_about(self, event):
1279-        self.frame.Show(True)
1280-
1281-    def on_quit(self, event):
1282-        self.unmount_filesystems()
1283-        self.ExitMainLoop()
1284-
1285-    def on_webopen(self, event):
1286-        alias = self.webopen_menu_ids.get(event.GetId())
1287-        #log.msg('on_webopen() alias=%r' % (alias,))
1288-        self.webopen(alias)
1289-
1290-    def on_account_page(self, event):
1291-        webbrowser.open(DEFAULT_SERVER_URL + ACCOUNT_PAGE)
1292-
1293-    def on_mount(self, event):
1294-        self.mount_frame.Show(True)
1295-
1296-    ## Gui App methods
1297-
1298-    def perhaps_automount(self):
1299-        if self.config['auto-mount']:
1300-            mountpoint = os.path.join(self.nodedir, 'mnt/__auto__')
1301-            if not os.path.isdir(mountpoint):
1302-                os.makedirs(mountpoint)
1303-            self.mount_filesystem('tahoe', mountpoint, 'Allmydata')
1304-
1305-    def webopen(self, alias=None):
1306-        log.msg('webopen: %r' % (alias,))
1307-        if alias is None:
1308-            alias = 'tahoe'
1309-        root_uri = self.aliases.get(alias)
1310-        if root_uri:
1311-            nodeurl = file(os.path.join(self.nodedir, 'node.url'), 'rb').read().strip()
1312-            if nodeurl[-1] != "/":
1313-                nodeurl += "/"
1314-            url = nodeurl + "uri/%s/" % urllib.quote(root_uri)
1315-            webbrowser.open(url)
1316-
1317-    def mount_filesystem(self, alias_name, mountpoint, display_name=None):
1318-        log.msg('mount_filesystem(%r,%r,%r)' % (alias_name, mountpoint, display_name))
1319-        log.msg('sys.exec = %r' % (sys.executable,))
1320-
1321-        # first determine if we can find the 'tahoe' binary (i.e. contents of .app)
1322-        if not sys.executable.endswith('Allmydata.app/Contents/MacOS/python'):
1323-            log.msg("can't find allmydata.app: sys.executable = %r" % (sys.executable,))
1324-            wx.MessageBox("Can't determine location of Allmydata.app")
1325-            return False
1326-        bin_path = sys.executable[:-6] + 'Allmydata'
1327-        log.msg('%r exists: %r' % (bin_path, os.path.exists(bin_path),))
1328-
1329-        # check mountpoint exists
1330-        if not os.path.exists(mountpoint):
1331-            log.msg('mountpoint %r does not exist' % (mountpoint,))
1332-            return False
1333-
1334-        # figure out options for fuse_main
1335-        foptions = []
1336-        foptions.append('-olocal') # required to display in Finder on leopard
1337-        #foptions.append('-ofstypename=allmydata') # shown in 'get info'
1338-        if display_name is None:
1339-            display_name = alias_name
1340-        foptions.append('-ovolname=%s' % (display_name,))
1341-        timeout = self.config['daemon-timeout']
1342-        foptions.append('-odaemon_timeout=%d' % (timeout,))
1343-        icns_path = os.path.join(self.nodedir, 'private/icons', alias_name+'.icns')
1344-        log.msg('icns_path %r exists: %s' % (icns_path, os.path.exists(icns_path)))
1345-        if not os.path.exists(icns_path):
1346-            icns_path = os.path.normpath(os.path.join(os.path.dirname(sys.executable),
1347-                                                      '../Resources/allmydata.icns'))
1348-            log.msg('set icns_path=%s' % (icns_path,))
1349-        if os.path.exists(icns_path):
1350-            foptions.append('-ovolicon=%s' % (icns_path,))
1351-
1352-
1353-        # actually launch tahoe fuse
1354-        command = [bin_path, 'fuse', '--alias', alias_name] + foptions + [mountpoint]
1355-        #log.msg('spawning command %r' % (command,))
1356-        #proc = Popen(command, cwd=self.nodedir, stdout=PIPE, stderr=PIPE)
1357-        #log.msg('spawned process, pid %s' % (proc.pid,))
1358-        self.async_run_cmd(command)
1359-
1360-        # log the outcome, record the fact that we mounted this fs
1361-        #wx.FutureCall(4096, self.check_proc, proc, 'fuse')
1362-        self.mounted_filesystems[display_name] = mountpoint
1363-
1364-        # open finder, if configured to do so
1365-        if self.config['auto-open']:
1366-            wx.FutureCall(4096, self.sync_run_cmd, ['/usr/bin/open', mountpoint])
1367-        return True
1368-
1369-    def unmount_filesystems(self):
1370-        # the user may've already unmounted some, but we should ensure that
1371-        # anything the gui mounted gets shut down, since they all depend on
1372-        # the tahoe node, which is going away
1373-        for name, mountpoint in self.mounted_filesystems.items():
1374-            log.msg('unmounting %r (%s)' % (name, mountpoint))
1375-            self.sync_run_cmd(['/sbin/umount', mountpoint])
1376-
1377-    def sync_run_cmd(self, argv):
1378-        log.msg('synchronously running command: %r' % (argv,))
1379-        proc = Popen(argv, cwd=self.nodedir, stdout=PIPE, stderr=PIPE)
1380-        proc.wait()
1381-        self.check_proc(proc)
1382-
1383-    def async_run_cmd(self, argv):
1384-        log.msg('asynchronously running command: %r' % (argv,))
1385-        proc = Popen(argv, cwd=self.nodedir, stdout=PIPE, stderr=PIPE)
1386-        log.msg('spawned process, pid: %s' % (proc.pid,))
1387-        wx.FutureCall(4096, self.check_proc, proc, 'async fuse process:')
1388-
1389-    def check_proc(self, proc, description=None):
1390-        message = []
1391-        if description is not None:
1392-            message.append(description)
1393-        message.append('pid: %s  retcode: %s' % (proc.pid, proc.returncode,))
1394-        stdout = proc.stdout.read()
1395-        if stdout:
1396-            message.append('\nstdout:\n%s' % (stdout,))
1397-        stderr = proc.stderr.read()
1398-        if stderr:
1399-            message.append('\nstdout:\n%s' % (stderr,))
1400-        log.msg(' '.join(message))
1401-
1402rmfile ./src/allmydata/gui/macapp.py
1403rmdir ./src/allmydata/gui
1404hunk ./mac/COPYING.LGPL2 1
1405-mac/fuse.py and mac/fuseparts/subbedopts.py are also available (at your option) under LGPL2 as well as under GPL2+|TGPPL1+
1406-
1407-GNU Lesser General Public License
1408-
1409-Version 2.1, February 1999
1410-
1411-    Copyright (C) 1991, 1999 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.
1412-
1413-    [This is the first released version of the Lesser GPL. It also counts as the successor of the GNU Library Public License, version 2, hence the version number 2.1.]
1414-
1415-Preamble
1416-
1417-The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users.
1418-
1419-This license, the Lesser General Public License, applies to some specially designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below.
1420-
1421-When we speak of free software, we are referring to freedom of use, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish); that you receive source code or can get it if you want it; that you can change the software and use pieces of it in new free programs; and that you are informed that you can do these things.
1422-
1423-To protect your rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it.
1424-
1425-For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights.
1426-
1427-We protect your rights with a two-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library.
1428-
1429-To protect each distributor, we want to make it very clear that there is no warranty for the free library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others.
1430-
1431-Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license.
1432-
1433-Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain libraries in order to permit linking those libraries into non-free programs.
1434-
1435-When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library.
1436-
1437-We call this license the "Lesser" General Public License because it does Less to protect the user's freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries. However, the Lesser license provides advantages in certain special circumstances.
1438-
1439-For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License.
1440-
1441-In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system.
1442-
1443-Although the Lesser General Public License is Less protective of the users' freedom, it does ensure that the user of a program that is linked with the Library has the freedom and the wherewithal to run that program using a modified version of the Library.
1444-
1445-The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run.
1446-TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
1447-
1448-0. This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called "this License"). Each licensee is addressed as "you".
1449-
1450-A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables.
1451-
1452-The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".)
1453-
1454-"Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library.
1455-
1456-Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does.
1457-
1458-1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library.
1459-
1460-You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee.
1461-
1462-2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions:
1463-
1464-    a) The modified work must itself be a software library.
1465-
1466-    b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change.
1467-
1468-    c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License.
1469-
1470-    d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful.
1471-
1472-    (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.)
1473-
1474-    These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it.
1475-
1476-    Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library.
1477-
1478-    In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License.
1479-
1480-3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices.
1481-
1482-Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy.
1483-
1484-This option is useful when you wish to copy part of the code of the Library into a program that is not a library.
1485-
1486-4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange.
1487-
1488-If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code.
1489-
1490-5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License.
1491-
1492-However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables.
1493-
1494-When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law.
1495-
1496-If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.)
1497-
1498-Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself.
1499-
1500-6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications.
1501-
1502-You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things:
1503-
1504-    a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.)
1505-
1506-    b) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with.
1507-
1508-    c) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution.
1509-
1510-    d) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place.
1511-
1512-    e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy.
1513-
1514-For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable.
1515-
1516-It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute.
1517-
1518-7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things:
1519-
1520-    a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above.
1521-
1522-    b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work.
1523-
1524-8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance.
1525-
1526-9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it.
1527-
1528-10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties with this License.
1529-
1530-11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library.
1531-
1532-If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances.
1533-
1534-It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice.
1535-
1536-This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License.
1537-
1538-12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License.
1539-
1540-13. The Free Software Foundation may publish revised and/or new versions of the Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.
1541-
1542-Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation.
1543-
1544-14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally.
1545-
1546-NO WARRANTY
1547-
1548-15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
1549-
1550-16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
1551-END OF TERMS AND CONDITIONS
1552-How to Apply These Terms to Your New Libraries
1553-If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License).
1554-
1555-To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found.
1556-
1557-    <one line to give the library's name and an idea of what it does.> Copyright (C) <year> <name of author>
1558-
1559-    This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version.
1560-
1561-    This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
1562-
1563-    You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
1564-
1565-Also add information on how to contact you by electronic and paper mail.
1566-
1567-You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names:
1568-
1569-    Yoyodyne, Inc., hereby disclaims all copyright interest in the library `Frob' (a library for tweaking knobs) written by James Random Hacker.
1570-
1571-    signature of Ty Coon, 1 April 1990
1572-    Ty Coon, President of Vice
1573-
1574-That's all there is to it!
1575rmfile ./mac/COPYING.LGPL2
1576hunk ./mac/Makefile 1
1577-
1578-.PHONY: all dist build diskimage upload cleanup clean
1579-
1580-all: build
1581-
1582-dist: build diskimage upload cleanup
1583-
1584-build:
1585-       rsync -av ` sw_vers -productVersion | sed -e 's/^\(10\.[0-9]*\)\..*$$/\1/' `/ ./
1586-       ln -sf ../contrib/fuse/impl_c/blackmatch.py tahoefuse.py
1587-       python setup.py py2app --no-chdir
1588-
1589-diskimage:
1590-       mv dist Allmydata-$(VERSION)
1591-       hdiutil create -ov -srcfolder Allmydata-$(VERSION) allmydata-rw.dmg
1592-       hdiutil convert -ov allmydata-rw.dmg -format UDRO -o allmydata-ro.dmg
1593-       hdiutil convert -ov allmydata-ro.dmg -format UDZO -o Allmydata-$(VERSION).dmg
1594-       hdiutil internet-enable -yes Allmydata-$(VERSION).dmg
1595-       rm -r Allmydata-$(VERSION) allmydata-rw.dmg allmydata-ro.dmg
1596-
1597-ifdef UPLOAD_DEST_FURLFILE
1598-# N.B.: xfer-client.py requires foolscap, so we hack up PYTHONPATH to improve
1599-# the chances of finding it (using the one that we just built)
1600-# broken. To fix this just use flappclient. --Zooko 2010-06-06
1601-upload:
1602-       chmod a+r Allmydata-$(VERSION).dmg
1603-       PYTHONPATH=$(PYTHONPATH):../support/lib/python2.5/site-packages \
1604-        python ../misc/xfer-client.py --furlfile $(UPLOAD_DEST_FURLFILE) \
1605-        Allmydata-$(VERSION).dmg
1606-else
1607-upload:
1608-       $(error UPLOAD_DEST_FURLFILE must be set when using upload target. e.g. make upload UPLOAD_DEST_FURLFILE=~/.upload.furl)
1609-endif
1610-
1611-cleanup:
1612-       rm Allmydata-$(VERSION).dmg
1613-
1614-clean:
1615-       rm -rf build dist
1616rmfile ./mac/Makefile
1617hunk ./mac/README.txt 1
1618-2009-02-07:
1619-
1620-Zooko wrote this what is in this directory after asking RobK about it:
1621-
1622-wxpython trappings to build a .app bundle which is both a gui app and (when launching the binary from within the .app bundle) a functioning bin/tahoe binary including "tahoe fuse" subcommand
1623-
1624rmfile ./mac/README.txt
1625binary ./mac/allmydata.icns
1626oldhex
1627*69636e73000099af697433320000599f00000000fffffcfffc0000fffc0000ffb6000c0b284b62
1628*75777677756149280bb60000ffb20014022c6fa3cee1e5e7ebe9e8e9ece8e4e1cda0672a01b200
1629*00ffb0000a1665b8e2ece2d4cdcac8c780c60ac7c8cacdd5e3ebe2b26011b00000ffae00091776
1630*d3eddecec7c6c7c786c809c7c7c6c8cedfedd17716ae0000ffac00070363d4ecd7c8c6c78ec806
1631*c7c6c8d6edcd5dad0000ffab00052db1efd9c8c68ec80bc7c7c6c6c5c4c2c3d7eca925ab0000ff
1632*aa000459dee7cac689c880c703c6c6c5c580c400c380c205c1bec4e3d64baa0000ffa900047cee
1633*d9c6c786c802c7c7c680c500c480c301c2c280c100c080bf05bebcbbd2e771a90000ffa7000406
1634*91efd1c682c880c701c6c580c400c380c280c105c0c0bfbfbebe80bd07bcbbbbbab7c6ea7ea800
1635*00ffa7000994f2cdc6c8c7c6c6c5c580c400c380c207c1c1c0c0bfbfbebe80bd05bcbcbbbbbaba
1636*80b905b8b7b4c0e87da70000ffa600087defcbc4c5c4c4c3c381c209c1c1c0bfbfbebcbbbaba82
1637*b902babab980b801b7b780b605b5b4b2bee76da60000ffa500065aeeccc2c3c2c280c100c080bf
1638*10bebdbcbbbfc7d2dadededdd9cfc3bab5b580b605b5b5b4b4b3b380b203aebee34ba50000ffa4
1639*00062ddcd3bec1c1c080bf00be80bd14bcbabbc8dedfcfac907d747c92b0d2dddac1b2b1b380b2
1640*0ab1b1b0b0afafaeaac6d021a40000ffa3000306b6dfbd80be80bd0cbcbbbbbab9b7c8e2d28c45
1641*11028200070313478fd2ddbeae81af00ae80ad06acacaba9d4a202a30000ffa3000269e9be80bc
1642*0cbbbbbabab9b9b8b5badbd7771a8a00072181d7d3afaaacac80ab07aaaaa9a8a7acdd58a30000
1643*ffa200081bd3ccb8babab9b9b880b705b6b3bfe4a9278e00052eaddeb2a7a980a880a705a6a6a2
1644*bdc513a20000ffa2000181e481b780b607b5b5b4b1bee482049000080785dfb3a4a6a6a5a580a4
1645*04a3a2a2d76fa20000ffa100071ad4c4b4b5b5b4b480b304b2afbbe3679400067bdeada1a3a3a2
1646*80a105a0a09db4c411a10000ffa100076ce1b2b3b3b2b2b180b003aeb2e07a96000485daa39fa0
1647*809f069e9d9d9c9cd45da10000ffa0000305b9c9ae80b000af80ae04adaad6a50396000307abc9
1648*9b809d009c809b049a96bba702a00000ffa0000637dcb4adaeaead80ac04aba8bcd02298000527
1649*ceac989a9a8099059898969fcd28a00000ffa0000175d981ab80aa04a9a8a8db719a000578cf97
1650*979897809604959493cb66a00000ff9f000702a8c7a6a9a9a8a880a703a3b8c7149a00041bc8a6
1651*93958094059392928db696a00000ff9f000d12ccb4a5a7a6a6a5a5a4a3a1d17d9c000686c38f92
1652*9291918090038ca1bc0b9f0000ff9f000436d2a9a3a480a305a2a2a0a5d4389c00023fcc93808f
1653*078e8e8d8d8c92c7299f0000ff9f000255d2a380a180a0049f9cb0be099c000d10bf9e8b8d8c8c
1654*8b8b8a898cc3459f0000ff9f00056bd19e9f9f9e809d039c98be979d000401a0ac878a80890588
1655*888786c05e9f0000ff9f00047cc8999d9c809b049a9995c67c9e000485b5838787808604858481
1656*bd6b9f0000ff9f000389c4969a80990598989795cb6d9e00046fbb81858480830482827cb4749f
1657*0000ff9f000c87c3949897979696959592c96d9e00036abf8082808105807f7f7ab0829f0000ff
1658*9f000386c191958094059392928fc86d9e00026abd7d807f067e7e7d7d77ae819f0000ff9f000c
1659*85bf8e9292919190908f8cc66c9e000c69bb7b7d7d7c7c7b7b7a74ad809f0000ff9f000485be8b
1660*8f8f818e038d8ac46c9e000269b978807a007980780271ab7f9f0000ff9f000584bc888d8d8c80
1661*8b038a87c36c9e000569b875787777807603756ea87f9f0000ff9f000484b9868b8a8089048887
1662*84c16c9e000368b6737581740473736ca77f9f0000ff9f000384b8838880870586858582bf6b9e
1663*000468b4707372807104707069a67e9f0000ff9f000283b681808506848383827fbe6b9e000368
1664*b36d70806f056e6e6d67a47e9f0000ff9f000c83b47e838282818180807cbc6a9e000667b16b6d
1665*6d6c6c806b0264a27d9f0000ff9f000382b37b80807f057e7e7d7aba699e000267b068806a0669
1666*696868619f7c9f0000ff9f000c82b1797e7d7d7c7c7b7b77b96a9e000c67ad6568686767666665
1667*5f9e7c9f0000ff9f000581ae767b7b7a8079037874b6699e000266ac6381658064025d9d7c9f00
1668*00ff9f000481ad737878807704767572b5689e000566ab61646463806203615a9b7c9f0000ff9f
1669*00047dab707675807404737370b4649e000462aa5e61618060045f5e5799779f0000ff98000011
1670*823c0e3a99a76e737372727171706db08838893b013a3a823b013a3a813b833a033786a75b805e
1671*075d5d5c5c549693388139013c27980000ff9700150699bdb0b1b1b0afb3906d7170706f6f6e6d
1672*6b93b0ab80ac80ab81aa84a981a881a782a60ea5a4a8885a5c5c5b5b5a5a59537da682a002a2b5
1673*39970000ff97000b0ebb7e7173727271706f6f6e806d006c806b056a6a6b6a6a69806881670066
1674*80658064056363626261618060015f5e805d055c5b5a5a59598058005780560855565655555450
1675*a366970000ff9700060db4776d6e6e6d816c806b006a8069016867806680650164648063046262
1676*616160815f005e805d005c805b045a5a595958815781560d555554545352525150504f4b9c6397
1677*0000ff9700040db4766b6c806b096a6a696968686767666681658064056363626261618060045f
1678*5e5e5d5d805c055b5b5a5a5959805800578056025555548053805200518050064f4f4e4d499b62
1679*970000ff9700050db373686969806800678066096565646564646363626280610060805f095e5e
1680*5d5d5c5c5b5b5a5a805900588057015656805500548053005280510050804f804e074d4d4c4b4b
1681*479a62970000ff9700060db17165676666826500648063066262616160605f805e805d0a5c5c5b
1682*5b5a5a5959585857805680550554545353525280510050804f004e804d004c804b804a04494844
1683*9862970000ff9700040db16e63658064056363626261618060005f805e005d805c005b805a0159
1684*59805800578056805504545353525280510550504f4f4e4e804d004c804b054a4a494948488047
1685*0345419761970000ff9700030db06d61806200618060055f5f5e5e5d5d805c005b805a00598058
1686*005781560d5555545453535252515150504f4f804e004d804c014b4b804a004980480447474646
1687*45804403433f9561970000ff97000a0db06a5e60605f5e5e5d5d805c055b5b5a5a595980580057
1688*805602555554805380520a515150504f4f4e4e4d4d4c804b804a05494948484747804600458044
1689*004380420441403c9361970000ff97000b0dae675c5d5d5c5c5b5b5a5a80590058805701565680
1690*5500548053005280510050804f014e4e804d004c804b804a044948484747804605454544444343
1691*804200418040053f3e3d399160970000ff97000b0dad65595b5a5a595958585780568055055454
1692*5353525280510050804f004e804d014c4b824a0b49494848474746464545444480430042804103
1693*40403f3f803e063d3c3c3b379060970000ff9700060dac62565858578056805504545353525280
1694*510550504f4f4e4e804d054c4b4a47444280440e4140424546464545444443434242418040803f
1695*003e803d013c3c803b053a3939348f5f970000ff9700120dab6054565555545453535252515150
1696*504f4f804e004d804c164b4b4a4a4742495b76899598978d7c644b3e3d414242418040003f803e
1697*003d803c803b0b3a3a39393838373736318d5f970000ff9700040daa5e515380520a515150504f
1698*4f4e4e4d4d4c804b804a1649494846415282a5a88e756261616b819fa890613e3a3f803e003d80
1699*3c803b043a393938388037083636353534332e8a5f970000ff9700040da95b4f50804f014e4e80
1700*4d004c804b804a0e49484847474645404a84ae8d49150283001609336fa79c57353a3c3b3b3a3a
1701*3939383837373636353580340033803203312c895e970000ff9700030da7584c804d004c814b09
1702*4a4a4949484847474646804505433d60a992368a00071569ae7b39353938803708363635353434
1703*33333280318030042f2e29885e970000ff9700080da756494b4b4a4a49804880470e4646454544
1704*44434342403b70b35c038d00082b9b953b31353534348033003280318030092f2e2e2d2d2c2b27
1705*865d970000ff9700030da65347804800478046004580440143438042074140403f3874af3c9000
1706*05118b9a382f3381311130302f2f2e2e2d2d2c2c2b2b2a2a2824855d970000ff9700060da55144
1707*46464580440043804205414140403f3f803e033664b1339200050b8b8f2e2e2f802e802d0e2c2c
1708*2b2b2a2a29292828272621835d970000ff9700050da44e4243438042084140403f3f3e3e3d3d81
1709*3c03374baf4a940003109c6f26802c002b802a012929802800278026052524231f815d970000ff
1710*97000e0da34c3f4140403f3f3e3e3d3d3c3c803b003a80390235947a9600052da743252a298028
1711*05272726262525802406232222211c805c970000ff9700060da2493c3e3e3d803c803b003a8039
1712*0038803703305ba51697000b6f8924272726262524242323812207212120201e197e5b970000ff
1713*9700030da1463a803b053a3a39393838803707363535343330946198000518a03d1e222282230c
1714*222120201f1e1e1d1d1c177c5b970000ff9700040da04437398038003780360b35353434333332
1715*322d47a3199900166e5e010306080a0e101316191b1c1d1d1c1b1b19147b5b970000ff9700040d
1716*9f42353680358034023333328031803002276e839a000239850485000b0103070b0e1216171712
1717*795b970000ff9700030d9e3f328033003280318030082f2f2e2e2f2e298a549a0002108f1a8b00
1718*0501040807745a970000ff9700160d9d3c2f313130302f2f2e2e2d2d2e2e2d2820130f822f9a00
1719*02027e3a8f00016b57970000ff9700080d9d3a2d2f2e2e2d2d802c0a2d2c261b0f0400000a8c1a
1720*9b00016d4e8f00016b57970000ff9700070d9c382a2c2c2b2a802b03261b0e03820002178c0c9b
1721*00016a588f00016b57970000ff9700030d9b35288029042a271e10048500021b8d0b9b00016b58
1722*8f00016b57970000ff9700080d9a322528282316088800020d8d139b00016a538f00016b579700
1723*00ff9700060d9831241f11048a00020888289b000176418f00016b57970000ff9700040d99280d
1724*028c00020176459a0002088a268f00016b57970000ff9700020d8f0d8f00015a6c9a00022a8c08
1725*8f00016b57970000ff9700020c890b8f00022a8e0b9900015d6b9000016b58970000ff9700020c
1726*8a0c8f00020386439800020a8d2f9000016c59970000ff9700020c8a0c9000024289059700024d
1727*83038d00040102006f59970000ff9700020c8a0c90000206874f9600021696318c000601020405
1728*02725a970000ff9700020c8a0c9100022a9822950001796b8b000801020507080906745a970000
1729*ff9700020c8a0c920002538e139300025e8a0b89000a01030407090a0c0d0a765b970000ff9700
1730*020c8a0c930002698c1591000257931d88000c01030407090b0d0e0f110e7a5c970000ff970002
1731*0c8a0c930003046592298e00030b6b911e87000e01040506080b0d0f10111315127c5d970000ff
1732*9700020c8a0c9500034d9957098b00032b87791486001001030608090a0d0f111214151819167e
1733*5d970001ff079600020c8a0c96000225973f8b00017c6885001301020305080a0b0c0f11131415
1734*181a1c1d1a815e970003ffd386469400020c8b0c97000176468b0001794183001501020306080a
1735*0c0d0e10131516171a1c1e20211d845e9500010d0f80ff02fa7f059200020c8b0c97000178458b
1736*0001794581001701020406070a0c0e1011121517181a1b1e2021222421855f930003147fe8f082
1737*ff01b9459100020c8b0c97000179458b0001794580001802050708090c0e1012121517191b1c1d
1738*2022242526282689609200014eea86ff01f94e9000020c8b0c97000179458b001d794500030407
1739*090a0c0d1012131416191b1d1e1f22242627282b2c2a8c6090000505b0fffffefe83ff04feffff
1740*b0068e00020c8b0c97000179458b001d79470007090b0d0e0f12141517181b1d1f202223262829
1741*2a2c2f302d8e618f000145b980ff01fefe83ff00fe80ff01b2148d00020c8b0c97000179458200
1742*0206b15683001d794a000b0d0f1011131618191a1d1f21222326282a2c2d2e3133343190628e00
1743*074cf9fffffefffefe83ff06fefffdffffea4d8c00020c8c0c970001794581000406b3fff94c82
1744*001d7a4d040f11121415181a1b1c1e21232425282a2c2e2f30333537373592628c0009077ff8ff
1745*fefffefffefe83ff07fefffdfffdfff84d8b00020c8c0c970001794580000106b380ff01f94c81
1746*001d7c5008131415181a1c1d1f2023252628292c2e3031333537393a3b3995638b000106b380ff
1747*05fefffefffefe83ff09fefffdfffdfdffffb0068900020c8c0c9700057945000006b382ff01f9
1748*4c80001d7d530c16171a1c1e2021222527282a2b2e3031333437393b3c3d3f3d98648a000b14b1
1749*fffefdfffefffefffefe83ff05fefffdfffdfd80ff01b3068800020c8c0c97000479450033b384
1750*ff21f93f00007d5710191b1e2021222527292b2c2d3032343536393b3d3e404143419b6489000c
1751*4deafffffefdfffefffefffefe83ff0bfefffdfffdfdfffdffffb1148700020c8c0c9700047945
1752*008a38851220660e007f5a141d2022232426292b2d2e2f31343637383a3d3f4041444647459d65
1753*88000d4bf8fffcfffefdfffefffefffefe83ff07fefffdfffdfdfffd80ff01ea4d8600020c8c0c
1754*9700067944002388000080fb23000010915600805c1722242627282b2d2f3032333638393b3c3f
1755*41424345484a4b49a06586000f077ff7fffdfcfffefdfffefffefffefe83ff0dfefffdfffdfdff
1756*fdfffffcfff94c8500020c8c0c960005017a4400f9fb84872198cc4e0081601c2628292a2d2f31
1757*323336383a3c3d3e41434446474a4c4e4f4ca26685000106b380ff0bfdfcfffefdfffefffefffe
1758*fe83ff0efefffdfffdfdfffdfffffcfdfff84b8400020c8c0c9400070102057c4500d89b843421
1759*457341008263202a2b2c2e31333435383a3c3e3f4142454748494c4e50515251a56784001106b2
1760*fffdfcfffdfcfffefdfffefffefffefe83ff10fefffdfffdfdfffdfffffcfdfffff77e06820002
1761*0c8c0c92000a01030606087f4600b946eb82e822ebf82638008366242e2f3033353738393c3e3f
1762*40434547494a4b4d505253545655a76783001214b1fffffdfcfffdfcfffefdfffefffefffefe83
1763*ff18fefffdfffdfdfffdfffffcfdfffeffffba80791600000c8c0c8f000d010203060809090d81
1764*470089945782552257617f290084692830333537393a3b3e4042434447494b4c4e4f5254555758
1765*5a59a9678100140f4fe9fffefffdfcfffdfcfffefdfffefffefffefe83ff0ffefffdfffdfdfffd
1766*fffffcfdfffefbfc80ff05f2aa060a8c0c8e000d020306080a0c0d0d1183460004098607380000
1767*846b2b3437393b3c3d3f42444546494b4d4e5052545658595a5d5e5dac69002278b8f0fffffbfe
1768*fffdfcfffdfcfffefdfffefffefffefe83ff0ffefffdfffdfdfffdfffffcfdfffefbfc80ff0500
1769*000c088d0d8b000f01020405070a0c0e0f101115864d06058704220607896e2f393b3d3e404144
1770*4647484a4d4f50515456585a5b5c5f616260ae6900110080ff12fcfbfefffdfcfffdfcfffefdff
1771*fefffefffefe83ff18fefffdfffdfdfffdfffffcfdfffefbfcffff78765f0a088d0d8900540102
1772*050608090c0e101113141518809b898b8b8c8c8d8e8e8f9090919192ae69333d3f40414446484a
1773*4b4c4f51525355585a5c5d5f6163656561ae6800e2600cfffffcfbfefffdfcfffdfcfffefdfffe
1774*fffefffefe83ff18fefffdfffdfdfffdfffffcfdfffefbfdff61d8e93e0a088d0d870036010205
1775*07090a0b0e1012131417191b1c2f3c3f4142434547494a4c4d4f51535452443e41424346484a4c
1776*4d4e51535556575a5c5e5f606381651b61ae6800d6360029fffdfbfefffdfcfffdfcfffefdfffe
1777*fffefffefe83ff18fefffdfffdfdfffdffff009f0e09c7cf00ebd9ce7c09098d0d850037010305
1778*06090b0c0d0f12141516191b1d1f201e1f22232526292b2c2e2f32343637393a40434446474a4c
1779*4e4f5153555758595c5e6061636482651b61ae6800b4fad700ac3f2b28df2a00fffdfcfffefdff
1780*fefffefffefe83ff18fefffdff7f0094ce35227f16efc8b159a2938c8f4e08098d0d8300360203
1781*0407090b0d0e1011141617181a1d1f21212426282a2b2c2f31333435383a3c3e3f404345474849
1782*4c4e4f51525557595a5c5d60626385651b61ae68009fb18f92bb89b4d0f827ab5d932bb24800ff
1783*fefffefffefe83ff1800df69d7a81de3b2a4a59d93877484e7827b6e6e3107098d0d8100360103
1784*0607080b0d0f1112131618191b1c1f21222425282a2c2d2e3033353637393c3e3f40434547494a
1785*4b4d5052535457595b5c5e60626487651b61ae6800918c707d8a227f778796969da7baef2be33f
1786*6e15fffffefe81ff531200ba03ccb2b4b2a29b8879695a4a373ab86661535218060a8d0c000001
1787*030608090a0d0f11121316181a1c1d1e21232526272a2c2e2f31323537393a3b3e404142444749
1788*4b4c4d4f52545556585b5d5e5f626489657161ae6800866e56636fe4333b4a5a697c8b9ba2b5b4
1789*b5d5190433bffeffff007f19d0cccdc3b1a18f7f6f5d4d3b281806fbc55e5044410a060a8d0d00
1790*0305080a0b0c0e11131415171a1c1e1f2022252728292b2e3031323537393b3c3d404244454649
1791*4b4d4e5051545657595a5d5f6062648b656f61ae68007f5d46516bdefb091b2b3b4d606f8292a4
1792*b4c7cdc3d855aa7fff45bbece6d3c0ae9e8f7c69574734250f00efdcd27949403c05050a8e1003
1793*080a0c0e0f1013151718191c1e2021232427292a2c2d3032333436393b3d3e4041444647484b4d
1794*4f50515456585a5b5c5f6162648d656d61ae68007c55404e8fd8dfef03152537475d6c7c8fa1b4
1795*c3d3e6def0aeff9e00d5ddd6c3b19e8f7f6c5a4a37281503f2dfcfb96944410c060a9012050a0c
1796*0e0f1013151718191c1e2021222527292b2c2d30323335363a3c3d3e4042454748494b4e505152
1797*5457595a5c5d5f62638f646d60ae6900805a457fc5d0e3f206182b3b4a5d6f7f92a4b4c3d6e0d0
1798*6355ffff000800c4c3c1b2a798887663534431220f00ecdfcd7f5b1d06099722101617181a1d1f
1799*2022232527292a2c2e3032343536393b3d3e3f42444647484b4d4f5052535658595b5c5f616263
1800*6567696a6a8269896a6a6966b66b00867e93d5dcef0312253444576976889babb5bcbacf1dbb75
1801*fefffffefe00f8f213d7afa6a39f9085766657473728180c00d368170177988d8f8f9192939495
1802*9696979899999b9c9d9e9e9fa1a1a2a3a4a4a6a6a7a8a9a9ababacadaeafb0b0b1b2b3b4b5b5b6
1803*86b789b81ab7babc3300b1180309182837475a697988909f9fa6b2e33533000080fe01ffff80fe
1804*00fd800015f2685f0cdcae988e8a7f7a6b5f57474d778500052f33833281338134833583368437
1805*83389a39163b1b0014ea5e4a5a5f6e7a828d9190b7e810a3ad8ce80083fe01ffff80fe80fd14fc
1806*fdfeaa00e8e96368bc33fbdcb69a7c7888828105c500153379bc7b7f9abedf0045eaa8c3838c5f
1807*7ffdfafcfdfd82fe01ffff80fe80fd08fcfdfdfbfefcf9fcfe80002835e3dbbdef47f2de498d85
1808*7c603b200d0400fffaf5f2ede8e5e0ddd8d5d0cdcac8c4c3c1bebcbbbbb980b700b680b736b9bb
1809*bbbcc0c1c3c8c6caced2d5d8dde2e5e8edf3f7fa0000040f224468808a87f1815d561f00439c00
1810*c6bf00fefcf9fcfbf9fcfafcfdfd82fe01ffff80fe80fd11fcfdfdfbfefcf9fbfdf9f8fdfbf9f7
1811*fcfffc8000207f66eef06707b3d8ea662100e6cccbc3b1aaa79e95918b88817a7773716f6d6b6b
1812*8369366b6d6f7375777c81888d91979ea7abb3c6cdd1ee022d7f120024ef94df75bf00fe0000fc
1813*fdf7f7fafdfaf7f9fdfbf9fcfbf9fcfafcfdfd82fe01ffff80fe80fd35fcfdfdfbfefcf9fbfdf9
1814*f8fdfbf9f7fbfefbfaf7f5f9fdfbf9f8f7f6fbff0075005b9bcc35e6c9af7b595758503e30302b
1815*262121242482213724242121262b303341595d5c5e89afd4ef53f6f9b3743800fdf5f6f6f8f9fb
1816*fdfaf5f8f9fbfcf7f7fafdfaf7f9fdfbf9fcfbf9fcfafcfdfd82fe01ffff80fe80fd34fcfdfdfb
1817*fefcf9fbfdf9f8fdfbf9f7fbfefbfaf7f5f9fdfbf9f8f7f6fafefafefcf9fefd55009995b3c305
1818*5fea98452f1e0d09f5e884e536e800090d1a3370aa0c7825061538005f00fcfef9fbfefbfcf5f6
1819*f6f8f9fbfdfaf5f8f9fbfcf7f7fafdfaf7f9fdfbf9fcfbf9fcfafcfdfd82fe01ffff80fe80fd34
1820*fcfdfdfbfefcf9fbfdf9f8fdfbf9f7fbfefbfaf7f5f9fdfbf9f8f7f6fafefafefcf9fdfcfafefd
1821*fbf9fc5500d4aa72ce55d708c0f2840c07f21d08dff4ced4c880002bfdfafcfdfbf9fbfdf9fbfe
1822*fbfcf5f6f6f8f9fbfdfaf5f8f9fbfcf7f7fafdfaf7f9fdfbf9fcfbf9fcfafcfdfd82fefffffcff
1823*b5a30ecc4ef25c1600ded8e2011665134eccb5a300ffb2a307004e6bf5bda59e9e829d079e9fa6
1824*bdf5759900b2a300ffb0a30a0c4ec6a29ea2a7b2bfc8cf80d00acfc7bfb2a7a19da3cf59a0b0a3
1825*00ffaea31cbefba79ea3b3cde1f1f9fbfcfefefdfefefcfbf9f1dfcab3a29eaa065faea300ffac
1826*a30c2701a19eabc9e9fafdfbf7f5f480f300f280f30cf4f5f7fbfef9e6c7a99ea50bc3aca300ff
1827*aaa30b0065ad9eabcff3fefaf5f3f28af30af2f3f5fafef3cfaa9eb386aba300ffa9a30960e09f
1828*a3c8f3fef8f3f290f309f2f3f8fff1c6a2a0ecc8a9a300ffa8a3066ab89fb3e6fef898f306f9fe
1829*e4b09ebecaa8a300ffa7a306c6a69fc5f7fcf49af306f4fdf5bf9eabe1a7a300ffa6a305b8a3a1
1830*d2fdf99ef305f9fdcea0a3c6a6a300ffa5a305cca3a4dbfef6a0f305f7ffd4a0a4e7a5a300ffa4
1831*a30550a5a0dbfff59ef381f405f6ffd4a0abcaa4a300ffa3a305c3b2a0d3fef48ef382f287f384
1832*f405f6ffce9fb97aa3a300ffa2a30500da9ec6fef68cf303f4f6f9fc80fd03fcf9f6f482f387f4
1833*05f7fdc19de900a2a300ffa2a304629fb4f8f88bf310f7fdfbf4e6dbd3ced3dbe8f5fcfcf6f3f3
1834*89f404faf5b0a07fa2a300ffa1a30427a9a4e9fc8af312f7fdf5d9bdaaa3a09e9c9ea0a4aabedb
1835*f6fef78af404fde4a2af39a1a300ffa1a304f49ecbfff488f316f4fcf7d1ac9f9fb0e125465646
1836*1fdaae9e9faed5f9fcf588f404f5fec69e06a1a300ffa0a305f1a0adf5f7f287f308f5fee5b19e
1837*a3f3060084a30886e1eda09eb4e8fff688f404f9f2aba5c3a0a300ffa0a303f09ed5fe88f306f6
1838*fed6a39fe5f18aa306bedc9fa4d8fef688f403fed09e06a0a300ff9fa30499a2aef6f787f305f5
1839*fdcc9fa57f8ea30559a1a0d4fef685f406f5f5f9f3aaa6e79fa300ff9fa303309ecdfe87f305f4
1840*fed39fac5090a304f2aaa0d8ff83f482f503fec99e569fa300ff9ea3053fbda5ecf9f286f304fc
1841*e4a2a55892a306f8a3a4e8fcf4f485f504fbe7a2c7669ea300ff9ea304919fb9fbf486f304f7f6
1842*b09f7f94a3055f9fb3f8f7f485f504f6f9b3a03d9ea300ff9ea303469ed1fe87f303fed09dea95
1843*a30400da9ed4fe87f503fecd9e6e9ea300ff9da30400dfa3e6fa86f304f8f3aba5c396a304f1a1
1844*aef6f886f503fce1a1f19ea300ff9da3047fb2aaf5f686f303fdd59e0198a303ee9fdafe86f504
1845*f8f3a7b63f9da300ff9da3044e9fb9faf485f304f4fbba9e7d98a3040c9fbcfcf685f504f7f9b4
1846*a4e79da300ff9da303f89ec5fc86f304f7f0a7bb3f98a30487b1aaf4f786f503fbbf9f509da300
1847*ff9da3038a9dcdfd83f380f403fbe1a2f79aa303e2a3e6fa86f503feca9db89da300ff9da30446
1848*9ed5fdf280f382f403fdd59f419aa30323a0dafd84f505f6f6ffd09d7f9da300ff9da30543a0da
1849*fcf2f384f403ffcf9d9e9aa303629ed1ff82f581f603ffd49e439da300ff9da30443a0d9fcf385
1850*f403ffcf9da69aa305a29dcffff5f584f603fedaa0439da300ff9da30343a0d9fd86f403ffcf9d
1851*a29aa304a29dcffff585f603fedaa0439da300ff9da30343a0d9fd86f403ffcf9da29aa303a29d
1852*d0ff86f603fedaa0439da300ff9da30343a0d9fd86f403ffcf9da29aa303a29dd0ff86f603feda
1853*a0439da300ff9da30343a0d9fd86f403ffcf9da29aa303a29dd0ff86f603fedaa0439da300ff9d
1854*a30343a0d9fd86f403ffcf9da29aa303a29dd0ff86f603fedaa0439da300ff9da30343a0d9fd86
1855*f403ffcf9da29aa303a29dd0ff86f603fedaa0439da300ff9da30343a0d9fd86f403ffcf9da29a
1856*a303a29dd0ff84f605f7f7ffdaa0439da300ff9da30343a0d9fd85f404f5ffcf9da29aa303a29d
1857*d0ff82f681f703ffdaa0439da300ff9da30343a0d9fd82f481f503ffcf9da29aa303a29dd0ff80
1858*f683f703ffdaa0439da300ff9da30343a0d9fd80f483f503ffcf9da29aa304a29dd0fff685f703
1859*ffdaa0439da300ff9da30453a0d9fdf385f503ffcf9dc29aa303c29dd0ff86f703ffdaa0539da3
1860*00ff98a308e758373f61fba0d9fd86f504ffcf9d2158983f0458219dd0ff86f709ffdaa0fb613f
1861*3f370e6697a300ff96a3023f1ba8829f029cd8fd86f502ffcd999c9f0299ceff86f702ffd99c82
1862*9f02a1c99996a300ff96a3024ea2aa82bc02bae3fc86f502fddcb89cbc02b8ddfe86f702fde4ba
1863*81bc04bdb5a2be1f95a300ff95a30400c1a4e7fd82fa01f9f786f500f885fa98fb00f986f700f9
1864*83fb04fcfbbe9fe795a300ff95a304cca9a8f7f882f68af582f690f786f88af701f8f881f903ff
1865*d19d9695a300ff95a304ccaaa8f5f791f591f695f783f803ffd09da295a300ff95a304ccaaa8f5
1866*f78ef591f695f786f803ffd09da295a300ff95a304ccaaa8f5f78cf591f695f788f803ffd09da2
1867*95a300ff95a304ccaaa8f5f78af590f696f78af803ffd09da295a300ff95a304ccaaa8f5f788f5
1868*90f696f78cf803ffd09da295a300ff95a304ccaaa8f5f786f590f696f78ef803ffd09da295a300
1869*ff95a304ccaaa8f5f784f590f695f791f803ffd09da295a300ff95a304ccaaa8f5f781f591f695
1870*f793f803ffd09da295a300ff95a306ccaaa8f5f7f5f591f695f795f803ffd09da295a300ff95a3
1871*05ccaaa8f5f7f590f695f796f804f9ffd09da295a300ff95a304ccaaa8f6f88ff689f701f9fd82
1872*ff02fdfaf880f794f881f903ffd09da295a300ff95a304ccaaa8f6f88cf689f70ef8fdfef7e7d9
1873*d0d0cfd4e0f2fcfffb93f883f903ffd09da295a300ff95a304ccaaa8f6f88af689f712f8fefde5
1874*c5ada39f9d9d9c9ea2a7bad7f5fffb8ff885f903ffd09da295a300ff95a304ccaaa8f6f888f68a
1875*f714f9ffe8bca29eaadc2678a69e50fabb9f9eacd3fafe8cf887f903ffd09da295a300ff95a304
1876*ccaaa8f6f886f68bf707fbfccea39ec686c884a3080061fba39eb6eefff988f889f903ffd09da2
1877*95a300ff95a304ccaaa8f6f884f68cf706fbf8bf9eac6e0089a306cad89ea9e5fff985f88bf903
1878*ffd09da295a300ff95a304ccaaa8f6f882f68df705fafabb9dc44e8ca3050026a0a7e5ff82f88e
1879*f903ffd09da295a300ff95a304ccaaa8f6f880f68ef705f8fec69dc6668fa306659fabf0fdf8f8
1880*90f903ffd09da295a300ff95a305ccaaa8f6f8f690f704ffdea0b63991a305169eb9fbfaf890f9
1881*03ffd09da295a300ff95a304ccaaa8f6f990f704fbf5ae9f1a92a30424cd9fd9ff91f903ffd09d
1882*a295a300ff95a304ccaaa8f6f990f703ffd19efa94a3097da1aff8f9f7f8f8f9f982fa86f903ff
1883*d09da295a300ff95a304ccaaa8f6f98ff704f9f8afa37195a30fe6a0d9f1e2e4e7e8eaeceff1f4
1884*f6f8f984fa03ffd09da295a300ff95a304ccaaa8f6f98ef704f8fee3a1e196a304ec9fbef4e381
1885*e280e30ee4e5e7eaedf0f4f8fafbfbffd09da295a300ff95a304ccaaa8f6f98bf707f8f9faf8fe
1886*cb9e7896a30586aeabf0e7e383e401e5e580e409e5e6e7eaeff2fed09da295a300ff95a304ccaa
1887*a8f6f988f70af8f9f9f6f0eae4f0b99fe397a304dba4e3ece380e482e585e604e5f6ce9da295a3
1888*00ff95a304ccaaa8f6f986f70cf9f8f6eee6dfdcdbdeefb0a75c97a30516a1d8f0e3e482e582e6
1889*83e703f7ce9da295a300ff95a304ccaaa8f6f983f70ff8f8f5eee5dedbdbdcdddce1eea8b70097
1890*a30446a0d5f1e481e581e682e780e804e7f7ce9da295a300ff95a304ccaaa8f6f980f708f8f8f7
1891*f0e7dfdbdadc80dd06dedce3eda7bf2497a30648a0d6f2e4e5e581e682e783e803f8ce9da295a3
1892*00ff95a30eccaaa8f6f9f7f8f8f5ece2dcdadbdc80dd81de04e1eeacabcc97a3042ea0d7f2e481
1893*e682e782e880e903f8ce9da295a300ff95a30bccaaa8f6faf9f3e9dfdbdbdc81dd83de04e0f0b6
1894*a3da97a306f3a3e0f0e5e6e682e782e882e903f8ce9da295a300ff95a309ccaaa9f7f4e7dedbdb
1895*dc81dd82de81df03f1c39ec696a30524baa6ecebe682e782e882e905eae9f8ce9da295a300ff95
1896*a307ccaba9f0e0dadcdc81dd82de82df04deefd7a00196a304f19fb7f4e881e782e881e981ea04
1897*e9f8ce9da295a300ff95a305ccaba8ebdfdc81dd82de82df07e0e0dfe7eca8aebf95a306189fd1
1898*f5e6e7e782e881e984ea03f9ce9da295a300ff95a304ccaba8ede080dd82de82df82e004e1f4c3
1899*9e4694a3050faaa8ecede681e882e982ea81eb03f9ce9da295a300ff95a305ccaba8ede0dd82de
1900*81df82e080e105e0ebe7a5aec393a303069dc9f881e882e982ea81eb05ececf9cf9da295a300ff
1901*95a304ccaba8ede181de81df82e083e105e3f5ca9ee17f91a306cc9faef0eee7e882e982ea82eb
1902*80ec03facf9da295a300ff95a305ccaba8ede1de82df82e082e180e205e1e9f3b49e1d90a30661
1903*aba1dff5e7e881e983ea81eb00ec81ed03fbcf9da295a300ff95a304ccaba8ede181df82e082e1
1904*82e207e3e2efe9ac9f18008da30630ab9fd1f9eae880e983ea04ebebecebec80ed06eeedeefbcf
1905*9da295a300ff95a306ccaba8ede2dfdf82e082e182e282e305f3e8ac9eda998aa3092456a3a1ce
1906*f8ece8e9e983ea01ebeb80ec80ed80ee05efeffccf9da295a300ff95a304ccaba8ede282e082e1
1907*81e282e381e406f2ecb79ea923b687a30773ce9fa7d8faece884ea01ebeb80ec81ed80ee06efef
1908*f0fccf9da295a301ffa294a304ccaba8eee380e082e181e282e384e405f0f5cea7a23787a306ff
1909*a1b8e9f7ebe881ea81eb80ec81ed00ee80ef81f003fccf9da295a303ffa69d9f92a305ccaba8ee
1910*e3e081e182e282e382e481e505e4ebfac39e3787a30506a3e2f8e9e980ea81eb80ec81ed00ee80
1911*ef80f006f1f0f1fdcf9da293a307a1a1ffefd4bb9ba290a304ccaba8eee480e182e282e382e482
1912*e506e6e6e5f5c59e3f87a30606a3e0f3e9eaea82eb80ec80ed00ee80ef80f080f105f2f2fecf9d
1913*a291a303a19ea8a980ff03fdd0a49d8fa305ccaba8eee4e182e282e382e482e581e604e7f5c49e
1914*3f87a30406a3e0f3e982eb80ec00ed80ee80ef81f080f180f203fecf9da28fa305a29faad1f7f9
1915*82ff03e6b99da28da304ccaba8eee481e282e382e481e582e680e703f5c49e3f87a30406a3e0f3
1916*ea80eb03ecedeced80ee81ef80f000f180f280f304f4ffcf9da28ea303a19fbff886ff03fdbf9f
1917*a18ca306ccaba8efe5e2e282e382e481e582e682e703f6c49e3f81a300a282a30606a3e1f4ebeb
1918*ec80ed81ee80ef03f0f1f0f180f281f305f4f4ffcf9da28da3069da3e2fffffefe83ff05feffff
1919*e2a3a08ba304ccaba8efe581e382e482e582e683e704e8f6c49e3f80a302a1a2a181a30406a3e1
1920*f4eb80ed81ee03eff0eff080f180f281f300f480f503ffd09da28ca3029db9e680ff01fefe83ff
1921*06fefffeffe3a79f8aa306ccaba8efe6e3e382e482e582e682e781e80af6c49e3fa3a3a0a3e3c2
1922*9c80a30606a3e1f4eceded80ee00ef80f080f181f280f300f482f503ffd09da28aa309a29abefd
1923*fffffefffefe83ff08fefffdfffff7be9ca288a305ccaba8efe6e381e482e582e682e782e814e9
1924*f6c49e3fa3a0a3e4fffcbe9ca3a306a3e1f6ecee80ef80f080f181f200f380f480f580f604f7ff
1925*d09da289a30aa0a5cffcfffefffefffefe83ff09fefffdfffdfffdbe9fa187a304ccaba8efe680
1926*e482e582e682e781e881e906f6c49e3fa0a3e480ff0afdbe9ca306a3e1f6eeefef80f080f181f2
1927*00f380f480f581f605f7f7ffd09da288a30ba0a2e3fffefffefffefffefe83ff0afefffdfffdfd
1928*ffffe2a3a086a305ccaba8efe6e482e582e682e781e882e906eaf7c49e35a3e482ff07fdbe9d06
1929*a3e1f6ee80f081f180f200f380f480f581f607f7f8f7f8ffd09da287a30c9fa7e2fffefdfffeff
1930*fefffefe83ff0bfefffdfffdfdfffeffe4a2a085a304ccaba8efe781e581e682e782e882e980ea
1931*04f7c49d57e484ff08fdb900a3e1f7eff0f080f100f280f380f481f580f600f780f805f9f8ffd0
1932*9da286a30d9cbef7fffffefdfffefffefffefe83ff0cfefffdfffdfdfffdffffe2a79f84a306cc
1933*aba8f0e7e5e581e682e782e882e982ea04f7c49890388512096606a2e2f8eff1f2f1f280f381f4
1934*80f500f680f780f880f904faffd09da284a30fa29abdfdfffcfffefdfffefffefffefe83ff07fe
1935*fffdfffdfdfffd80ff02f7bf9c83a304ccaba8f0e881e682e782e882e982ea08ebebf8c59ba072
1936*000080fb0a00000c7bfc9fe2f8f1f2f281f380f403f5f6f5f680f781f880f905fafaffd19da283
1937*a310a0a5cffbfffdfcfffefdfffefffefffefe83ff0efefffdfffdfdfffdfffffcfffdbe9c82a3
1938*06ccaba8f0e8e6e682e782e882e983ea07ebebecf8c59c75d984870695cceea0e2f9f281f303f4
1939*f5f4f580f681f780f80af9faf9fafbfafbffd19da282a311a0a3e4fffdfffdfcfffefdfffefffe
1940*fffefe83ff10fefffdfffdfdfffdfffffcfdfffcbc9aa280a304ccaba8f0e882e782e882e983ea
1941*09ebebecebecf8c59d557c8434094273e3a2e2faf2f3f3f480f580f681f703f8f9f8f980fa80fb
1942*05fcfbffd19da281a312a0a2e3fffdfcfffdfcfffefdfffefffefffefe83ff18fefffdfffdfdff
1943*fdfffffcfdfffffacfa49b9da1bbaba8f0e980e782e881e982ea03ebeaebeb80ec07ededf9c59e
1944*371ce282df08e2eb1bd9a3e3faf4f480f580f681f700f880f980fa80fb80fc1bfdffd19da2a3a2
1945*a19fa7e1fffffdfcfffdfcfffefdfffefffefffefe83ff19fefffdfffdfdfffdfffffcfdfffefc
1946*ffe6ceceabbbaaa8f0e9e782e881e982ea81eb80ec81ed05f9c59f0d916f826c096f7695cba4e3
1947*faf4f5f580f681f700f880f980fa81fb80fc1cfdfdffd19d9f9ca3a5bff7fffefffdfcfffdfcff
1948*fefdfffefffefffefe83ff0ffefffdfffdfdfffdfffffcfdfffefbfc80ff05fabfaaa8f0ea80e8
1949*82e982ea82eb80ec80ed06eeeff9c49dabaf82ae08adaeaeb0a5a2e2fbf581f680f700f880f980
1950*fa81fb03fcfdfcfd80fe1affd19cbccce5f9fffefbfefffdfcfffdfcfffefdfffefffefffefe83
1951*ff0ffefffdfffdfdfffdfffffcfdfffefbfc80ff060008ada7f1eae882e982ea82eb80ec0aedee
1952*edeeefeeeffac7a1a687a703a5a5e4fb80f600f780f880f981fa80fb00fc80fd80fe80ff03d197
1953*c20080ff12fcfbfefffdfcfffdfcfffefdfffefffefffefe83ff18fefffdfffdfdfffdfffffcfd
1954*fffefbfcffff786f77aba7f1eb81e983ea81eb80ec00ed80ee80ef04f0f0f7f1ea81eb86ec03f8
1955*f9f6f780f881f980fa00fb80fc80fd80fe82ff19d1975d600cfffffcfbfefffdfcfffdfcfffefd
1956*fffefffefffefe83ff1afefffdfffdfdfffdfffffcfdfffefbfdff61d8e058aba7f1ebe9e983ea
1957*81eb00ec80ed80ee81ef80f003f2f5f6f680f781f880f901fafb83f880f900fa80fb80fc81fd01
1958*fefe84ff19d19853190029fffdfbfefffdfcfffdfcfffefdfffefffefffefe83ff18fefffdfffd
1959*fdfffdffff009f0e09c7cf00ebd9c88ea8a7f1eb83ea01ebeb80ec80ed81ee80ef00f080f181f2
1960*80f380f401f5f580f680f780f803f9faf9fa80fb81fc80fd00fe87ff19d19917e4d700ac3f2b28
1961*df2a00fffdfcfffefdfffefffefffefe83ff18fefffdff7f0094ce35227f16efc8b159a2938c89
1962*5ea7a8f1ec81ea01ebeb80ec81ed80ee00ef80f080f181f280f300f480f580f681f780f800f980
1963*fa80fb81fc03fdfefdfe89ff19d19a029e8f92bb89b4d0f827ab5d932bb24800fffefffefffefe
1964*83ff1c00df69d7a81de3b2a4a59d93877484e7827b6e6942a5a8f1eceaeaebeb80ec81ed03eeef
1965*eeef80f080f181f200f380f480f580f681f700f880f980fa80fb81fc00fd80fe8bff19d19bf378
1966*707d8a227f778796969da7baef2be33f6e15fffffefe81ff1c1200ba03ccb2b4b2a29b8879695a
1967*4a373ab86661534c28a5a8f2edebeb80ec81ed00ee80ef80f080f181f200f380f480f580f681f7
1968*00f880f980fa81fb80fc00fd80fe8dff38d19ce85b56636fe4333b4a5a697c8b9ba2b5b4b5d519
1969*0433bffeffff007f19d0cccdc3b1a18f7f6f5d4d3b281806fbc55e50443c1aa4a8f2ed81ec80ed
1970*00ee80ef80f081f180f200f380f480f581f680f700f880f980fa81fb03fcfdfcfd80fe8fff3ed1
1971*9ce04646516bdefb091b2b3b4d606f8292a4b4c7cdc3d855aa7fff45bbece6d3c0ae9e8f7c6957
1972*4734250f00efdcd27949403618a4a8f2eeececedeeedee80ef81f080f103f2f3f2f380f481f580
1973*f600f780f880f981fa80fb00fc80fd80fe91ff3ad19cdf42404e8fd8dfef03152537475d6c7c8f
1974*a1b4c3d3e6def0aeff9e00d5ddd6c3b19e8f7f6c5a4a37281503f2dfcfb969443d1da4a8f2eeed
1975*ed80ee80ef80f080f101f2f280f380f480f503f6f7f6f781f880f980fa00fb80fc80fd80fe93ff
1976*3ad19ce148457fc5d0e3f206182b3b4a5d6f7f92a4b4c3d6e0d06355ffff000800c4c3c1b2a798
1977*887663534431220f00ecdfcd7f562ea5a8f5f1efef80f080f101f2f280f381f480f503f6f6f7f7
1978*81f880f980fa80fb01fcfc80fd80fe97ff38d29be96a93d5dcef0312253444576976889babb5bc
1979*bacf1dbb75fefffffefe00f8f213d7afa6a39f9085766657473728180c00cd74b1a3e1fa80f885
1980*f984fa80fb85fc82fd84fe9aff18faba9e18fb0309182837475a697988909f9fa6b2e335330000
1981*80fe01ffff80fe00fd800014f2685f0cdcae988e8a7f7a6b5f57474a620f9fa6ba87bb8dbc9dbd
1982*88bc16bdb09ebb0e554a5a5f6e7a828d9190b7e810a3ad8ce80083fe01ffff80fe80fd14fcfdfe
1983*aa00e8e96368bc33fbdcb69a7c78828213ab809e019f9f8b9e019d9e9e9d899e1b9f9f9e9e9da1
1984*d0caa87b7f9abedf0045eaa8c3838c5f7ffdfafcfdfd82fe01ffff80fe80fd08fcfdfdfbfefcf9
1985*fcfe80002835e3dbbdef47e6c685fcf5e1ab7c5c453b3a36352f2c2924211c1614110c09060401
1986*00fffaf8f6f6f584f336f5f6f6f8fbff00040406090e1116191e2124292f323539383e495f85b9
1987*e8f5fa49853e561f00439c00c6bf00fefcf9fcfbf9fcfafcfdfd82fe01ffff80fe80fd11fcfdfd
1988*fbfefcf9fbfdf9f8fdfbf9f7fcfffc81001e66ddb438e292c1d85513f2dac0bfb7a49e9b928886
1989*807c756f6b6766646260845e3660626266696b71757c82868b929b9ea7babfc3e1f6216d00e605
1990*bf5f9f75bf7ff90000fcfdf7f7fafdfaf7f9fdfbf9fcfbf9fcfafcfdfd82fe01ffff80fe80fd35
1991*fcfdfdfbfefcf9fbfdf9f8fdfbf9f7fbfefbfaf7f5f9fdfbf9f8f7f6fbff0075005b9bcc35e6c9
1992*af7b595758503e30302b262121242482213724242121262b303341595d5c5e89afd4ef53f6f9b3
1993*743800fdf5f6f6f8f9fbfdfaf5f8f9fbfcf7f7fafdfaf7f9fdfbf9fcfbf9fcfafcfdfd82fe01ff
1994*ff80fe80fd34fcfdfdfbfefcf9fbfdf9f8fdfbf9f7fbfefbfaf7f5f9fdfbf9f8f7f6fafefafefc
1995*f9fefd55009995b3c3055fea98452f1e0d09f5e884e536e800090d1a3370aa0c7825061538005f
1996*00fcfef9fbfefbfcf5f6f6f8f9fbfdfaf5f8f9fbfcf7f7fafdfaf7f9fdfbf9fcfbf9fcfafcfdfd
1997*82fe01ffff80fe80fd34fcfdfdfbfefcf9fbfdf9f8fdfbf9f7fbfefbfaf7f5f9fdfbf9f8f7f6fa
1998*fefafefcf9fdfcfafefdfbf9fc5500d4aa72ce55d708c0f2840c07f21d08dff4ced4c880002bfd
1999*fafcfdfbf9fbfdf9fbfefbfcf5f6f6f8f9fbfdfaf5f8f9fbfcf7f7fafdfaf7f9fdfbf9fcfbf9fc
2000*fafcfdfd82fefffffcffb53d0e0039b880675e5250545f6783c43900b53d00ffb23d070039865a
2001*42393433823207333439425a895500b23d00ffb03d0a7f7b4738333a455872839080910a908270
2002*59453933384b7fb6b03d00ffae3d1c045d3a343d5c8cb0cdd7d8d7d8d5d3d5d9d7d8d8cdae865a
2003*3c343c613fae3d00ffac3d0e895f38344c85bedadacec0b7b4b1b080af0eb0b2b4b7c0cfdad9ba
2004*8148343963c3ac3d00ffaa3d0e00833e344c91d1decab8b1afb0b1b184b20db1b1b0afb1b9ccdd
2005*d0914a344090ab3d00ffa93d0a9e53363e82d2dcc3b2afb18eb20ab1afb2c2dccd7f3b375724a9
2006*3d00ffa83d08e443345abae1c4b1b08cb201b1b280b10bb0afafacaec4dfb454334508a83d00ff
2007*a73d07a83a367bd9d4b5af88b201b1b280b103b0b0afaf80ae00ad80ac07a8afd1d271343db1a7
2008*3d00ffa63d07a2393894e2c6afb186b280b103b0afb0af80ae00ad80ac00ab81aa08a9a8a6c0dc
2009*8b383aa8a63d00ffa53d06aa393ea4e1bdaf80b201b1b280b100b081af07aeaeadadacacabab80
2010*aa01a9a980a880a707a6a2b3dc96383ab7a53d00ffa43d07da3a39a6e1b8afb280b100b080af02
2011*aeaead80ac04abaaabaaaa80a980a805a7a7a6a6a5a580a407a39faedb95383d08a43d00ffa33d
2012*09c3413796e0b6aeb0afaf80ae00ad80ac07abaaaaa9a7a6a5a581a482a580a401a3a380a208a1
2013*a19dabd98a354466a33d00ffa23d080050347ce1b9abaead80ac01abab80aa10a9a9a6a6abb4bf
2014*c7cbcacac6bcafa6a1a080a201a1a180a00a9f9f9e9e9aacd771335600a23d00ffa23d0782365c
2015*d7bfa9abab80aa80a980a814a5a6b4ccd4ccb4a1948c94a3b6cdd2c9af9e9d9f9f819e0a9d9d9c
2016*9c9b97b5cb53378da23d00ffa13d05893d3fbccda780a981a818a7a7a6a4a2b4d2ce9e6b493d38
2017*343234383e4a6ea1cdcdac9a819c009b809a0899999795c3ae3b40eea13d00ffa13d095a3487da
2018*aba7a8a7a7a680a51ca4a4a1a6c9d28f4c35353e516a787e78684e3e35365197d1c29c97999981
2019*98809705949ad17b3461a13d00ffa03d05173750d0baa380a580a40ca3a3a29facd6b45533395a
2020*bf55843d0a28b15637345ab5d0a0949780960195958094058facc44a3964a03d00ffa03d045835
2021*97d2a281a30ca2a2a1a1a09cabd7983c3755178a3d150451363e9ad2a291949493939292919190
2022*8fc88a3560a03d00ff9f3d0555384fcfb19f80a100a0809f079e9ba9d685363b8d8e3d097f3837
2023*92d19c8f9291918090078f8e8ba3c2493bd09f3d00ff9f3d04703489d09e809f019e9e809d069b
2024*9fd293353eda903d09b83c3799cb918d8f8e8e808d068c8b8bc77d357e9f3d00ff9e3d057f4440
2025*bdb79a809d009c809b069997c5af3b3add923d0aba393eb2b98a8c8c8b8c8b808a0585abb03d49
2026*009e3d00ff9e3d08f23764d1a19a9b9b9a8099069895abcb54378d943d12813658c89c878a8a89
2027*89888887858ec65937339e3d00ff9e3d0478348ec79781988097059696cc8b3356953d12005035
2028*90c186878786858685858482bc8334879e3d00ff9d3d1200513db1b5939797969695959491a7c5
2029*4b3a64963d05173850c396828184078383827da7a23b579e3d00ff9d3d11003f4ac8a293959493
2030*939292918fc193345f983d04583699b37f8082098180807f7d92ba45427f9d3d00ff9d3d063936
2031*63c9969292819106908f93ca6435eb983d04c13668c283807f817e057c82c05939d09d3d00ff9d
2032*3d08ba3578c59190908f8f808e058b9fbd44437f983d07874048bd8e7b7e7d807c067b7a7cb86c
2033*36da9d3d00ff9d3d05913387c08c8e818d068c8c87aea53b5a9a3d05533ea99c787b807a077979
2034*7877b27d34a29d3d00ff9d3d05783593b7878c808b078a8a8984b59336769a3d05693897a57479
2035*80780777777672ae86338d9d3d00ff9d3d0475389bb4858089088888878683ba8733999a3d0482
2036*3489ab72807600758074046ea48c35779d3d00ff9d3d0575389ab3828780860785858481b98833
2037*9c9a3d059a3385af717480738072046ca29538759d3d00ff9d3d04753899b1808184078383827f
2038*b888339a9a3d059a3485ae6f72807180700469a09438759d3d00ff9d3d04753899af7e80820881
2039*80807f7cb687339a9a3d049a3485ad6d806f006e806d04669f9338759d3d00ff9d3d04753898ad
2040*7b807f817e047bb587339a9a3d069a3484aa6a6d6d816c056b649c9338759d3d00ff9d3d107538
2041*98ac797e7e7d7d7c7c7b78b387339a9a3d109a3484a9686b6b6a6a696968629b9338759d3d00ff
2042*9d3d06753897aa777c7b807a06797976b186339a9a3d069a3484a866686880670666665f999238
2043*759d3d00ff9d3d06753896a8757979807806777773b086339a9a3d069a3483a663666680650664
2044*645e989138759d3d00ff9d3d05753896a6727780760775747471af86349a9a3d109a3483a46264
2045*6463636262615b959138759d3d00ff9d3d04753896a56f807408737372726fad85349a9a3d049a
2046*3482a25f80610860605f5f59949038759d3d00ff9d3d04753896a46d807208717170706cab8434
2047*9a9a3d049a3481a15c805f085e5e5d5d56939038759d3d00ff9d3d10753895a26b70706f6f6e6e
2048*6d6aaa84349a9a3d109a34819f5a5d5d5c5c5b5a5a53908f38759d3d00ff9d3d047b3894a06880
2049*6d806c056b68a88434a69a3d07a634819e575a5b5a815904518f8f387b9d3d00ff983d16d0ddd1
2050*d4e15b38939e666c6b6b6a6a696965a683346add98d417dd6a34819c55595858575756564e8d8e
2051*385be1d4d4d12100973d00ff963d027f683c81370f3632919d636969686867676663a5802e8e37
2052*8b38052e7d9b52565680550654544c8c8c32378238014a55963d00ff963d047b3b486666806504
2053*62a59a606780660765656461a3985f65826401656582640165658b640763635d95995054548053
2054*055251498a9f6081630464563c46bf953d00ff953d0500463fa1b1a680a704a6aa856165806405
2055*6362625f89a682a281a182a0829f819e809d819c809b039f7e5052805105504f4f49739d809806
2056*979698ac6138b7953d00ff953d10003d47b5716566666564646363626261618060825f005e805d
2057*015c5c805b015a5a805901585880570156568155005480530652525150504f4f804e0e4d4c4d4c
2058*4b4c4c4b4a4a46947f3596953d00ff953d08003d46b06b616262618260805f805e015d5c805b00
2059*5a805980580157578056005581548053095252515150504f4f4e4e804d044e4d4d4c4c804b014a
2060*49804807474746428f7d359a953d00ff953d07003d46af695e6060815f0d5e5e5d5d5c5c5b5b5a
2061*5a595a59598058005780568055015454805301525280510050804f804e004d814c014b4b804a03
2062*49484948804780460545418e7d359a953d00ff953d07003d46ae675d5e5e805d005c805b015a5a
2063*8059805800578056805580548053005280510050804f804e804d004c804b804a03494948488147
2064*0d4646454544444343423e8c7c359a953d00ff953d07003d46ae655a5c5b805a81598058025756
2065*56805581540353535252805102504f4f804e044d4d4c4d4c804b804a0649484847484747804600
2066*4580440343434242804105403c8b7c359a953d00ff953d05003d46ac6258815900588057015656
2067*80558054015353805200518050014f4f804e034d4c4d4c814b054a4a4949484880478046054545
2068*4444434380428041014040803f053d39897b359a953d00ff953d09003d46ac6056575756568155
2069*0154548053045252515150804f814e034d4d4c4c804b024a4a4980488147804604454444434380
2070*4280418040043f3f3e3e3d803c053b37887b359a953d00ff953d09003d46ab5e53555554548053
2071*01525280510050804f804e004d814c014b4b804a03494849488147004680450544444343424280
2072*418040013f3f803e003d803c803b073a3a3935867b359a953d00ff953d08003d46a95c51535352
2073*80510050804f804e804d004c804b804a0349494848814705464645454444804301424280410340
2074*403f3f803e003d803c803b803a80390738373633847a359a953d00ff953d09003d46a9594f5150
2075*4f4f804e044d4d4c4d4c804b804a06494848474847478046004580440043804281410940403f3f
2076*3e3e3d3d3c3c803b813a0f393938383737363635353430837a359a953d00ff953d0b003d46a857
2077*4c4e4e4d4c4d4c814b054a4a494948488047804609454544444343413f3c39803c0639383a3d3e
2078*3e3d803c803b013a3a80398038003780360135358034073333322e8179359a953d00ff953d0600
2079*3d46a7554a4c804b024a4a49804881478046044544444343804213413e3a41526b7c878b8a8071
2080*5a4336363a3b3a3a8039003880370436363536358034803309323131302f2b8079369a953d00ff
2081*953d0a003d46a652484a494849488147004680450544444343424280411540403e394a769aa395
2082*887c7b7a818e9f9f83583733388037003680358134053333323231318030802f052e297f79369a
2083*953d00ff953d05003d46a55045804705464645454444804301424280410e40403f3f3e3e384279
2084*a4966b4a3d3980350c373b425c83a3904e2f343534348033003280318130012f2f802e082d2d2c
2085*2b277c78369a953d00ff953d06003d46a34e444580440043804281412240403f3f3e3e3d3d3c3b
2086*35579d9a5f3b363c506d8b9c997c5b433837497ea571322f3280318030012f2f802e012d2d802c
2087*002b802a0528247b78369a953d00ff953d05003d46a24c4180420141418040803f023e3e3d803c
2088*803b093a3466aa773d37489024843d09aae15d3a36579e89352c802f802e002d802c002b802a80
2089*2980280527227a78369a953d00ff953d05003d46a14a3f8040003f803e003d803c813b0c3a3a39
2090*3938326aa961363e87aa893d0808503745948e332a2d802c022b2a2a8029042828272827802606
2091*25241f7877369a953d00ff953d08003d46a0483c3e3e3d803c013b3b803a80390138388037062f
2092*5ba85d3548398c3d08006d3942948328292a8029032827282780260125258024072322221d7776
2093*369a953d00ff953d05003d469f453a803b803a0539393838373780368035063043a36b3649008f
2094*3d058339469d652180270526262525242480238122072121201b7475369a953d00ff953d0e003d
2095*469e43383a393938383737363681350a34343333322e87893844ee913d0a6737599e3c20252424
2096*2323822200218020081f1f1e1d187375369a953d00ff953d0b003d469d41353737363635358034
2097*80330032803106302a53a24b39c6923d0f914c38817e1f22232222212120201f1f801e091d1d1c
2098*1c1b167175369a953d00ff953d06003d469b3e33358034053333323231318030802f052e2b897a
2099*365c943d05eb384c99371b841f011e1d801c091b1b1a1a18147074369a953d00ff953d07003d46
2100*9b3d31333280318030012f2f802e802d05283f9d4c3a46953d1a55397d5501030507090c0e1114
2101*1718191a1a19181816116e74369a953d00ff953d05003d469a3a2e8030012f2f802e002d802c00
2102*2b802a0422638d3b52963d04b6395d7b0385000d010306090c10131414106d74369a953d00ff95
2103*3d09003d4699382c2e2e2d2d802c002b802a8029062a28247d70378b963d0428404689188b0007
2104*010407076973369a953d00ff953d07003d4598362a2c2b802a80298028092928241c110d7a5838
2105*12973d03503e82348f00035f70379a953d00ff953d1a003d459633272929282827282727282722
2106*170e04000008854d3cb9973d03673b7b458f00035f70379a953d00ff953d07003d459530252727
2107*802605272621170c0382000415874543aa973d03783a7b4f8f00035f70379a953d00ff953d0d00
2108*3d45952e2325242425221a0e048500041988434691973d03793a7b4f8f00035f70379a953d00ff
2109*953d0a003d45942c2123231f14078800040b86493d00973d036f3a7a4a8f00035f70379a953d00
2110*ff953d08003d45932b201c0f038a0004077f54396d973d035a3d7f398f00035f70379a953d00ff
2111*953d06003d4592230c028d00036c6538a8963d0491444288238f00035f70379a953d00ff953d04
2112*003d458a0b8f0003507b395f963d0417385583078f00035f70379a953d00ff953d04003e45830a
2113*8f0004258b443f7f953d03683974609000035f70379a953d00ff953d04003e45840a8f0004037a
2114*643878943d04df3d438a2a9000035f70379a953d00ff953d04003e45840a9000043b8b3f3fc393
2115*3d0460376a77039000036070379a953d00ff953d04003e45840a900005057b6b385500913d04aa
2116*39498f2c8d00800104006171379a953d00ff953d04003e45840a910004258f513869903d04e13e
2117*3b825f8c000001810204006271379a953d00ff953d04003e45840a9200054b8c473968008d3d05
2118*ce3e38737c0a8a000b01010202030403006371379a953d00ff953d04003e45840a9300055e8d48
2119*3850558a3d06917e3a3a6f861a89000d010102030304040505016472379a953d00ff953d04003e
2120*45840a930007045b8e54373e6bda873d06e74c39417a831b870010010102020303040405050605
2121*026572379a953d01ff3a943d04003e45840a950005458e6c403cd1873d055d3b53886c12860006
2122*0101020203040480050806060707036572379a953d04ff4231343e913d04003e45840a96000420
2123*876138d1873d03603d825b86000201010280030604040505060607800804046672379a933d073a
2124*3affdea3702b3a903d04003e45840a9700036a6638d4873d03603d803984000201010280030804
2125*0405060607070808800904056772379a913d033932474980ff04fb9c40323e8e3d04003e45840a
2126*9700036c6538d4873d03603d803d8200000180020c03030404050606070708080909800a040767
2127*72379a8f3d053c354b9eeef382ff03ca6b303c8d3d04003e45840a9700036c6538d4873d03603d
2128*803d80000001800207030304050506060780080009800a070b0c0b076772379a8e3d03393578f0
2129*86ff03fb7735398c3d04003e45840a9700036c6538d4813d003c823d21603d803d000101020203
2130*0404050506060707080809090a0a0b0c0c0d0d096972379a8c3d073e323bc2fffffefe83ff05fe
2131*ffffc23c368b3d04003e45840a9700036c6538d4803d02393a38813d0c603d803d000203030404
2132*0506068007110808090a0a0b0b0c0c0d0d0e0e0a6a73379a8c3d02306bcb80ff01fefe83ff00fe
2133*80ff02c546358a3d04003e45840a97000a6c6538d43d3d383ec37e2f803d15603d803e00030404
2134*0505060607070808090a0a0b0c0c800d080e0e0f0f0b6a73379a8a3d093a2a75fbfffffefffefe
2135*83ff08fefffdfffff0772f3c883d04003e45840a9700126c6538d43d383bc5fffa752f3d3d603d
2136*803f00800511060607080809090a0a0b0b0c0c0d0d0e0e0f8010040c6b73369a893d0a38419cfa
2137*fffefffefffefe83ff09fefffdfffdfffa773539873d04003e45840a9700066c6538d4383bc680
2138*ff11fa752f3d603d80400005060607080809090a800b080c0c0d0e0e0f0f10108011040d6c7336
2139*9a883d02363bc580ff05fefffefffefe83ff0afefffdfffdfdffffc23c38863d04003e45840a97
2140*00056c6538c23bc682ff0efa7530623d8141000707080809090a800b070c0c0d0e0e0f0f108011
2141*8012040f6c74369a873d0c3545c5fffefdfffefffefffefe83ff05fefffdfffdfd80ff02c63b36
2142*853d04003e45840a9700046c6536e9c684ff16fa6b503d824200080809090a0a0b0b0c0d0d0e0e
2143*0f0f1080110912121314130f6e74369a863d0d2f77effffffefdfffefffefffefe83ff0cfefffd
2144*fffdfdfffdffffc54535843d04003e45840a9700046c652bef3885122266613b82430009090a0a
2145*0b0c0c0d0d0e0e0f0f1010111112131314141515116e74369a843d0f3a2a75fafffcfffefdfffe
2146*fffefffefe83ff07fefffdfffdfdfffd80ff02ef772f833d04003e45840a9700066c6431537d00
2147*0080fb100000108a96368243010a0a0b0c0c0d0e0e800f0910101112121313141415801604126e
2148*74369a833d1038419bf9fffdfcfffefdfffefffefffefe83ff0efefffdfffdfdfffdfffffcfffb
2149*752f823d04003e45840a9700046c643228f184871798cc8b378345030b0c0c0d0d0e0e0f0f1010
2150*11121213141480150016801704137075369a823d02383bc680ff0bfdfcfffefdfffefffefffefe
2151*83ff10fefffdfffdfdfffdfffffcfdfffa742b3a803d04003e45840a960005026d6434078d8434
2152*0642737e38824604800d0b0e0e0f10101111121213131480150a161617171818147175369a813d
2153*12363bc5fffdfcfffdfcfffefdfffefffefffefe83ff18fefffdfffdfdfffdfffffcfdfffff89b
2154*402c3039dd3e45840a92000a01010201026e6534e935e882e510e8f52275398347050d0e0e0f10
2155*1011111280130814141515161717181880191b167174369a3d3b3a3546c4fffffdfcfffdfcfffe
2156*fdfffefffefffefe83ff18fefffdfffdfdfffdfffffcfdfffefeffca97994eee3b45840a90000c
2157*010102030302046f6536ba9460825d0e606789673b8347060f0f10101111128013091414151616
2158*1717181919811a1b16727536952e3c4178effffefffdfcfffdfcfffefdfffefffefffefe83ff0f
2159*fefffdfffdfdfffdfffffcfdfffefbfc80ff05f5153d43840a8e00020101028003060403057065
2160*37428747383d3c834807101011111212131314151516161717181819191a1a1b1b1c18727534bc
2161*93c9f2fffffbfefffdfcfffdfcfffefdfffefffefffefe83ff0ffefffdfffdfdfffdfffffcfdff
2162*fefbfc80ff0500004941840a8c0002010202800308040405050672693c4188400441874a081180
2163*1207131414151516161780180e19191a1b1b1c1c1d1d1973742a540080ff12fcfbfefffdfcfffd
2164*fcfffefdfffefffefffefe83ff18fefffdfffdfdfffdfffffcfdfffefbfcffff786f674742840a
2165*8a0000018002040303040405800603076b8e82818382848085098696450a121213141415801600
2166*1780180719191a1b1b1c1c1d801e1b1973742b10600cfffffcfbfefffdfcfffdfcfffefdfffeff
2167*fefffefe83ff18fefffdfffdfdfffdfffffcfdfffefbfdff61d8e6434742840a88001601010202
2168*03040405050606070708081a2425252626272780280b29292a2b2b2a1b111314141580160b1717
2169*1818191a1a1b1b1c1c1d811e1c1d1973752c03300029fffdfbfefffdfcfffdfcfffefdfffefffe
2170*fffefe83ff18fefffdfffdfdfffdffff009f0e09c7cf00ebd9cc834542840a8600090101020303
2171*040405050680070a0808090a07060707080909800a0a0b0c0c0d0d0e0f1214151580160c171718
2172*19191a1a1b1b1c1c1d1d821e1c1d1973742ed9f2d700ac3f2b28df2a00fffdfcfffefdfffefffe
2173*fffefe83ff18fefffdff7f0094ce35227f16efc8b159a2938c8d554442840a8400090101020303
2174*04040505068007070808090a0a0b0b0c800d0b0e0e0f1010111112121313148015091616171718
2175*19191a1b1b801c011d1d841e1c1d1973742fc5aa8f92bb89b4d0f827ab5d932bb24800fffefffe
2176*fffefe83ff1800df69d7a81de3b2a4a59d93877484e7827b6e6c384343840a8100130101020203
2177*0304040505060607070809090a0a0b800c1c0d0d0e0e0f10101111121213131414151516171718
2178*1819191a1a1b1b1c801d861e1c1d19737430b686707d8a227f778796969da7baef2be33f6e15ff
2179*fffefe81ff231200ba03ccb2b4b2a29b8879695a4a373ab8666153501f4243840a000001010203
2180*030404800514060607080809090a0a0b0b0c0c0d0d0e0f0f101011801200138014071516161717
2181*181819801a041b1b1c1d1d891e3e1d19737530aa6956636fe4333b4a5a697c8b9ba2b5b4b5d519
2182*0433bffeffff007f19d0cccdc3b1a18f7f6f5d4d3b281806fbc55e50443f0f4143840a00010280
2183*030b040405050606070808090a0a800b180c0c0d0e0e0f0f101011111212131314151516161717
2184*181819801a041b1b1c1d1d8b1e3c1d19737531a35546516bdefb091b2b3b4d606f8292a4b4c7cd
2185*c3d855aa7fff45bbece6d3c0ae9e8f7c69574734250f00efdcd27949403a0c4143840b00800316
2186*04040506060707080809090a0a0b0b0c0c0d0e0e0f101080111512121314141515161617171818
2187*19191a1b1b1c1c1d1d8d1e3c1d19737531a24f404e8fd8dfef03152537475d6c7c8fa1b4c3d3e6
2188*def0aeff9e00d5ddd6c3b19e8f7f6c5a4a37281503f2dfcfb969443f134143840a008002050304
2189*050506068007070809090a0a0b0c0c800d0b0e0f0f101011111213131414801509161717181819
2190*1a1a1b1b901c421b17727531a454457fc5d0e3f206182b3b4a5d6f7f92a4b4c3d6e0d06355ffff
2191*000800c4c3c1b2a798887663534431220f00ecdfcd7f58224243881706090a0a0b0c0c800d090e
2192*0f0f1010111212131380140915161617171818191a1a801b001c801d031e1e1f20802192223c21
2193*1e787630ac7693d5dcef0312253444576976889babb5bcbacf1dbb75fefffffefe00f8f213d7af
2194*a6a39f9085766657473728180c00d06c513a7b847b807d807e827f828001818181828283018484
2195*8285008682870188889789198a955633d70f0309182837475a697988909f9fa6b2e33533000080
2196*fe01ffff80fe00fd800016f2685f0cdcae988e8a7f7a6b5f57474d70b8313f5759598058895983
2197*5a8f5b015c5c975b165c4a3252f65b4a5a5f6e7a828d9190b7e810a3ad8ce80083fe01ffff80fe
2198*80fd1afcfdfeaa00e8e96368bc33fbdcb69a7c788582b8423536363a3a398a3802373738a13785
2199*381b3a393635353a6b97b57b7f9abedf0045eaa8c3838c5f7ffdfafcfdfd82fe01ffff80fe80fd
2200*08fcfdfdfbfefcf9fcfe80002835e3dbbdef47ead660b8afa07c5435231915120f0c0904fffbf6
2201*f2eeeae6e3e0dddbd9d6d5d3d1d1d080ce00cc80ce36d0d1d1d5d6d6d9dddee2e3e8ebf0f5f8fa
2202*0004090c0f12151b25395c87a7b1b1128550561f00439c00c6bf00fefcf9fcfbf9fcfafcfdfd82
2203*fe01ffff80fe80fd11fcfdfdfbfefcf9fbfdf9f8fdfbf9f7fcfffc80001f7f66eef05500a5d0e1
2204*5f1cf8e0c8c7bfaba6a39a918d88847d77736f6d6b69678466366769696d7173787d82888d939a
2205*a1a6afc2c7cbea0026770cf61ad77fdf75bf00fc0000fcfdf7f7fafdfaf7f9fdfbf9fcfbf9fcfa
2206*fcfdfd82fe01ffff80fe80fd35fcfdfdfbfefcf9fbfdf9f8fdfbf9f7fbfefbfaf7f5f9fdfbf9f8
2207*f7f6fbff0075005b9bcc35e6c9af7b595758503e30302b262121242482213724242121262b3033
2208*41595d5c5e89afd4ef53f6f9b3743800fdf5f6f6f8f9fbfdfaf5f8f9fbfcf7f7fafdfaf7f9fdfb
2209*f9fcfbf9fcfafcfdfd82fe01ffff80fe80fd34fcfdfdfbfefcf9fbfdf9f8fdfbf9f7fbfefbfaf7
2210*f5f9fdfbf9f8f7f6fafefafefcf9fefd55009995b3c3055fea98452f1e0d09f5e884e536e80009
2211*0d1a3370aa0c7825061538005f00fcfef9fbfefbfcf5f6f6f8f9fbfdfaf5f8f9fbfcf7f7fafdfa
2212*f7f9fdfbf9fcfbf9fcfafcfdfd82fe01ffff80fe80fd34fcfdfdfbfefcf9fbfdf9f8fdfbf9f7fb
2213*fefbfaf7f5f9fdfbf9f8f7f6fafefafefcf9fdfcfafefdfbf9fc5500d4aa72ce55d708c0f2840c
2214*07f21d08dff4ced4c880002bfdfafcfdfbf9fbfdf9fbfefbfcf5f6f6f8f9fbfdfaf5f8f9fbfcf7
2215*f7fafdfaf7f9fdfbf9fcfbf9fcfafcfdfd82fe74386d6b00004008000000000000000000000000
2216*000000000000000000000000000000000000000000000000000000000000000000000000000000
2217*000000000000000000000000000000000000000000000000000000000000000000000000000000
2218*000000000000000000000000000000000000000000000000000000000000000000000000000000
2219*000000000000000000000000000000000000000000000000000000000000000000000000000000
2220*000000000000000000000000000000000000000000000000000000000000000000000000000000
2221*000000000000000000000000000000000000000000000000000000000000000000000000000000
2222*000000000000000000000000000000000000000000000000000000000000000000000000000000
2223*000000000000000000000000000000000000000000000000000000000f31537794a2babfb6a194
2224*744e310f0000000000000000000000000000000000000000000000000000000000000000000000
2225*000000000000000000000000000000000000000000000000000000000000000000000000000000
2226*000000000000000000000000000000000000000000000000000000000000000000000000063172
2227*a7d9f5fefffffffffffffffdf3d9a76f2d03000000000000000000000000000000000000000000
2228*000000000000000000000000000000000000000000000000000000000000000000000000000000
2229*000000000000000000000000000000000000000000000000000000000000000000000000000000
2230*000000000000287ccffafffffffffffffffffffffffffffffffffff8c678230000000000000000
2231*000000000000000000000000000000000000000000000000000000000000000000000000000000
2232*000000000000000000000000000000000000000000000000000000000000000000000000000000
2233*0000000000000000000000000000003ba4f4ffffffffffffffffffffffffffffffffffffffffff
2234*fffff09d3000000000000000000000000000000000000000000000000000000000000000000000
2235*000000000000000000000000000000000000000000000000000000000000000000000000000000
2236*00000000000000000000000000000000000000000000000027a1fdffffffffffffffffffffffff
2237*fffffffffffffffffffffffffffffff79a22000000000000000000000000000000000000000000
2238*000000000000000000000000000000000000000000000000000000000000000000000000000000
2239*0000000000000000000000000000000000000000000000000000000000000000000274ecffffff
2240*ffffffffffffffffffffffffffffffffffffffffffffffffffffffffe56a000000000000000000
2241*000000000000000000000000000000000000000000000000000000000000000000000000000000
2242*000000000000000000000000000000000000000000000000000000000000000000000000000000
2243*0000000025b8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
2244*ffffaf1c0000000000000000000000000000000000000000000000000000000000000000000000
2245*000000000000000000000000000000000000000000000000000000000000000000000000000000
2246*000000000000000000000000000043dfffffffffffffffffffffffffffffffffffffffffffffff
2247*ffffffffffffffffffffffffffffd93a0000000000000000000000000000000000000000000000
2248*000000000000000000000000000000000000000000000000000000000000000000000000000000
2249*0000000000000000000000000000000000000000000000005bf7ffffffffffffffffffffffffff
2250*ffffffffffffffffffffffffffffffffffffffffffffffffffffef560000000000000000000000
2251*000000000000000000000000000000000000000000000000000000000000000000000000000000
2252*000000000000000000000000000000000000000000000000000000000000000000005efaffffff
2253*fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa
2254*5b0000000000000000000000000000000000000000000000000000000000000000000000000000
2255*000000000000000000000000000000000000000000000000000000000000000000000000000000
2256*00000000005af9ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
2257*fffffffffffffffffffffff9550000000000000000000000000000000000000000000000000000
2258*000000000000000000000000000000000000000000000000000000000000000000000000000000
2259*00000000000000000000000000000046f8ffffffffffffffffffffffffffffffffffffffffffff
2260*fffffffffffffffffffffffffffffffffffffffffffffff03a0000000000000000000000000000
2261*000000000000000000000000000000000000000000000000000000000000000000000000000000
2262*0000000000000000000000000000000000000000000000000022e6ffffffffffffffffffffffff
2263*ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdd190000
2264*000000000000000000000000000000000000000000000000000000000000000000000000000000
2265*000000000000000000000000000000000000000000000000000000000000000000000006bdffff
2266*ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
2267*ffffffffffffffffb1020000000000000000000000000000000000000000000000000000000000
2268*000000000000000000000000000000000000000000000000000000000000000000000000000000
2269*0000000000000075ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
2270*ffffffffffffffffffffffffffffffffffffffff6c000000000000000000000000000000000000
2271*000000000000000000000000000000000000000000000000000000000000000000000000000000
2272*000000000000000000000000000000000027f2ffffffffffffffffffffffffffffffffffffffff
2273*ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffea1f000000000000
2274*000000000000000000000000000000000000000000000000000000000000000000000000000000
2275*00000000000000000000000000000000000000000000000000000000a9ffffffffffffffffffff
2276*ffffffffffffffffffffffffe7b68d7f797f90bceaffffffffffffffffffffffffffffffffffff
2277*ffffffff9d00000000000000000000000000000000000000000000000000000000000000000000
2278*000000000000000000000000000000000000000000000000000000000000000000000000000037
2279*fcfffffffffffffffffffffffffffffffffffffffaaa5012000000000000001356aefdffffffff
2280*fffffffffffffffffffffffffffffff72b00000000000000000000000000000000000000000000
2281*000000000000000000000000000000000000000000000000000000000000000000000000000000
2282*00000000000000000000acffffffffffffffffffffffffffffffffffffffb43700000000000000
2283*0000000000003bbbffffffffffffffffffffffffffffffffffffff9e0000000000000000000000
2284*000000000000000000000000000000000000000000000000000000000000000000000000000000
2285*00000000000000000000000000000000000000002dfbffffffffffffffffffffffffffffffffff
2286*f66c000000000000000000000000000000000078fcfffffffffffffffffffffffffffffffffff5
2287*210000000000000000000000000000000000000000000000000000000000000000000000000000
2288*0000000000000000000000000000000000000000000000000000000000000088ffffffffffffff
2289*ffffffffffffffffffffee460000000000000000000000000000000000000053f0ffffffffffff
2290*ffffffffffffffffffffff79000000000000000000000000000000000000000000000000000000
2291*000000000000000000000000000000000000000000000000000000000000000000000000000000
2292*000008d9fffffffffffffffffffffffffffffffff7450000000000000000000000000000000000
2293*0000000052faffffffffffffffffffffffffffffffffce05000000000000000000000000000000
2294*000000000000000000000000000000000000000000000000000000000000000000000000000000
2295*000000000000000000000000003fffffffffffffffffffffffffffffffffff6c00000000000000
2296*0000000000000000000000000000000076fffffffffffffffffffffffffffffffffc3200000000
2297*000000000000000000000000000000000000000000000000000000000000000000000000000000
2298*0000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffff
2299*ffffb000000000000000000000000000000000000000000000000001bdffffffffffffffffffff
2300*ffffffffffff710000000000000000000000000000000000000000000000000000000000000000
2301*0000000000000000000000000000000000000000000000000000000000000000000001b8ffffff
2302*fffffffffffffffffffffffff62b00000000000000000000000000000000000000000000000000
2303*37fbffffffffffffffffffffffffffffffab000000000000000000000000000000000000000000
2304*000000000000000000000000000000000000000000000000000000000000000000000000000000
2305*0000000000000ce6ffffffffffffffffffffffffffffffa1000000000000000000000000000000
2306*000000000000000000000000adffffffffffffffffffffffffffffffdf08000000000000000000
2307*000000000000000000000000000000000000000000000000000000000000000000000000000000
2308*000000000000000000000000000000000031fcfffffffffffffffffffffffffffffe4100000000
2309*00000000000000000000000000000000000000000000004fffffffffffffffffffffffffffffff
2310*f72100000000000000000000000000000000000000000000000000000000000000000000000000
2311*0000000000000000000000000000000000000000000000000000000052ffffffffffffffffffff
2312*ffffffffffdb0800000000000000000000000000000000000000000000000000000011e7ffffff
2313*ffffffffffffffffffffffff460000000000000000000000000000000000000000000000000000
2314*000000000000000000000000000000000000000000000000000000000000000000000000000000
2315*69ffffffffffffffffffffffffffffffa600000000000000000000000000000000000000000000
2316*00000000000000b5ffffffffffffffffffffffffffffff5e000000000000000000000000000000
2317*000000000000000000000000000000000000000000000000000000000000000000000000000000
2318*00000000000000000000007fffffffffffffffffffffffffffffff810000000000000000000000
2319*0000000000000000000000000000000000008effffffffffffffffffffffffffffff6c00000000
2320*000000000000000000000000000000000000000000000000000000000000000000000000000000
2321*0000000000000000000000000000000000000000000080ffffffffffffffffffffffffffffff64
2322*000000000000000000000000000000000000000000000000000000000075ffffffffffffffffff
2323*ffffffffffff800000000000000000000000000000000000000000000000000000000000000000
2324*00000000000000000000000000000000000000000000000000000000000000000080ffffffffff
2325*ffffffffffffffffffff6200000000000000000000000000000000000000000000000000000000
2326*0063ffffffffffffffffffffffffffffff80000000000000000000000000000000000000000000
2327*000000000000000000000000000000000000000000000000000000000000000000000000000000
2328*000000000080ffffffffffffffffffffffffffffff630000000000000000000000000000000000
2329*00000000000000000000000063ffffffffffffffffffffffffffffff8000000000000000000000
2330*000000000000000000000000000000000000000000000000000000000000000000000000000000
2331*0000000000000000000000000000000080ffffffffffffffffffffffffffffff63000000000000
2332*000000000000000000000000000000000000000000000063ffffffffffffffffffffffffffffff
2333*800000000000000000000000000000000000000000000000000000000000000000000000000000
2334*00000000000000000000000000000000000000000000000000000080ffffffffffffffffffffff
2335*ffffffff63000000000000000000000000000000000000000000000000000000000063ffffffff
2336*ffffffffffffffffffffff80000000000000000000000000000000000000000000000000000000
2337*000000000000000000000000000000000000000000000000000000000000000000000000000080
2338*ffffffffffffffffffffffffffffff630000000000000000000000000000000000000000000000
2339*00000000000063ffffffffffffffffffffffffffffff8000000000000000000000000000000000
2340*000000000000000000000000000000000000000000000000000000000000000000000000000000
2341*0000000000000000000080ffffffffffffffffffffffffffffff63000000000000000000000000
2342*000000000000000000000000000000000063ffffffffffffffffffffffffffffff800000000000
2343*000000000000000000000000000000000000000000000000000000000000000000000000000000
2344*00000000000000000000000000000000000000000080ffffffffffffffffffffffffffffff6300
2345*0000000000000000000000000000000000000000000000000000000063ffffffffffffffffffff
2346*ffffffffff80000000000000000000000000000000000000000000000000000000000000000000
2347*000000000000000000000000000000000000000000000000000000000000000080ffffffffffff
2348*ffffffffffffffffff630000000000000000000000000000000000000000000000000000000000
2349*63ffffffffffffffffffffffffffffff8000000000000000000000000000000000000000000000
2350*000000000000000000000000000000000000000000000000000000000000000000000000000000
2351*0000000080ffffffffffffffffffffffffffffff63000000000000000000000000000000000000
2352*000000000000000000000063ffffffffffffffffffffffffffffff800000000000000000000000
2353*000000000000000000000000000000000000000000000000000000000000000000000000000000
2354*00000000000000000000000000000080ffffffffffffffffffffffffffffff6300000000000000
2355*0000000000000000000000000000000000000000000063ffffffffffffffffffffffffffffff80
2356*000000000000000000000000000000000000000000000000000000000000000000000000000000
2357*000000000000000000000000000000000000000000000000000080ffffffffffffffffffffffff
2358*ffffff63000000000000000000000000000000000000000000000000000000000063ffffffffff
2359*ffffffffffffffffffff8000000000000000000000000000000000000000000000000000000000
2360*000000000000000000000000000000000000000000000000000000000000000000000000007aff
2361*ffffffffffffffffffffffffffff5c000000000000000000000000000000000000000000000000
2362*00000000005cffffffffffffffffffffffffffffff7a0000000000000000000000000000000000
2363*000000000000000000000000000000000000000000000000000000000000000000000000000000
2364*000000002145494844a4ffffffffffffffffffffffffffffff8f45484848484848484848484848
2365*484848484848484848484848484848458fffffffffffffffffffffffffffffffa4444848493505
2366*000000000000000000000000000000000000000000000000000000000000000000000000000000
2367*000000000000000000000000000892f2ffffffffffffffffffffffffffffffffffffffffffffff
2368*ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
2369*fffffffffffffffffffbcd2d000000000000000000000000000000000000000000000000000000
2370*0000000000000000000000000000000000000000000000007cffffffffffffffffffffffffffff
2371*ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
2372*ffffffffffffffffffffffffffffffffffffffffffffd910000000000000000000000000000000
2373*0000000000000000000000000000000000000000000000000000000000000000000006d4ffffff
2374*ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
2375*ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5500000000
2376*000000000000000000000000000000000000000000000000000000000000000000000000000000
2377*0000000000000ff1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
2378*ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
2379*ffffffffffff660000000000000000000000000000000000000000000000000000000000000000
2380*00000000000000000000000000000000000ff0ffffffffffffffffffffffffffffffffffffffff
2381*ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
2382*ffffffffffffffffffffffffffffffffff63000000000000000000000000000000000000000000
2383*000000000000000000000000000000000000000000000000000000000ff0ffffffffffffffffff
2384*ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
2385*ffffffffffffffffffffffffffffffffffffffffffffffffffffffff6300000000000000000000
2386*000000000000000000000000000000000000000000000000000000000000000000000000000000
2387*0ff0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
2388*ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
2389*630000000000000000000000000000000000000000000000000000000000000000000000000000
2390*00000000000000000000000ff0ffffffffffffffffffffffffffffffffffffffffffffffffffff
2391*ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
2392*ffffffffffffffffffffff63000000000000000000000000000000000000000000000000000000
2393*000000000000000000000000000000000000000000000ff0ffffffffffffffffffffffffffffff
2394*ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
2395*ffffffffffffffffffffffffffffffffffffffffffff6300000000000000000000000000000000
2396*0000000000000000000000000000000000000000000000000000000000000000000ff0ffffffff
2397*ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
2398*ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff630000000000
2399*000000000000000000000000000000000000000000000000000000000000000000000000000000
2400*00000000000ff0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
2401*ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
2402*ffffffffff63000000000000000000000000000000000000000000000000000000000000000000
2403*000000000000000000000000000000000ff0ffffffffffffffffffffffffffffffffffffffffff
2404*ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
2405*ffffffffffffffffffffffffffffffff6300000000000000000000000000000000000000000000
2406*0000000000000000000000000000000000000000000000000000000ff0ffffffffffffffffffff
2407*ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
2408*ffffffffffffffffffffffffffffffffffffffffffffffffffffff630000000000000000000000
2409*00000000000000000000000000000000000000000000000000000000000000000000000000000f
2410*f0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
2411*ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff63
2412*000000000000000000000000000000000000000000000000000000000000000000000000000000
2413*000000000000000000000ff0ffffffffffffffffffffffffffffffffffffffffffffffffffffff
2414*ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
2415*ffffffffffffffffffff6300000000000000000000000000000000000000000000000000000000
2416*0000000000000000000000000000000000000000000ff0ffffffffffffffffffffffffffffffff
2417*ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
2418*ffffffffffffffffffffffffffffffffffffffffff630000000000000000000000000000000000
2419*00000000000000000000000000000000000000000000000000000000000000000ff0ffffffffff
2420*ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
2421*ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff63000000000000
2422*000000000000000000000000000000000000000000000000000000000000000000000000000000
2423*000000000ff0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
2424*f0ba8c6e62647ba4dbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
2425*ffffffff6300000000000000000000000000000000000000000000000000000000000000000000
2426*0000000000000000000000000000000ff0ffffffffffffffffffffffffffffffffffffffffffff
2427*ffffffffffffffffffcf6a1c000000000000000944a4f9ffffffffffffffffffffffffffffffff
2428*ffffffffffffffffffffffffffffff630000000000000000000000000000000000000000000000
2429*00000000000000000000000000000000000000000000000000000ff0ffffffffffffffffffffff
2430*ffffffffffffffffffffffffffffffffffffee71090000000000000000000000003abfffffffff
2431*ffffffffffffffffffffffffffffffffffffffffffffffffffff63000000000000000000000000
2432*000000000000000000000000000000000000000000000000000000000000000000000000000ff0
2433*ffffffffffffffffffffffffffffffffffffffffffffffffffffffffd231000000000000000000
2434*000000000000068cffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6300
2435*000000000000000000000000000000000000000000000000000000000000000000000000000000
2436*0000000000000000000ff0ffffffffffffffffffffffffffffffffffffffffffffffffffffffd0
2437*1e00000000000000000000000000000000000074ffffffffffffffffffffffffffffffffffffff
2438*ffffffffffffffffff630000000000000000000000000000000000000000000000000000000000
2439*00000000000000000000000000000000000000000ff0ffffffffffffffffffffffffffffffffff
2440*ffffffffffffffffffe11f000000000000000000000000000000000000000094ffffffffffffff
2441*ffffffffffffffffffffffffffffffffffffffff63000000000000000000000000000000000000
2442*000000000000000000000000000000000000000000000000000000000000000ff0ffffffffffff
2443*fffffffffffffffffffffffffffffffffffffffe4d000000000000000000000000000000000000
2444*00000007c9ffffffffffffffffffffffffffffffffffffffffffffffffffff6300000000000000
2445*000000000000000000000000000000000000000000000000000000000000000000000000000000
2446*0000000ff0ffffffffffffffffffffffffffffffffffffffffffffffffffa50000000000000000
2447*00000000000000000000000000000041fbffffffffffffffffffffffffffffffffffffffffffff
2448*ffffff630000000000000000000000000000000000000000000000000000000000000000000000
2449*00000000000000000000000000000ff0ffffffffffffffffffffffffffffffffffffffffffffff
2450*fffa2f000000000000000000000000000000000000000000000000b3ffffffffffffffffffffff
2451*ffffffffffffffffffffffffffff63000000000000000000000000000000000000000000000000
2452*000000000000000000000000000000000000000000000000000ff0ffffffffffffffffffffffff
2453*ffffffffffffffffffffffffb70000000000000000000000000000000000000000000000000054
2454*ffffffffffffffffffffffffffffffffffffffffffffffffff6300000000000000000000000000
2455*0000000000000000000000000000000000000000000000000000000000000000000000000ff0ff
2456*ffffffffffffffffffffffffffffffffffffffffffffff6e000000000000000000000000000000
2457*0000000000000000000013ebffffffffffffffffffffffffffffffffffffffffffffffff630000
2458*000000000000000000000000000000000000000000000000000000000000000000000000000000
2459*00000000000000000ff0fffffffffffffffffffffffffffffffffffffffffffffffc3800000000
2460*00000000000000000000000000000000000000000000bbffffffffffffffffffffffffffffffff
2461*ffffffffffffffff63000000000000000000000000000000000000000000000000000000000000
2462*000000000000000000000000000000000000000ff0ffffffffffffffffffffffffffffffffffff
2463*fffffffffff416000000000000000000000000000000000000000000000000000094ffffffffff
2464*ffffffffffffffffffffffffffffffffffffff6300000000000000000000000000000000000000
2465*0000000000000000000000000000000000000000000000000000000000000ff0ffffffffffffff
2466*ffffffffffffffffffffffffffffffffe009000000000000000000000000000000000000000000
2467*00000000007fffffffffffffffffffffffffffffffffffffffffffffffff630000000000000000
2468*000000000000000000000000000000000000000000000000000000000000000000000000000000
2469*00000ff0ffffffffffffffffffffffffffffffffffffffffffffffd60700000000000000000000
2470*000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffff
2471*ffff63000000000000000000000000000000000000000000000000000000000000000000000000
2472*000000000000000000000000000ff0ffffffffffffffffffffffffffffffffffffffffffffffef
2473*0f000000000000000000000000000000000000000000000000000089ffffffffffffffffffffff
2474*ffffffffffffffffffffffffff6300000000000000000000000000000000000000000000000000
2475*0000000000000000000000000000000000000000000000000ff0ffffffffffffffffffffffffff
2476*fffffffffffffffffffff82a0000000000000000000000000000000000000000000000000000aa
2477*ffffffffffffffffffffffffffffffffffffffffffffffff630000000000000000000000000000
2478*00000000000000000000000000000000000000000000000000000000000000000000000ff0ffff
2479*ffffffffffffffffffffffffffffffffffffffffffff5b00000000000000000000000000000000
2480*00000000000000000007dcffffffffffffffffffffffffffffffffffffffffffffffff63000000
2481*000000000000000000000000000000000000000000000000000000000000000000000000000000
2482*000000000000000ff0ffffffffffffffffffffffffffffffffffffffffffffffffa00000000000
2483*000000000000000000000000000000000000000037fcffffffffffffffffffffffffffffffffff
2484*ffffffffffffff6300000000000000000000000000000000000000000000000000000000000000
2485*0000000000000000000000000000000000000ff0ffffffffffffffffffffffffffffffffffffff
2486*ffffffffffea1800000000000000000000000000000000000000000000000093ffffffffffffff
2487*ffffffffffffffffffffffffffffffffffff630000000000000000000000000000000000000000
2488*00000000000000000000000000000000000000000000000000000000000ff0ffffffffffffffff
2489*ffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000
2490*000020f0ffffffffffffffffffffffffffffffffffffffffffffffffff63000000000000000000
2491*000000000000000000000000000000000000000000000000000000000000000000000000000000
2492*000ff0ffffffffffffffffffffffffffffffffffffffffffffffffffea22000000000000000000
2493*000000000000000000000000009effffffffffffffffffffffffffffffffffffffffffffffffff
2494*ff6300000000000000000000000000000000000000000000000000000000000000000000000000
2495*0000000000000000000000000ff0ffffffffffffffffffffffffffffffffffffffffffffffffff
2496*ffb70400000000000000000000000000000000000000005afeffffffffffffffffffffffffffff
2497*ffffffffffffffffffffffff630000000000000000000000000000000000000000000000000000
2498*00000000000000000000000000000000000000000000000ff0ffffffffffffffffffffffffffff
2499*ffffffffffffffffffffffffff910000000000000000000000000000000000000044f0ffffffff
2500*ffffffffffffffffffffffffffffffffffffffffffffff63000000000000000000000000000000
2501*000000000000000000000000000000000000000000000000000000000000000000000ff0ffffff
2502*ffffffffffffffffffffffffffffffffffffffffffffffffff9306000000000000000000000000
2503*000000004aefffffffffffffffffffffffffffffffffffffffffffffffffffffffff6300000000
2504*000000000000000000000000000000000000000000000000000000000000000000000000000000
2505*0000000000000ff0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbd2d
2506*000000000000000000000000000779f9ffffffffffffffffffffffffffffffffffffffffffffff
2507*ffffffffffff630000000000000000000000000000000000000000000000000000000000000000
2508*00000000000000000000000000000000000ff0ffffffffffffffffffffffffffffffffffffffff
2509*fffffffffffffffffffff28e150000000000000000000042c8ffffffffffffffffffffffffffff
2510*ffffffffffffffffffffffffffffffffff63000000000000000000000000000000000000000000
2511*000000000000000000000000000000000000000000000000000000000ff0ffffffffffffffffff
2512*ffffffffffffffffffffffffffffffffffffffffffffff4900000000000000000000a3ffffffff
2513*ffffffffffffffffffffffffffffffffffffffffffffffffffffffff6300000000000000000000
2514*000000000000000000000000000000000000000000000000000000000000000000000000000000
2515*0ff0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4900000000
2516*0000000000009cffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
2517*630000000000000000000000000000000000000000000000000000000000000000000000000000
2518*00000000000000000000000ff0ffffffffffffffffffffffffffffffffffffffffffffffffffff
2519*ffffffffffff48000000000000000000009cffffffffffffffffffffffffffffffffffffffffff
2520*ffffffffffffffffffffff63000000000000000000000000000000000000000000000000000000
2521*000000000000000000000000000000000000000000000ff0ffffffffffffffffffffffffffffff
2522*ffffffffffffffffffffffffffffffffff48000000000000000000009cffffffffffffffffffff
2523*ffffffffffffffffffffffffffffffffffffffffffff6300000000000000000000000000000000
2524*0000000000000000000000000000000000000000000000000000000000000000000ff0ffffffff
2525*ffffffffffffffffffffffffffffffffffffffffffffffffffffffff4800000000000000000000
2526*9cffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff630000000000
2527*000000000000000000000000000000000000000000000000000000000000000000000000000000
2528*00000000000ff0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
2529*48000000000000000000009cffffffffffffffffffffffffffffffffffffffffffffffffffffff
2530*ffffffffff63000000000000000000000000000000000000000000000000000000000000000000
2531*000000000000000000000000000000000ff0ffffffffffffffffffffffffffffffffffffffffff
2532*ffffffffffffffffffffff48000000000000000000009cffffffffffffffffffffffffffffffff
2533*ffffffffffffffffffffffffffffffff6300000000000000000000000000000000000000000000
2534*0000000000000000000000000000000000000000000000000000000ff0ffffffffffffffffffff
2535*ffffffffffffffffffffffffffffffffffffffffffff48000000000000000000009cffffffffff
2536*ffffffffffffffffffffffffffffffffffffffffffffffffffffff630000000000000000000000
2537*00000000000000000000000000000000000000000000000000000000000000000000000000000f
2538*f0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff480000000000
2539*00000000009cffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff63
2540*000000000000000000000000000000000000000000000000000000000000000000000000000000
2541*000000000000000000000ff0ffffffffffffffffffffffffffffffffffffffffffffffffffffff
2542*ffffffffff48000000000000000000009cffffffffffffffffffffffffffffffffffffffffffff
2543*ffffffffffffffffffff6300000000000000000000000000000000000000000000000000000000
2544*0000000000000000000000000000000000000000000ff0ffffffffffffffffffffffffffffffff
2545*ffffffffffffffffffffffffffffffff48000000000000000000009cffffffffffffffffffffff
2546*ffffffffffffffffffffffffffffffffffffffffff630000000000000000000000000000000000
2547*00000000000000000000000000000000000000000000000000000000000000000ff0ffffffffff
2548*ffffffffffffffffffffffffffffffffffffffffffffffffffffff46000000000000000000009c
2549*ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff63000000000000
2550*000000000000000000000000000000000000000000000000000000000000000000000000000000
2551*000000000ff0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff51
2552*090e0e0e0e0e0e0e0e059dffffffffffffffffffffffffffffffffffffffffffffffffffffffff
2553*ffffffff6300000000000000000000000000000000000000000000000000000000000000000000
2554*0000000000000000000000000000000ff0ffffffffffffffffffffffffffffffffffffffffffff
2555*ffffffffffffffffffff8147505050505050504f46b9ffffffffffffffffffffffffffffffffff
2556*ffffffffffffffffffffffffffffff630000000000000000000000000000000000000000000000
2557*00000000000000000000000000000000000000000000000000000ff0ffffffffffffffffffffff
2558*ffffffffffffffffffffffffffffffffffffffffff844b53535353535353524cbcffffffffffff
2559*ffffffffffffffffffffffffffffffffffffffffffffffffffff63000000000000000000000000
2560*000000000000000000000000000000000000000000000000000000000000000000000000000ff0
2561*ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff834a5252525252
2562*5252514bbbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6300
2563*000000000000000000000000000000000000000000000000000000000000000000000000000000
2564*0000000000000000000ff0ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
2565*ffffffff8148505050505050504f49baffffffffffffffffffffffffffffffffffffffffffffff
2566*ffffffffffffffffff630000000000000000000000000000000000000000000000000000000000
2567*00000000000000000000000000000000000000000ff0ffffffffffffffffffffffffffffffffff
2568*ffffffffffffffffffffffffffffff864f575757575757575650bdffffffffffffffffffffffff
2569*ffffffffffffffffffffffffffffffffffffffff63000000000000000000000000000000000000
2570*000000000000000000000000000000000000000000000000000000000000000cf0ffffffffffff
2571*ffffffffffffffffffffffffffffffffffffffffffffffffffffeae0e2e2e2e2e2e2e2e2e0f3ff
2572*ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6000000000000000
2573*000000000000000000000000000000000000000000000000000000000000000000000000000000
2574*00000b3ef5ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
2575*ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
2576*ffffff760100000000000000000000000000000000000000000000000000000000000000000000
2577*000000000000000000000000224960f5ffffffffffffffffffffffffffffffffffffffffffffff
2578*ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
2579*ffffffffffffffffffffffffffff983a1500000000000000000000000000000000000000000000
2580*000000000000000000000000000000000000000000002f575462f6ffffffffffffffffffffffff
2581*ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
2582*ffffffffffffffffffffffffffffffffffffffffffffffffff984f531f00000000000000000000
2583*00000000000000000000000000000000000000000000000000000308121c252b538081838ff8ff
2584*ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
2585*ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb67d82
2586*7b44282319100602000000000000000000000000000000000000000000000002091825303c464e
2587*515455618d8e8c8992f8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
2588*ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
2589*ffffffffffffffffb9848c8f85595553504d43392d231407010000000000000000000000000002
2590*102234444e53575755545353534f6c8d8a8a8891f8ffffffffffffffffffffffffffffffffffff
2591*ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
2592*ffffffffffffffffffffffffffffffffffffffb8838a8a8a5f5053535355565756524d40301e0c
2593*00000000000000000e2a43515657555353525252525252524e6d8e8a8a8891f8ffffffffffffff
2594*ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
2595*ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb8838a8a8b60505252
2596*525252525253535557554f3e23080000000b2e50575553525252525252525252525252505d8a8b
2597*8a8891f8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
2598*ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
2599*ffffb8838a8c8355515252525252525252525252525356564b2104003b5b535252525252525252
2600*525252525252525250738e8a8891f8ffffffffffffffffffffffffffffffffffffffffffffffff
2601*ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
2602*ffffffffffffffffffffffffffb8838b8c674f5252525252525252525252525252525255552600
2603*2d5356535252525252525252525252525252525154798d8991f8ffffffffffffffffffffffffff
2604*ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
2605*ffffffffffffffffffffffffffffffffffffffffffffffffb8858c6c5052525252525252525252
2606*52525252525253574a1b0000153e52575553535252525252525252525252525152708894f8ffff
2607*ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
2608*ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbc7f6650
2609*52525252525252525252525252535456564f350d0000000000122a3f4f54575654535352525252
2610*5252525251505d7debffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
2611*ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
2612*ffffffffffffff9b534f5252525252525252525353555657534c3b240c00000000000000000001
2613*091c2a38484f52565756555453535352524f4ba0ffffffffffffffffffffffffffffffffffffff
2614*ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
2615*ffffffffffffffffffffffffffffffffffde564e52525353535455565855514e43352617070000
2616*000000000000000000000000000000030b17242e38414b4f51545658575452a9f1fbfbfcfffffd
2617*fcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfc
2618*fcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfdfffffbfbfcfad16f5057585653514f493e35
2619*2b2114080200000000000000000000000000000000000000000000000000000001040b131c242b
2620*32393e3f5a6c6d7181919da5a7a5a3a2a1a0a0a09f9f9f9f9f9f9f9f9f9e9e9e9e9e9e9e9e9e9e
2621*9e9e9e9e9e9e9e9e9e9e9e9e9e9f9f9f9f9f9f9f9fa0a0a0a0a1a2a3a6a7a39b8d7c6f6d6d6143
2622*39383029221a120904010000000000000000000000000000000000000000000000000000000000
2623*00000000000000000000000000010201040a0f111b243642576873797d82808084848384858585
2624*85868787878787878787878787878787878787878787878685858585848384837f80817b787164
2625*523f312018100d0802000101000000000000000000000000000000000000000000000000000000
2626*000000000000000000000000000000000000000000000000000000000000000000000000020d1c
2627*2736414c5355575d61605f5f62646363636363626262626262626262636363636364615e5f6061
2628*5b575452493e322518090100000000000000000000000000000000000000000000000000000000
2629*000000000000000000000000000000000000000000000000000000000000000000000000000000
2630*0000000000000000000000000000030b141d252b31383e43494b4c4d4d4f505050505050505050
2631*4e4d4d4c4b46423c373029231b1208030000000000000000000000000000000000000000000000
2632*000000000000000000000000000000000000000000000000000000000000000000000000000000
2633*0000000000000000000000000000000000000000000000000000000000000003070c0f14151b20
2634*1f252a292929292929292a231f201915120e0a0702000000000000000000000000000000000000
2635*00000000000000000000000000000000000000000000000000000000000000
2636newhex
2637*
2638rmfile ./mac/allmydata.icns
2639hunk ./mac/allmydata_tahoe.py 1
2640-from allmydata.util import pkgresutil # override the pkg_resources zip provider for py2app deployment
2641-pkgresutil.install() # this is done before nevow is imported by depends
2642-import depends # import dependencies so that py2exe finds them
2643-_junk = depends # appease pyflakes
2644-
2645-import sys
2646-
2647-from twisted.python import usage
2648-
2649-class ReplOptions(usage.Options):
2650-    pass
2651-
2652-def repl(config, stdout, stderr):
2653-    import code
2654-    return code.interact()
2655-
2656-class DbgRunnerExtension(object):
2657-    subCommands = [
2658-        ["dbgrepl", None, ReplOptions, "Open a python interpreter"],
2659-        ]
2660-    dispatch = {
2661-        "dbgrepl": repl,
2662-        }
2663-
2664-class FuseOptions(usage.Options):
2665-    def parseOptions(self, args):
2666-        self.args = args
2667-
2668-def fuse(config, stdout, stderr):
2669-    import tahoefuse
2670-    tahoefuse.main(config.args)
2671-
2672-class FuseRunnerExtension(object):
2673-    subCommands = [
2674-        ["fuse", None, FuseOptions, "Mount a filesystem via fuse"],
2675-        ]
2676-    dispatch = {
2677-        "fuse": fuse,
2678-        }
2679-
2680-def main(argv):
2681-    if len(argv) == 1:
2682-        # then we were given no args; do default mac node startup
2683-        from allmydata.gui.macapp import run_macapp
2684-        sys.exit(run_macapp())
2685-    else:
2686-        # given any cmd line args, do 'tahoe' cli behaviour
2687-        from allmydata.scripts import runner
2688-        #runner_extensions = [DbgRunnerExtension, FuseRunnerExtension, ]
2689-        runner_extensions = [FuseRunnerExtension, ]
2690-        sys.exit(runner.runner(argv[1:],
2691-                               install_node_control=False,
2692-                               additional_commands=runner_extensions,
2693-                               ))
2694-
2695-if __name__ == '__main__':
2696-    main(sys.argv)
2697-
2698rmfile ./mac/allmydata_tahoe.py
2699hunk ./mac/depends.py 1
2700-
2701-# nevow requires all these for its voodoo module import time adaptor registrations
2702-from nevow import accessors, appserver, static, rend, url, util, query, i18n, flat
2703-from nevow import guard, stan, testutil, context
2704-from nevow.flat import flatmdom, flatstan, twist
2705-from formless import webform, processors, annotate, iformless
2706-from decimal import Decimal
2707-
2708-
2709-#if sys.platform in ['darwin', ]:
2710-from nevow.flat import flatsax
2711-from xml.parsers import expat
2712-from xml.sax import expatreader
2713-junk = [ flatsax, expat, expatreader, ]
2714-
2715-try:
2716-    # these build hints are needed for nevow/xml on otto's 10.4 / py2.4
2717-    # environment.  they are broken on zandr's 10.5/py2.5 env, but are
2718-    # also unnecessary.
2719-    from xml.sax import sax2exts
2720-    from xml.sax.drivers2 import drv_pyexpat, drv_xmlproc
2721-    junk = [ sax2exts, drv_pyexpat, drv_xmlproc, ]
2722-except:
2723-    pass
2724-
2725-
2726-
2727-import allmydata.web
2728-
2729-# junk to appease pyflakes's outrage at py2exe's needs
2730-junk = [
2731-    accessors, appserver, static, rend, url, util, query, i18n, flat, guard, stan, testutil,
2732-    context, flatmdom, flatstan, twist, webform, processors, annotate, iformless, Decimal,
2733-    allmydata,
2734-    ]
2735-
2736rmfile ./mac/depends.py
2737hunk ./mac/fuse.py 1
2738-#
2739-#    Copyright (C) 2001  Jeff Epler  <jepler@unpythonic.dhs.org>
2740-#    Copyright (C) 2006  Csaba Henk  <csaba.henk@creo.hu>
2741-#
2742-#    This program can be distributed under the terms of the GNU LGPL.
2743-#    See the file COPYING.
2744-#
2745-# On 2009-09-21 Csaba Henk granted permission for this file to be
2746-# licensed under the same terms as Tahoe-LAFS itself.
2747-#
2748-
2749-
2750-# suppress version mismatch warnings
2751-try:
2752-    import warnings
2753-    warnings.filterwarnings('ignore',
2754-                            'Python C API version mismatch',
2755-                            RuntimeWarning,
2756-                            )
2757-except:
2758-    pass
2759-
2760-from string import join
2761-import sys
2762-from errno import *
2763-from os import environ
2764-import re
2765-from fuseparts import __version__
2766-from fuseparts._fuse import main, FuseGetContext, FuseInvalidate
2767-from fuseparts._fuse import FuseError, FuseAPIVersion
2768-from fuseparts.subbedopts import SubOptsHive, SubbedOptFormatter
2769-from fuseparts.subbedopts import SubbedOptIndentedFormatter, SubbedOptParse
2770-from fuseparts.subbedopts import SUPPRESS_HELP, OptParseError
2771-from fuseparts.setcompatwrap import set
2772-
2773-
2774-##########
2775-###
2776-###  API specification API.
2777-###
2778-##########
2779-
2780-# The actual API version of this module
2781-FUSE_PYTHON_API_VERSION = (0, 2)
2782-
2783-def __getenv__(var, pattern = '.', trans = lambda x: x):
2784-    """
2785-    Fetch enviroment variable and optionally transform it. Return `None` if
2786-    variable is unset. Bail out if value of variable doesn't match (optional)
2787-    regex pattern.
2788-    """
2789-
2790-    if var not in environ:
2791-        return None
2792-    val = environ[var]
2793-    rpat = pattern
2794-    if not isinstance(rpat, type(re.compile(''))):
2795-        rpat = re.compile(rpat)
2796-    if not rpat.search(val):
2797-        raise RuntimeError("env var %s doesn't match required pattern %s" % \
2798-                           (var, `pattern`))
2799-    return trans(val)
2800-
2801-def get_fuse_python_api():
2802-    if fuse_python_api:
2803-        return fuse_python_api
2804-    elif compat_0_1:
2805-        # deprecated way of API specification
2806-        return (0,1)
2807-
2808-def get_compat_0_1():
2809-    return get_fuse_python_api() == (0, 1)
2810-
2811-# API version to be used
2812-fuse_python_api = __getenv__('FUSE_PYTHON_API', '^[\d.]+$',
2813-                              lambda x: tuple([int(i) for i in x.split('.')]))
2814-
2815-# deprecated way of API specification
2816-compat_0_1 = __getenv__('FUSE_PYTHON_COMPAT', '^(0.1|ALL)$', lambda x: True)
2817-
2818-fuse_python_api = get_fuse_python_api()
2819-
2820-##########
2821-###
2822-###  Parsing for FUSE.
2823-###
2824-##########
2825-
2826-
2827-
2828-class FuseArgs(SubOptsHive):
2829-    """
2830-    Class representing a FUSE command line.
2831-    """
2832-
2833-    fuse_modifiers = {'showhelp': '-ho',
2834-                      'showversion': '-V',
2835-                      'foreground': '-f'}
2836-
2837-    def __init__(self):
2838-
2839-        SubOptsHive.__init__(self)
2840-
2841-        self.modifiers = {}
2842-        self.mountpoint = None
2843-
2844-        for m in self.fuse_modifiers:
2845-            self.modifiers[m] = False
2846-
2847-    def __str__(self):
2848-        return '\n'.join(['< on ' + str(self.mountpoint) + ':',
2849-                          '  ' + str(self.modifiers), '  -o ']) + \
2850-               ',\n     '.join(self._str_core()) + \
2851-               ' >'
2852-
2853-    def getmod(self, mod):
2854-        return self.modifiers[mod]
2855-
2856-    def setmod(self, mod):
2857-        self.modifiers[mod] = True
2858-
2859-    def unsetmod(self, mod):
2860-        self.modifiers[mod] = False
2861-
2862-    def mount_expected(self):
2863-        if self.getmod('showhelp'):
2864-            return False
2865-        if self.getmod('showversion'):
2866-            return False
2867-        return True
2868-
2869-    def assemble(self):
2870-        """Mangle self into an argument array"""
2871-
2872-        self.canonify()
2873-        args = [sys.argv and sys.argv[0] or "python"]
2874-        if self.mountpoint:
2875-            args.append(self.mountpoint)
2876-        for m, v in self.modifiers.iteritems():
2877-            if v:
2878-                args.append(self.fuse_modifiers[m])
2879-
2880-        opta = []
2881-        for o, v in self.optdict.iteritems():
2882-                opta.append(o + '=' + v)
2883-        opta.extend(self.optlist)
2884-
2885-        if opta:
2886-            args.append("-o" + ",".join(opta))
2887-
2888-        return args
2889-
2890-    def filter(self, other=None):
2891-        """
2892-        Same as for SubOptsHive, with the following difference:
2893-        if other is not specified, `Fuse.fuseoptref()` is run and its result
2894-        will be used.
2895-        """
2896-
2897-        if not other:
2898-            other = Fuse.fuseoptref()
2899-
2900-        return SubOptsHive.filter(self, other)
2901-
2902-
2903-
2904-class FuseFormatter(SubbedOptIndentedFormatter):
2905-
2906-    def __init__(self, **kw):
2907-        if not 'indent_increment' in kw:
2908-            kw['indent_increment'] = 4
2909-        SubbedOptIndentedFormatter.__init__(self, **kw)
2910-
2911-    def store_option_strings(self, parser):
2912-        SubbedOptIndentedFormatter.store_option_strings(self, parser)
2913-        # 27 is how the lib stock help appears
2914-        self.help_position = max(self.help_position, 27)
2915-        self.help_width = self.width - self.help_position
2916-
2917-
2918-class FuseOptParse(SubbedOptParse):
2919-    """
2920-    This class alters / enhances `SubbedOptParse` so that it's
2921-    suitable for usage with FUSE.
2922-
2923-    - When adding options, you can use the `mountopt` pseudo-attribute which
2924-      is equivalent with adding a subopt for option ``-o``
2925-      (it doesn't require an option argument).
2926-
2927-    - FUSE compatible help and version printing.
2928-
2929-    - Error and exit callbacks are relaxed. In case of FUSE, the command
2930-      line is to be treated as a DSL [#]_. You don't wanna this module to
2931-      force an exit on you just because you hit a DSL syntax error.
2932-
2933-    - Built-in support for conventional FUSE options (``-d``, ``-f`, ``-s``).
2934-      The way of this can be tuned by keyword arguments, see below.
2935-
2936-    .. [#] http://en.wikipedia.org/wiki/Domain-specific_programming_language
2937-
2938-    Keyword arguments for initialization
2939-    ------------------------------------
2940-
2941-    standard_mods
2942-      Boolean [default is `True`].
2943-      Enables support for the usual interpretation of the ``-d``, ``-f``
2944-      options.
2945-
2946-    fetch_mp
2947-      Boolean [default is `True`].
2948-      If it's True, then the last (non-option) argument
2949-      (if there is such a thing) will be used as the FUSE mountpoint.
2950-
2951-    dash_s_do
2952-      String: ``whine``, ``undef``, or ``setsingle`` [default is ``whine``].
2953-      The ``-s`` option -- traditionally for asking for single-threadedness --
2954-      is an oddball: single/multi threadedness of a fuse-py fs doesn't depend
2955-      on the FUSE command line, we have direct control over it.
2956-
2957-      Therefore we have two conflicting principles:
2958-
2959-      - *Orthogonality*: option parsing shouldn't affect the backing `Fuse`
2960-        instance directly, only via its `fuse_args` attribute.
2961-
2962-      - *POLS*: behave like other FUSE based fs-es do. The stock FUSE help
2963-        makes mention of ``-s`` as a single-threadedness setter.
2964-
2965-      So, if we follow POLS and implement a conventional ``-s`` option, then
2966-      we have to go beyond the `fuse_args` attribute and set the respective
2967-      Fuse attribute directly, hence violating orthogonality.
2968-
2969-      We let the fs authors make their choice: ``dash_s_do=undef`` leaves this
2970-      option unhandled, and the fs author can add a handler as she desires.
2971-      ``dash_s_do=setsingle`` enables the traditional behaviour.
2972-
2973-      Using ``dash_s_do=setsingle`` is not problematic at all, but we want fs
2974-      authors be aware of the particularity of ``-s``, therefore the default is
2975-      the ``dash_s_do=whine`` setting which raises an exception for ``-s`` and
2976-      suggests the user to read this documentation.
2977-
2978-    dash_o_handler
2979-      Argument should be a SubbedOpt instance (created with
2980-      ``action="store_hive"`` if you want it to be useful).
2981-      This lets you customize the handler of the ``-o`` option. For example,
2982-      you can alter or suppress the generic ``-o`` entry in help output.
2983-    """
2984-
2985-    def __init__(self, *args, **kw):
2986-
2987-        self.mountopts = []
2988-
2989-        self.fuse_args = \
2990-            'fuse_args' in kw and kw.pop('fuse_args') or FuseArgs()
2991-        dsd = 'dash_s_do' in kw and kw.pop('dash_s_do') or 'whine'
2992-        if 'fetch_mp' in kw:
2993-            self.fetch_mp = bool(kw.pop('fetch_mp'))
2994-        else:
2995-            self.fetch_mp = True
2996-        if 'standard_mods' in kw:
2997-            smods = bool(kw.pop('standard_mods'))
2998-        else:
2999-            smods = True
3000-        if 'fuse' in kw:
3001-            self.fuse = kw.pop('fuse')
3002-        if not 'formatter' in kw:
3003-            kw['formatter'] = FuseFormatter()
3004-        doh = 'dash_o_handler' in kw and kw.pop('dash_o_handler')
3005-
3006-        SubbedOptParse.__init__(self, *args, **kw)
3007-
3008-        if doh:
3009-            self.add_option(doh)
3010-        else:
3011-            self.add_option('-o', action='store_hive',
3012-                            subopts_hive=self.fuse_args, help="mount options",
3013-                            metavar="opt,[opt...]")
3014-
3015-        if smods:
3016-            self.add_option('-f', action='callback',
3017-                            callback=lambda *a: self.fuse_args.setmod('foreground'),
3018-                            help=SUPPRESS_HELP)
3019-            self.add_option('-d', action='callback',
3020-                            callback=lambda *a: self.fuse_args.add('debug'),
3021-                            help=SUPPRESS_HELP)
3022-
3023-        if dsd == 'whine':
3024-            def dsdcb(option, opt_str, value, parser):
3025-                raise RuntimeError, """
3026-
3027-! If you want the "-s" option to work, pass
3028-!
3029-!   dash_s_do='setsingle'
3030-!
3031-! to the Fuse constructor. See docstring of the FuseOptParse class for an
3032-! explanation why is it not set by default.
3033-"""
3034-
3035-        elif dsd == 'setsingle':
3036-            def dsdcb(option, opt_str, value, parser):
3037-                self.fuse.multithreaded = False
3038-
3039-        elif dsd == 'undef':
3040-            dsdcb = None
3041-        else:
3042-            raise ArgumentError, "key `dash_s_do': uninterpreted value " + str(dsd)
3043-
3044-        if dsdcb:
3045-            self.add_option('-s', action='callback', callback=dsdcb,
3046-                            help=SUPPRESS_HELP)
3047-
3048-
3049-    def exit(self, status=0, msg=None):
3050-        if msg:
3051-            sys.stderr.write(msg)
3052-
3053-    def error(self, msg):
3054-        SubbedOptParse.error(self, msg)
3055-        raise OptParseError, msg
3056-
3057-    def print_help(self, file=sys.stderr):
3058-        SubbedOptParse.print_help(self, file)
3059-        print >> file
3060-        self.fuse_args.setmod('showhelp')
3061-
3062-    def print_version(self, file=sys.stderr):
3063-        SubbedOptParse.print_version(self, file)
3064-        self.fuse_args.setmod('showversion')
3065-
3066-    def parse_args(self, args=None, values=None):
3067-        o, a = SubbedOptParse.parse_args(self, args, values)
3068-        if a and self.fetch_mp:
3069-            self.fuse_args.mountpoint = a.pop()
3070-        return o, a
3071-
3072-    def add_option(self, *opts, **attrs):
3073-        if 'mountopt' in attrs:
3074-            if opts or 'subopt' in attrs:
3075-                raise OptParseError(
3076-                  "having options or specifying the `subopt' attribute conflicts with `mountopt' attribute")
3077-            opts = ('-o',)
3078-            attrs['subopt'] = attrs.pop('mountopt')
3079-            if not 'dest' in attrs:
3080-                attrs['dest'] = attrs['subopt']
3081-
3082-        SubbedOptParse.add_option(self, *opts, **attrs)
3083-
3084-
3085-
3086-##########
3087-###
3088-###  The FUSE interface.
3089-###
3090-##########
3091-
3092-
3093-
3094-class ErrnoWrapper(object):
3095-
3096-    def __init__(self, func):
3097-        self.func = func
3098-
3099-    def __call__(self, *args, **kw):
3100-        try:
3101-            return apply(self.func, args, kw)
3102-        except (IOError, OSError), detail:
3103-            # Sometimes this is an int, sometimes an instance...
3104-            if hasattr(detail, "errno"): detail = detail.errno
3105-            return -detail
3106-
3107-
3108-########### Custom objects for transmitting system structures to FUSE
3109-
3110-class FuseStruct(object):
3111-
3112-    def __init__(self, **kw):
3113-        for k in kw:
3114-             setattr(self, k, kw[k])
3115-
3116-
3117-class Stat(FuseStruct):
3118-    """
3119-    Auxiliary class which can be filled up stat attributes.
3120-    The attributes are undefined by default.
3121-    """
3122-
3123-    def __init__(self, **kw):
3124-        self.st_mode  = None
3125-        self.st_ino   = 0
3126-        self.st_dev   = 0
3127-        self.st_nlink = None
3128-        self.st_uid   = 0
3129-        self.st_gid   = 0
3130-        self.st_size  = 0
3131-        self.st_atime = 0
3132-        self.st_mtime = 0
3133-        self.st_ctime = 0
3134-
3135-        FuseStruct.__init__(self, **kw)
3136-
3137-
3138-class StatVfs(FuseStruct):
3139-    """
3140-    Auxiliary class which can be filled up statvfs attributes.
3141-    The attributes are 0 by default.
3142-    """
3143-
3144-    def __init__(self, **kw):
3145-
3146-        self.f_bsize   = 0
3147-        self.f_frsize  = 0
3148-        self.f_blocks  = 0
3149-        self.f_bfree   = 0
3150-        self.f_bavail  = 0
3151-        self.f_files   = 0
3152-        self.f_ffree   = 0
3153-        self.f_favail  = 0
3154-        self.f_flag    = 0
3155-        self.f_namemax = 0
3156-
3157-        FuseStruct.__init__(self, **kw)
3158-
3159-
3160-class Direntry(FuseStruct):
3161-    """
3162-    Auxiliary class for carrying directory entry data.
3163-    Initialized with `name`. Further attributes (each
3164-    set to 0 as default):
3165-
3166-    offset
3167-        An integer (or long) parameter, used as a bookmark
3168-        during directory traversal.
3169-        This needs to be set it you want stateful directory
3170-        reading.
3171-
3172-    type
3173-       Directory entry type, should be one of the stat type
3174-       specifiers (stat.S_IFLNK, stat.S_IFBLK, stat.S_IFDIR,
3175-       stat.S_IFCHR, stat.S_IFREG, stat.S_IFIFO, stat.S_IFSOCK).
3176-
3177-    ino
3178-       Directory entry inode number.
3179-
3180-    Note that Python's standard directory reading interface is
3181-    stateless and provides only names, so the above optional
3182-    attributes doesn't make sense in that context.
3183-    """
3184-
3185-    def __init__(self, name, **kw):
3186-
3187-        self.name   = name
3188-        self.offset = 0
3189-        self.type   = 0
3190-        self.ino    = 0
3191-
3192-        FuseStruct.__init__(self, **kw)
3193-
3194-
3195-class Flock(FuseStruct):
3196-    """
3197-    Class for representing flock structures (cf. fcntl(3)).
3198-   
3199-    It makes sense to give values to the `l_type`, `l_start`,
3200-    `l_len`, `l_pid` attributes (`l_whence` is not used by
3201-    FUSE, see ``fuse.h``).
3202-    """
3203-
3204-    def __init__(self, name, **kw):
3205-   
3206-        self.l_type  = None
3207-        self.l_start = None
3208-        self.l_len   = None
3209-        self.l_pid   = None
3210-
3211-        FuseStruct.__init__(self, **kw)
3212-
3213-
3214-class Timespec(FuseStruct):
3215-    """
3216-    Cf. struct timespec in time.h:
3217-    http://www.opengroup.org/onlinepubs/009695399/basedefs/time.h.html
3218-    """
3219-
3220-    def __init__(self, name, **kw):
3221-   
3222-        self.tv_sec  = None
3223-        self.tv_nsec = None
3224-
3225-        FuseStruct.__init__(self, **kw)
3226-
3227-
3228-class FuseFileInfo(FuseStruct):
3229-
3230-    def __init__(self, **kw):
3231-
3232-        self.keep      = False
3233-        self.direct_io = False
3234-
3235-        FuseStruct.__init__(self, **kw)
3236-
3237-
3238-
3239-########## Interface for requiring certain features from your underlying FUSE library.
3240-
3241-def feature_needs(*feas):
3242-    """
3243-    Get info about the FUSE API version needed for the support of some features.
3244-
3245-    This function takes a variable number of feature patterns.
3246-
3247-    A feature pattern is either:
3248-
3249-    -  an integer (directly referring to a FUSE API version number)
3250-    -  a built-in feature specifier string (meaning defined by dictionary)
3251-    -  a string of the form ``has_foo``, where ``foo`` is a filesystem method
3252-       (refers to the API version where the method has been introduced)
3253-    -  a list/tuple of other feature patterns (matches each of its members)
3254-    -  a regexp (meant to be matched against the builtins plus ``has_foo``
3255-       patterns; can also be given by a string of the from "re:*")
3256-    -  a negated regexp (can be given by a string of the form "!re:*")
3257-
3258-    If called with no arguments, then the list of builtins is returned, mapped
3259-    to their meaning.
3260-
3261-    Otherwise the function returns the smallest FUSE API version number which
3262-    has all the matching features.
3263-
3264-    Builtin specifiers worth to explicit mention:
3265-    - ``stateful_files``: you want to use custom filehandles (eg. a file class).
3266-    - ``*``: you want all features.
3267-    - while ``has_foo`` makes sense for all filesystem method ``foo``, some
3268-      of these can be found among the builtins, too (the ones which can be
3269-      handled by the general rule).
3270-
3271-    specifiers like ``has_foo`` refer to requirement that the library knows of
3272-      the fs method ``foo``.
3273-    """
3274-
3275-    fmap = {'stateful_files': 22,
3276-            'stateful_dirs':  23,
3277-            'stateful_io':    ('stateful_files', 'stateful_dirs'),
3278-            'stateful_files_keep_cache': 23,
3279-            'stateful_files_direct_io': 23,
3280-            'keep_cache':     ('stateful_files_keep_cache',),
3281-            'direct_io':      ('stateful_files_direct_io',),
3282-            'has_opendir':    ('stateful_dirs',),
3283-            'has_releasedir': ('stateful_dirs',),
3284-            'has_fsyncdir':   ('stateful_dirs',),
3285-            'has_create':     25,
3286-            'has_access':     25,
3287-            'has_fgetattr':   25,
3288-            'has_ftruncate':  25,
3289-            'has_fsinit':     ('has_init'),
3290-            'has_fsdestroy':  ('has_destroy'),
3291-            'has_lock':       26,
3292-            'has_utimens':    26,
3293-            'has_bmap':       26,
3294-            'has_init':       23,
3295-            'has_destroy':    23,
3296-            '*':              '!re:^\*$'}
3297-
3298-    if not feas:
3299-        return fmap
3300-
3301-    def resolve(args, maxva):
3302-
3303-        for fp in args:
3304-            if isinstance(fp, int):
3305-                maxva[0] = max(maxva[0], fp)
3306-                continue
3307-            if isinstance(fp, list) or isinstance(fp, tuple):
3308-                for f in fp:
3309-                    yield f
3310-                continue
3311-            ma = isinstance(fp, str) and re.compile("(!\s*|)re:(.*)").match(fp)
3312-            if isinstance(fp, type(re.compile(''))) or ma:
3313-                neg = False
3314-                if ma:
3315-                    mag = ma.groups()
3316-                    fp = re.compile(mag[1])
3317-                    neg = bool(mag[0])
3318-                for f in fmap.keys() + [ 'has_' + a for a in Fuse._attrs ]:
3319-                    if neg != bool(re.search(fp, f)):
3320-                        yield f
3321-                continue
3322-            ma = re.compile("has_(.*)").match(fp)
3323-            if ma and ma.groups()[0] in Fuse._attrs and not fp in fmap:
3324-                yield 21
3325-                continue
3326-            yield fmap[fp]
3327-
3328-    maxva = [0]
3329-    while feas:
3330-        feas = set(resolve(feas, maxva))
3331-
3332-    return maxva[0]
3333-
3334-
3335-def APIVersion():
3336-    """Get the API version of your underlying FUSE lib"""
3337-
3338-    return FuseAPIVersion()
3339-
3340-
3341-def feature_assert(*feas):
3342-    """
3343-    Takes some feature patterns (like in `feature_needs`).
3344-    Raises a fuse.FuseError if your underlying FUSE lib fails
3345-    to have some of the matching features.
3346-
3347-    (Note: use a ``has_foo`` type feature assertion only if lib support
3348-    for method ``foo`` is *necessary* for your fs. Don't use this assertion
3349-    just because your fs implements ``foo``. The usefulness of ``has_foo``
3350-    is limited by the fact that we can't guarantee that your FUSE kernel
3351-    module also supports ``foo``.)
3352-    """
3353-
3354-    fav = APIVersion()
3355-
3356-    for fea in feas:
3357-        fn = feature_needs(fea)
3358-        if fav < fn:
3359-            raise FuseError(
3360-              "FUSE API version %d is required for feature `%s' but only %d is available" % \
3361-              (fn, str(fea), fav))
3362-
3363-
3364-############# Subclass this.
3365-
3366-class Fuse(object):
3367-    """
3368-    Python interface to FUSE.
3369-
3370-    Basic usage:
3371-
3372-    - instantiate
3373-
3374-    - add options to `parser` attribute (an instance of `FuseOptParse`)
3375-
3376-    - call `parse`
3377-
3378-    - call `main`
3379-    """
3380-
3381-    _attrs = ['getattr', 'readlink', 'readdir', 'mknod', 'mkdir',
3382-              'unlink', 'rmdir', 'symlink', 'rename', 'link', 'chmod',
3383-              'chown', 'truncate', 'utime', 'open', 'read', 'write', 'release',
3384-              'statfs', 'fsync', 'create', 'opendir', 'releasedir', 'fsyncdir',
3385-              'flush', 'fgetattr', 'ftruncate', 'getxattr', 'listxattr',
3386-              'setxattr', 'removexattr', 'access', 'lock', 'utimens', 'bmap',
3387-              'fsinit', 'fsdestroy']
3388-
3389-    fusage = "%prog [mountpoint] [options]"
3390-
3391-    def __init__(self, *args, **kw):
3392-        """
3393-        Not much happens here apart from initializing the `parser` attribute.
3394-        Arguments are forwarded to the constructor of the parser class almost
3395-        unchanged.
3396-
3397-        The parser class is `FuseOptParse` unless you specify one using the
3398-        ``parser_class`` keyword. (See `FuseOptParse` documentation for
3399-        available options.)
3400-        """
3401-
3402-        if not fuse_python_api:
3403-            raise RuntimeError, __name__ + """.fuse_python_api not defined.
3404-
3405-! Please define """ + __name__ + """.fuse_python_api internally (eg.
3406-!
3407-! (1)  """ + __name__ + """.fuse_python_api = """ + `FUSE_PYTHON_API_VERSION` + """
3408-!
3409-! ) or in the enviroment (eg.
3410-!
3411-! (2)  FUSE_PYTHON_API=0.1
3412-!
3413-! ).
3414-!
3415-! If you are actually developing a filesystem, probably (1) is the way to go.
3416-! If you are using a filesystem written before 2007 Q2, probably (2) is what
3417-! you want."
3418-"""
3419-
3420-        def malformed():
3421-            raise RuntimeError, \
3422-                  "malformatted fuse_python_api value " + `fuse_python_api`
3423-        if not isinstance(fuse_python_api, tuple):
3424-            malformed()
3425-        for i in fuse_python_api:
3426-            if not isinstance(i, int) or i < 0:
3427-                malformed()
3428-
3429-        if fuse_python_api > FUSE_PYTHON_API_VERSION:
3430-            raise RuntimeError, """
3431-! You require FUSE-Python API version """ + `fuse_python_api` + """.
3432-! However, the latest available is """ + `FUSE_PYTHON_API_VERSION` + """.
3433-"""
3434-
3435-        self.fuse_args = \
3436-            'fuse_args' in kw and kw.pop('fuse_args') or FuseArgs()
3437-
3438-        if get_compat_0_1():
3439-            return self.__init_0_1__(*args, **kw)
3440-
3441-        self.multithreaded = True
3442-
3443-        if not 'usage' in kw:
3444-            kw['usage'] = self.fusage
3445-        if not 'fuse_args' in kw:
3446-            kw['fuse_args'] = self.fuse_args
3447-        kw['fuse'] = self
3448-        parserclass = \
3449-          'parser_class' in kw and kw.pop('parser_class') or FuseOptParse
3450-
3451-        self.parser = parserclass(*args, **kw)
3452-        self.methproxy = self.Methproxy()
3453-
3454-    def parse(self, *args, **kw):
3455-        """Parse command line, fill `fuse_args` attribute."""
3456-
3457-        ev = 'errex' in kw and kw.pop('errex')
3458-        if ev and not isinstance(ev, int):
3459-            raise TypeError, "error exit value should be an integer"
3460-
3461-        try:
3462-            self.cmdline = self.parser.parse_args(*args, **kw)
3463-        except OptParseError:
3464-          if ev:
3465-              sys.exit(ev)
3466-          raise
3467-
3468-        return self.fuse_args
3469-
3470-    def main(self, args=None):
3471-        """Enter filesystem service loop."""
3472-
3473-        if get_compat_0_1():
3474-            args = self.main_0_1_preamble()
3475-
3476-        d = {'multithreaded': self.multithreaded and 1 or 0}
3477-        d['fuse_args'] = args or self.fuse_args.assemble()
3478-
3479-        for t in 'file_class', 'dir_class':
3480-            if hasattr(self, t):
3481-                getattr(self.methproxy, 'set_' + t)(getattr(self,t))
3482-
3483-        for a in self._attrs:
3484-            b = a
3485-            if get_compat_0_1() and a in self.compatmap:
3486-                b = self.compatmap[a]
3487-            if hasattr(self, b):
3488-                c = ''
3489-                if get_compat_0_1() and hasattr(self, a + '_compat_0_1'):
3490-                    c = '_compat_0_1'
3491-                d[a] = ErrnoWrapper(self.lowwrap(a + c))
3492-
3493-        try:
3494-            main(**d)
3495-        except FuseError:
3496-            if args or self.fuse_args.mount_expected():
3497-                raise
3498-
3499-    def lowwrap(self, fname):
3500-        """
3501-        Wraps the fname method when the C code expects a different kind of
3502-        callback than we have in the fusepy API. (The wrapper is usually for
3503-        performing some checks or transfromations which could be done in C but
3504-        is simpler if done in Python.)
3505-
3506-        Currently `open` and `create` are wrapped: a boolean flag is added
3507-        which indicates if the result is to be kept during the opened file's
3508-        lifetime or can be thrown away. Namely, it's considered disposable
3509-        if it's an instance of FuseFileInfo.
3510-        """
3511-        fun = getattr(self, fname)
3512-
3513-        if fname in ('open', 'create'):
3514-            def wrap(*a, **kw):
3515-                res = fun(*a, **kw)
3516-                if not res or type(res) == type(0):
3517-                    return res
3518-                else:
3519-                    return (res, type(res) != FuseFileInfo)
3520-        elif fname == 'utimens':
3521-            def wrap(path, acc_sec, acc_nsec, mod_sec, mod_nsec):
3522-                ts_acc = Timespec(tv_sec = acc_sec, tv_nsec = acc_nsec)
3523-                ts_mod = Timespec(tv_sec = mod_sec, tv_nsec = mod_nsec)
3524-                return fun(path, ts_acc, ts_mod)
3525-        else:
3526-            wrap = fun
3527-
3528-        return wrap
3529-
3530-    def GetContext(self):
3531-        return FuseGetContext(self)
3532-
3533-    def Invalidate(self, path):
3534-        return FuseInvalidate(self, path)
3535-
3536-    def fuseoptref(cls):
3537-        """
3538-        Find out which options are recognized by the library.
3539-        Result is a `FuseArgs` instance with the list of supported
3540-        options, suitable for passing on to the `filter` method of
3541-        another `FuseArgs` instance.
3542-        """
3543-
3544-        import os, re
3545-
3546-        pr, pw = os.pipe()
3547-        pid = os.fork()
3548-        if pid == 0:
3549-             os.dup2(pw, 2)
3550-             os.close(pr)
3551-
3552-             fh = cls()
3553-             fh.fuse_args = FuseArgs()
3554-             fh.fuse_args.setmod('showhelp')
3555-             fh.main()
3556-             sys.exit()
3557-
3558-        os.close(pw)
3559-
3560-        fa = FuseArgs()
3561-        ore = re.compile("-o\s+([\w\[\]]+(?:=\w+)?)")
3562-        fpr = os.fdopen(pr)
3563-        for l in fpr:
3564-             m = ore.search(l)
3565-             if m:
3566-                 o = m.groups()[0]
3567-                 oa = [o]
3568-                 # try to catch two-in-one options (like "[no]foo")
3569-                 opa = o.split("[")
3570-                 if len(opa) == 2:
3571-                    o1, ox = opa
3572-                    oxpa = ox.split("]")
3573-                    if len(oxpa) == 2:
3574-                       oo, o2 = oxpa
3575-                       oa = [o1 + o2, o1 + oo + o2]
3576-                 for o in oa:
3577-                     fa.add(o)
3578-
3579-        fpr.close()
3580-        return fa
3581-
3582-    fuseoptref = classmethod(fuseoptref)
3583-
3584-
3585-    class Methproxy(object):
3586-
3587-        def __init__(self):
3588-
3589-            class mpx(object):
3590-               def __init__(self, name):
3591-                   self.name = name
3592-               def __call__(self, *a, **kw):
3593-                   return getattr(a[-1], self.name)(*(a[1:-1]), **kw)
3594-
3595-            self.proxyclass = mpx
3596-            self.mdic = {}
3597-            self.file_class = None
3598-            self.dir_class = None
3599-
3600-        def __call__(self, meth):
3601-            return meth in self.mdic and self.mdic[meth] or None
3602-
3603-        def _add_class_type(cls, type, inits, proxied):
3604-
3605-            def setter(self, xcls):
3606-
3607-                setattr(self, type + '_class', xcls)
3608-
3609-                for m in inits:
3610-                    self.mdic[m] = xcls
3611-
3612-                for m in proxied:
3613-                    if hasattr(xcls, m):
3614-                        self.mdic[m] = self.proxyclass(m)
3615-
3616-            setattr(cls, 'set_' + type + '_class', setter)
3617-
3618-        _add_class_type = classmethod(_add_class_type)
3619-
3620-    Methproxy._add_class_type('file', ('open', 'create'),
3621-                              ('read', 'write', 'fsync', 'release', 'flush',
3622-                               'fgetattr', 'ftruncate', 'lock'))
3623-    Methproxy._add_class_type('dir', ('opendir',),
3624-                              ('readdir', 'fsyncdir', 'releasedir'))
3625-
3626-
3627-    def __getattr__(self, meth):
3628-
3629-        m = self.methproxy(meth)
3630-        if m:
3631-            return m
3632-
3633-        raise AttributeError, "Fuse instance has no attribute '%s'" % meth
3634-
3635-
3636-
3637-##########
3638-###
3639-###  Compat stuff.
3640-###
3641-##########
3642-
3643-
3644-
3645-    def __init_0_1__(self, *args, **kw):
3646-
3647-        self.flags = 0
3648-        multithreaded = 0
3649-
3650-        # default attributes
3651-        if args == ():
3652-            # there is a self.optlist.append() later on, make sure it won't
3653-            # bomb out.
3654-            self.optlist = []
3655-        else:
3656-            self.optlist = args
3657-        self.optdict = kw
3658-
3659-        if len(self.optlist) == 1:
3660-            self.mountpoint = self.optlist[0]
3661-        else:
3662-            self.mountpoint = None
3663-
3664-        # grab command-line arguments, if any.
3665-        # Those will override whatever parameters
3666-        # were passed to __init__ directly.
3667-        argv = sys.argv
3668-        argc = len(argv)
3669-        if argc > 1:
3670-            # we've been given the mountpoint
3671-            self.mountpoint = argv[1]
3672-        if argc > 2:
3673-            # we've received mount args
3674-            optstr = argv[2]
3675-            opts = optstr.split(",")
3676-            for o in opts:
3677-                try:
3678-                    k, v = o.split("=", 1)
3679-                    self.optdict[k] = v
3680-                except:
3681-                    self.optlist.append(o)
3682-
3683-
3684-    def main_0_1_preamble(self):
3685-
3686-        cfargs = FuseArgs()
3687-
3688-        cfargs.mountpoint = self.mountpoint
3689-
3690-        if hasattr(self, 'debug'):
3691-            cfargs.add('debug')
3692-
3693-        if hasattr(self, 'allow_other'):
3694-            cfargs.add('allow_other')
3695-
3696-        if hasattr(self, 'kernel_cache'):
3697-            cfargs.add('kernel_cache')
3698-
3699-        return cfargs.assemble()
3700-
3701-
3702-    def getattr_compat_0_1(self, *a):
3703-        from os import stat_result
3704-
3705-        return stat_result(self.getattr(*a))
3706-
3707-
3708-    def statfs_compat_0_1(self, *a):
3709-
3710-        oout = self.statfs(*a)
3711-        lo = len(oout)
3712-
3713-        svf = StatVfs()
3714-        svf.f_bsize   = oout[0]                   # 0
3715-        svf.f_frsize  = oout[lo >= 8 and 7 or 0]  # 1
3716-        svf.f_blocks  = oout[1]                   # 2
3717-        svf.f_bfree   = oout[2]                   # 3
3718-        svf.f_bavail  = oout[3]                   # 4
3719-        svf.f_files   = oout[4]                   # 5
3720-        svf.f_ffree   = oout[5]                   # 6
3721-        svf.f_favail  = lo >= 9 and oout[8] or 0  # 7
3722-        svf.f_flag    = lo >= 10 and oout[9] or 0 # 8
3723-        svf.f_namemax = oout[6]                   # 9
3724-
3725-        return svf
3726-
3727-
3728-    def readdir_compat_0_1(self, path, offset, *fh):
3729-
3730-        for name, type in self.getdir(path):
3731-            de = Direntry(name)
3732-            de.type = type
3733-
3734-            yield de
3735-
3736-
3737-    compatmap = {'readdir': 'getdir'}
3738rmfile ./mac/fuse.py
3739hunk ./mac/fuseparts/__init__.py 1
3740-__version__ = "0.2"
3741rmfile ./mac/fuseparts/__init__.py
3742hunk ./mac/fuseparts/setcompatwrap.py 1
3743-try:
3744-  set()
3745-  set = set
3746-except:
3747-  from sets import Set as set
3748rmfile ./mac/fuseparts/setcompatwrap.py
3749hunk ./mac/fuseparts/subbedopts.py 1
3750-#
3751-#    Copyright (C) 2006  Csaba Henk  <csaba.henk@creo.hu>
3752-#
3753-#    This program can be distributed under the terms of the GNU LGPL.
3754-#    See the file COPYING.
3755-#
3756-# On 2009-09-21 Csaba Henk granted permission for this file to be
3757-# licensed under the same terms as Tahoe-LAFS itself.
3758-#
3759-
3760-from optparse import Option, OptionParser, OptParseError, OptionConflictError
3761-from optparse import HelpFormatter, IndentedHelpFormatter, SUPPRESS_HELP
3762-from fuseparts.setcompatwrap import set
3763-
3764-##########
3765-###
3766-###  Generic suboption parsing stuff.
3767-###
3768-##########
3769-
3770-
3771-
3772-class SubOptsHive(object):
3773-    """
3774-    Class for collecting unhandled suboptions.
3775-    """
3776-
3777-    def __init__(self):
3778-
3779-        self.optlist = set()
3780-        self.optdict = {}
3781-
3782-    def _str_core(self):
3783-
3784-        sa = []
3785-        for k, v in self.optdict.iteritems():
3786-             sa.append(str(k) + '=' + str(v))
3787-
3788-        ra = (list(self.optlist) + sa) or ["(none)"]
3789-        ra.sort()
3790-        return ra
3791-
3792-    def __str__(self):
3793-        return "< opts: " + ", ".join(self._str_core()) + " >"
3794-
3795-    def canonify(self):
3796-        """
3797-        Transform self to an equivalent canonical form:
3798-        delete optdict keys with False value, move optdict keys
3799-        with True value to optlist, stringify other values.
3800-        """
3801-
3802-        for k, v in self.optdict.iteritems():
3803-            if v == False:
3804-                self.optdict.pop(k)
3805-            elif v == True:
3806-                self.optdict.pop(k)
3807-                self.optlist.add(v)
3808-            else:
3809-                self.optdict[k] = str(v)
3810-
3811-    def filter(self, other):
3812-        """
3813-        Throw away those options which are not in the other one.
3814-        Returns a new instance with the rejected options.
3815-        """
3816-
3817-        self.canonify()
3818-        other.canonify()
3819-
3820-        rej = self.__class__()
3821-        rej.optlist = self.optlist.difference(other.optlist)
3822-        self.optlist.difference_update(rej.optlist)
3823-        for x in self.optdict.copy():
3824-             if x not in other.optdict:
3825-                 self.optdict.pop(x)
3826-                 rej.optdict[x] = None
3827-
3828-        return rej
3829-
3830-    def add(self, opt, val=None):
3831-        """Add a suboption."""
3832-
3833-        ov = opt.split('=', 1)
3834-        o = ov[0]
3835-        v = len(ov) > 1 and ov[1] or None
3836-
3837-        if (v):
3838-            if val != None:
3839-                raise AttributeError, "ambiguous option value"
3840-            val = v
3841-
3842-        if val == False:
3843-            return
3844-
3845-        if val in (None, True):
3846-            self.optlist.add(o)
3847-        else:
3848-            self.optdict[o] = val
3849-
3850-
3851-
3852-class SubbedOpt(Option):
3853-    """
3854-    `Option` derivative enhanced with the attribute of being a suboption of
3855-     some other option (like ``foo`` and ``bar`` for ``-o`` in ``-o foo,bar``).
3856-    """
3857-
3858-    ATTRS = Option.ATTRS + ["subopt", "subsep", "subopts_hive"]
3859-    ACTIONS = Option.ACTIONS + ("store_hive",)
3860-    STORE_ACTIONS = Option.STORE_ACTIONS + ("store_hive",)
3861-    TYPED_ACTIONS = Option.TYPED_ACTIONS + ("store_hive",)
3862-
3863-    def __init__(self, *opts, **attrs):
3864-
3865-       self.subopt_map = {}
3866-
3867-       if "subopt" in attrs:
3868-           self._short_opts = []
3869-           self._long_opts = []
3870-           self._set_opt_strings(opts)
3871-           self.baseopt = self._short_opts[0] or self._long_opts[0]
3872-           opts = ()
3873-
3874-       Option.__init__(self, *opts, **attrs)
3875-
3876-    def __str__(self):
3877-        pf = ""
3878-        if hasattr(self, "subopt") and self.subopt:
3879-            pf = " %s...,%s,..." % (self.baseopt, self.subopt)
3880-        return Option.__str__(self) + pf
3881-
3882-    def _check_opt_strings(self, opts):
3883-        return opts
3884-
3885-    def _check_dest(self):
3886-        try:
3887-            Option._check_dest(self)
3888-        except IndexError:
3889-            if self.subopt:
3890-                self.dest = "__%s__%s" % (self.baseopt, self.subopt)
3891-                self.dest = self.dest.replace("-", "")
3892-            else:
3893-                raise
3894-
3895-    def get_opt_string(self):
3896-        if hasattr(self, 'subopt'):
3897-            return self.subopt
3898-        else:
3899-            return Option.get_opt_string(self)
3900-
3901-    def take_action(self, action, dest, opt, value, values, parser):
3902-        if action == "store_hive":
3903-            if not hasattr(values, dest) or getattr(values, dest) == None:
3904-                 if hasattr(self, "subopts_hive") and self.subopts_hive:
3905-                     hive = self.subopts_hive
3906-                 else:
3907-                     hive = parser.hive_class()
3908-                 setattr(values, dest, hive)
3909-            for o in value.split(self.subsep or ","):
3910-                oo = o.split('=')
3911-                ok = oo[0]
3912-                ov = None
3913-                if (len(oo) > 1):
3914-                    ov = oo[1]
3915-                if ok in self.subopt_map:
3916-                    self.subopt_map[ok].process(ok, ov, values, parser)
3917-                else:
3918-                    getattr(values, dest).add(*oo)
3919-            return
3920-        Option.take_action(self, action, dest, opt, value, values, parser)
3921-
3922-    def register_sub(self, o):
3923-        """Register argument a suboption for `self`."""
3924-
3925-        if o.subopt in self.subopt_map:
3926-            raise OptionConflictError(
3927-              "conflicting suboption handlers for `%s'" % o.subopt,
3928-              o)
3929-        self.subopt_map[o.subopt] = o
3930-
3931-    CHECK_METHODS = []
3932-    for m in Option.CHECK_METHODS:
3933-        #if not m == Option._check_dest:
3934-        if not m.__name__ == '_check_dest':
3935-            CHECK_METHODS.append(m)
3936-    CHECK_METHODS.append(_check_dest)
3937-
3938-
3939-
3940-class SubbedOptFormatter(HelpFormatter):
3941-
3942-    def format_option_strings(self, option):
3943-        if hasattr(option, "subopt") and option.subopt:
3944-            res = '-o ' + option.subopt
3945-            if option.takes_value():
3946-                res += "="
3947-                res += option.metavar or 'FOO'
3948-            return res
3949-
3950-        return HelpFormatter.format_option_strings(self, option)
3951-
3952-
3953-
3954-class SubbedOptIndentedFormatter(IndentedHelpFormatter, SubbedOptFormatter):
3955-
3956-    def format_option_strings(self, option):
3957-        return SubbedOptFormatter.format_option_strings(self, option)
3958-
3959-
3960-
3961-class SubbedOptParse(OptionParser):
3962-    """
3963-    This class alters / enhances `OptionParser` with *suboption handlers*.
3964-
3965-    That is, calling `sop.add_option('-x', subopt=foo)` installs a handler
3966-    which will be triggered if there is ``-x foo`` in the command line being
3967-    parsed (or, eg., ``-x foo,bar``).
3968-
3969-    Moreover, ``-x`` implicitly gets a handler which collects the unhandled
3970-    suboptions of ``-x`` into a `SubOptsHive` instance (accessible post festam
3971-    via the `x` attribute of the returned Values object). (The only exception
3972-    is when ``-x`` has *explicitly*  been added with action ``store_hive``.
3973-    This opens up the possibility of customizing the ``-x`` handler at some
3974-    rate.)
3975-
3976-    Suboption handlers have all the nice features of normal option handlers,
3977-    eg. they are displayed in the automatically generated help message
3978-    (and can have their own help info).
3979-    """
3980-
3981-    def __init__(self, *args, **kw):
3982-
3983-         if not 'formatter' in kw:
3984-             kw['formatter'] = SubbedOptIndentedFormatter()
3985-         if not 'option_class' in kw:
3986-             kw['option_class'] = SubbedOpt
3987-         if 'hive_class' in kw:
3988-             self.hive_class = kw.pop('hive_class')
3989-         else:
3990-             self.hive_class = SubOptsHive
3991-
3992-         OptionParser.__init__(self, *args, **kw)
3993-
3994-    def add_option(self, *args, **kwargs):
3995-        if 'action' in kwargs and kwargs['action'] == 'store_hive':
3996-            if 'subopt' in kwargs:
3997-                raise OptParseError(
3998-                  """option can't have a `subopt' attr and `action="store_hive"' at the same time""")
3999-            if not 'type' in kwargs:
4000-                kwargs['type'] = 'string'
4001-        elif 'subopt' in kwargs:
4002-            o = self.option_class(*args, **kwargs)
4003-
4004-            oo = self.get_option(o.baseopt)
4005-            if oo:
4006-                if oo.action != "store_hive":
4007-                    raise OptionConflictError(
4008-                      "can't add subopt as option has already a handler that doesn't do `store_hive'",
4009-                      oo)
4010-            else:
4011-                self.add_option(o.baseopt, action='store_hive',
4012-                                metavar="sub1,[sub2,...]")
4013-                oo = self.get_option(o.baseopt)
4014-
4015-            oo.register_sub(o)
4016-
4017-            args = (o,)
4018-            kwargs = {}
4019-
4020-        return OptionParser.add_option(self, *args, **kwargs)
4021rmfile ./mac/fuseparts/subbedopts.py
4022rmdir ./mac/fuseparts
4023hunk ./mac/setup.py 1
4024-#!/usr/bin/env python
4025-
4026-from setuptools import setup
4027-import py2app
4028-
4029-import glob
4030-import os
4031-import sys
4032-
4033-# pull in formless, as best way to grab its .css file depenedency
4034-import formless
4035-
4036-def find_formless_css():
4037-    fpath = formless.__path__[0]
4038-    # first look for it from a regular package install
4039-    f = os.path.join(fpath, 'freeform-default.css')
4040-    if os.path.exists(f):
4041-        return f
4042-    # then try looking within .egg structured files
4043-    pyver = 'python%s.%s' % (sys.version_info[0], sys.version_info[1])
4044-    f = os.path.join(fpath, '../lib', pyver, 'site-packages/formless/freeform-default.css')
4045-    if os.path.exists(f):
4046-        return f
4047-    raise RuntimeError("Can't find formless .css file")
4048-
4049-data_files = [
4050-     ('pkg_resources/allmydata/web', glob.glob('../src/allmydata/web/*')),
4051-     ('pkg_resources/formless', [find_formless_css()]),
4052-     ]
4053-
4054-from setuptools import find_packages
4055-
4056-packages = find_packages('../src')
4057-
4058-py2app_options = {
4059-    'argv_emulation': True,
4060-    'iconfile': 'allmydata.icns',
4061-    'plist': { 'CFBundleIconFile': 'allmydata.icns', },
4062-    }
4063-
4064-setup_args = {
4065-    'name': 'Allmydata',
4066-    'description': 'The various parts of the Allmydata Tahoe system',
4067-    'author': 'Allmydata, Inc.',
4068-    'app': [ 'allmydata_tahoe.py' ],
4069-    'options': { 'py2app': py2app_options },
4070-    'data_files': data_files,
4071-    'setup_requires': [ 'py2app', 'macholib>=1.2' ],
4072-    'packages': packages,
4073-}
4074-
4075-
4076-if __name__ == '__main__':
4077-    if not os.path.exists('allmydata'):
4078-        os.symlink('../src/allmydata', 'allmydata')
4079-    setup(**setup_args)
4080-
4081-junk = [formless, py2app]
4082-del junk
4083-
4084-
4085-
4086-
4087rmfile ./mac/setup.py
4088rmdir ./mac
4089}
4090[NEWS: remove unmaintained Mac GUI app. refs #1282
4091david-sarah@jacaranda.org**20101226020858
4092 Ignore-this: 40474a07f4a550b48563d35350be7ab5
4093] hunk ./NEWS 3
4094 User visible changes in Tahoe-LAFS.  -*- outline; coding: utf-8 -*-
4095 
4096+* Trunk, post-1.8.1
4097+
4098+** Removals
4099+
4100+ - The unmaintained GUI application for Mac OS X has been removed. (#1282)
4101+
4102+
4103 * Release 1.8.1 (2010-10-28)
4104 
4105 ** Bugfixes and Improvements
4106[Remove the Makefile targets relating to the Mac GUI app. refs #1282
4107david-sarah@jacaranda.org**20101226025859
4108 Ignore-this: 75303be783974b41138744ec62b07965
4109] hunk ./Makefile 433
4110 windows-installer-upload:
4111        $(RUNPP) -c "$(MAKE) -C windows windows-installer-upload"
4112 
4113-
4114-# These targets provide for mac native builds
4115-.PHONY: mac-exe mac-upload mac-cleanup mac-dbg
4116-
4117-mac-exe: .built
4118-       $(MAKE) -C mac clean
4119-       VERSION=$(VER) $(RUNPP) -c "$(MAKE) -C mac build"
4120-
4121-mac-dist:
4122-       VERSION=$(VER) $(MAKE) -C mac diskimage
4123-
4124-mac-upload:
4125-       VERSION=$(VER) $(MAKE) -C mac upload
4126-
4127-mac-cleanup:
4128-       VERSION=$(VER) $(MAKE) -C mac cleanup
4129-
4130-mac-dbg:
4131-       cd mac && $(PP) $(PYTHON)w allmydata_tahoe.py
4132-
4133-
4134[Remove unmaintained Windows GUI app, except for windows/tahoesvc.py which is moved to src/allmydata/windows. refs #1282
4135david-sarah@jacaranda.org**20101226040237
4136 Ignore-this: cae37b6622a7dd5940acc7d3e6a98b90
4137] {
4138move ./windows/tahoesvc.py ./src/allmydata/windows/tahoesvc.py
4139hunk ./windows/Makefile 1
4140-
4141-# we get $(PYTHON) from our parent, do 'make windows-exe PYTHON=foo' to
4142-# control it, since 'PYTHON=foo make windows-exe' doesn't seem to override
4143-# the default.
4144-
4145-# We also get $(PYTHONPATH) from our parent, which is critical for py2exe to
4146-# find the tahoe code. Invoking this Makefile directly won't work.
4147-
4148-INNOSETUP := $(shell cygpath -au "$(PROGRAMFILES)/Inno Setup 5/Compil32.exe")
4149-
4150-.PHONY: windows-exe windows-installer windows-installer-upload
4151-
4152-windows-exe.stamp:
4153-       $(PYTHON) setup.py py2exe
4154-       touch windows-exe.stamp
4155-windows-exe: windows-exe.stamp
4156-
4157-windows-installer: windows-exe.stamp
4158-       $(PYTHON) ../misc/sub-ver.py installer.tmpl >installer.iss
4159-       "$(INNOSETUP)" /cc installer.iss
4160-
4161-windows-installer-upload:
4162-       chmod -R o+rx dist/installer
4163-       rsync -av -e /usr/bin/ssh dist/installer/ amduser@dev:/home/amduser/public_html/dist/tahoe/windows/
4164-
4165rmfile ./windows/Makefile
4166binary ./windows/amdicon.ico
4167oldhex
4168*0000010007001818100001000400e8010000760000001818000001002000880900005e02000020
4169*20100001000400e8020000e60b0000101010000100040028010000ce0e00001010000001002000
4170*68040000f60f00002020000001002000a81000005e1400003030000001002000a8250000062500
4171*002800000018000000300000000100040000000000800100000000000000000000000000000000
4172*0000357e0c00517c300028a0100049931c0007c722006aa34b002ed248005ed060008ebb6f008e
4173*c97a0076e18700808080009fe6a700b1f3c300edf9ee0000000000fffff00000000000000fffff
4174*ffff0444444444444440ffffffff0444444444444440ffffffff0444444200444440ffffffff04
4175*444440f0444440ffffffff04446440f0444440ffffffff04464440f0444440ffffffff04664620
4176*f0044440ffffffff0466640fff044440ffffffff07a7760fff0667a0ffffffff07caca20f00aaa
4177*c0ffffffff0cccac9335acccc0ffffffff0cccccccccccccc0ffffffff0cccccccccccccc0ffff
4178*ffff0cccccccccccccc0fffffffff10dc0000000cc0fffffffffff0dc0fffff0ccffffffffffff
4179*0ec0fffff0ccffffffffffff0ec0fffff0ccffffffffffff0ee50fff09ecfffffffffffff9ee80
4180*139eeffffffffffffff3ceeeeeee9fffffffffffffff39eeeee5fffffffffffffffff138853fff
4181*fffffff8001ffff0000ffff0000ffff0000ffff0080ffff0080ffff0080ffff0080ffff01c0fff
4182*f01c0ffff0080ffff0000ffff0000ffff0000ffff0000ffff8001ffffc3e3ffffc3e3ffffc3e3f
4183*fffc1c3ffffe007ffffe007fffff00ffffff81ffff280000001800000030000000010020000000
4184*000060090000000000000000000000000000000000000000000000000000000000000000000000
4185*0000004b971dff4b971dff4b971dff4b971dff4b971dff4b971dff4b971dff4b971dff4b971dff
4186*4b971dff4b971dff4b971dff4b971dff4b971dff00000000000000000000000000000000000000
4187*00000000000000000000000000000000004b971dff11ae05ff00ca21ff00c81dff00c81dff00c8
4188*1dff00c81dff00c81dff00c81eff00c81dff00c81dff00c81dff00c81dff00c81dff00c81eff43
4189*8f13ff00000000000000000000000000000000000000000000000000000000000000004b971dff
4190*12ba14ff00c81fff03c51dff02c51dff01c51dff01c51dff00c61dff00c71aff01c61eff01c51d
4191*ff01c51dff01c51dff04c41dff00cb1eff438f13ff000000000000000000000000000000000000
4192*00000000000000000000000000004b971dff14b914ff01c921ff02c61dff01c51dff00c61dff04
4193*c21bff2a9809ff3e8711ff1fa30cff00c61dff01c51dff01c51dff03c41dff00ca1eff438f13ff
4194*00000000000000000000000000000000000000000000000000000000000000004b971dff1bba1b
4195*ff08cc2aff08c722ff04c61fff02c71eff03c118ff359011ff000000001f9e02ff01c61fff01c5
4196*1dff01c51dff03c41dff00ca1eff438f13ff000000000000000000000000000000000000000000
4197*00000000000000000000004b971dff22bc20ff14ce33ff12c92bff0fc928ff0ac926ff08c41cff
4198*359214ff000000001ea005ff01c61eff01c51dff01c51dff03c41dff00ca1eff438f13ff000000
4199*00000000000000000000000000000000000000000000000000000000004b971dff2abe26ff1ed1
4200*3cff1ccb34ff19cb31ff14cc2fff13c427ff33910cff000000001e9e00ff05c824ff01c61dff01
4201*c51dff03c41dff00ca1eff438f13ff000000000000000000000000000000000000000000000000
4202*00000000000000004b971dff2ebf2aff28d345ff26cd3dff23ce3aff20cd3aff22a70bff50832b
4203*ff000000003e8812ff16b211ff0aca28ff07c721ff05c51fff00ca1dff438f13ff000000000000
4204*00000000000000000000000000000000000000000000000000004b971dff4ac543ff39d655ff2d
4205*ce42ff29d245ff25c22aff52822bff0000000000000000000000003e8d17ff0ec925ff0cc927ff
4206*09c622ff0bce2cff438f13ff000000000000000000000000000000000000000000000000000000
4207*00000000004b971dff68cc5eff79e48dff59d86aff47d961ff36c236ff527e2eff000000000000
4208*000000000000418916ff28ce3bff33d14aff44d457ff6fe585ff438f13ff000000000000000000
4209*00000000000000000000000000000000000000000000004b971dff6dcd63ff8be99eff86e293ff
4210*8be699ff7cda84ff39940bff4b8425ff000000003b7e10ff4aa526ff83e393ff8ae597ff88e394
4211*ff8deca1ff438f13ff000000000000000000000000000000000000000000000000000000000000
4212*00004b971dff75cf6aff97eca8ff8ee59aff8fe59bff93e9a1ff80d47fff51a42dff539931ff59
4213*ae3eff8cde92ff92e89fff8fe69bff8ee498ff97eea9ff438f13ff000000000000000000000000
4214*00000000000000000000000000000000000000004b971dff7cd071ffa3edb2ff9ae7a4ff9ce8a7
4215*ff9be7a6ff9eeaa9ff9de8a9ff97e6a0ff9ee9a9ff9de9a8ff9be7a6ff9ce8a7ff9ae6a3ffa4ef
4216*b4ff438f13ff00000000000000000000000000000000000000000000000000000000000000004b
4217*971dff87d47dffb0f2c1ffa4e9aeffa7ebb1ffa8ebb2ffa8ebb3ffa9ebb4ffaaecb6ffa8ebb3ff
4218*a8ebb3ffa8ebb2ffa6eab0ffa3e8adffb3f5c6ff438f13ff000000000000000000000000000000
4219*00000000000000000000000000000000004b971dff6ebd52ffaeeab7ffb2edbbffb0ecb8ffaceb
4220*b3ffa8ebacffa9ebadffa9ebacffa8ebacffa9ebadffaeebb5ffb0edb8ffb2eebcffa4e5a7ff43
4221*8f13ff000000000000000000000000000000000000000000000000000000000000000000000000
4222*5d8543ff5ca636ffc8f8d5ff91cf85ff539a2bff65984aff639948ff639948ff64994aff609743
4223*ff59a233ffabe2aaff438f13ff438f13ff00000000000000000000000000000000000000000000
4224*0000000000000000000000000000000000000000000063a241ffd5fde0ff8cc977ff448217ff00
4225*00000000000000000000000000000000000000428e0fffb0e0acff438f13ff0000000000000000
4226*000000000000000000000000000000000000000000000000000000000000000000000000000000
4227*0064a342ffe0feeaff92ca7cff48851eff00000000000000000000000000000000000000004791
4228*17ffb9e2b4ff438f13ff0000000000000000000000000000000000000000000000000000000000
4229*0000000000000000000000000000000000000068a446ffecfff4ffb0daa3ff3e860eff00000000
4230*000000000000000000000000000000004e9820ffd6f1d7ff438f13ff0000000000000000000000
4231*0000000000000000000000000000000000000000000000000000000000000000000000000063a2
4232*3effe5f7e6ffebfbf0ff6dad46ff307e08ff0000000000000000000000002a8100ff96c57dfff7
4233*ffffff438f13ff0000000000000000000000000000000000000000000000000000000000000000
4234*000000000000000000000000000000004a8e20ffa1cc88ffffffffffe5f1e2ff7fb561ff498e1c
4235*ff508c26ff4e941eff9dc786fff3faf4fffefeffff438f13ff0000000000000000000000000000
4236*000000000000000000000000000000000000000000000000000000000000000000000000000046
4237*8b17ffbad9a6ffffffffffffffffffe5f1deffd9eacdfff4f8f2ffffffffffffffffff91c26fff
4238*000000000000000000000000000000000000000000000000000000000000000000000000000000
4239*000000000000000000000000000000000000000000498c1cff99c37cffe6efe0ffffffffffffff
4240*fffffefdfeffd6e5cbff7bb254ff00000000000000000000000000000000000000000000000000
4241*000000000000000000000000000000000000000000000000000000000000000000000000000000
4242*00000000507a33ff549a2dff7fb15bff8ebb6fff74ad4eff4f9321ff0000000000000000000000
4243*00000000000000000000000000000000000000000000000000f8001ffff0000ffff0000ffff000
4244*0ffff0080ffff0080ffff0080ffff0080ffff01c0ffff01c0ffff0080ffff0000ffff0000ffff0
4245*000ffff0000ffff8001ffffc3e3ffffc3e3ffffc3e3ffffc1c3ffffc003ffffe007fffff00ffff
4246*ff81ffff2800000020000000400000000100040000000000800200000000000000000000000000
4247*00000000002f9104004b971d0006c8220076b5580030d1460068d46e0082b9650089c8780078e1
4248*8700808080009fe8a800cce1be00bbf0c300e9f9eb000000000000000000eeeeeee10101010101
4249*11111111eeeeeeeeeeee002222222222222222200eeeeeeeeeee122222222222222222221eeeee
4250*eeeeee122222222202222222220eeeeeeeeeee122222222000222222221eeeeeeeeeee12222222
4251*20e0222222220eeeeeeeeeee1222222220e0222222221eeeeeeeeeee1242222220e0222222221e
4252*eeeeeeeeee1242424220e0022222221eeeeeeeeeee1442422400e0022222221eeeeeeeeeee1444
4253*44400eee002222221eeeeeeeeeee15444440eeeee02422241eeeeeeeeeee18855440eeeee04244
4254*881eeeeeeeeeee18888881eeeee15888881eeeeeeeeeee18a8a88501e0038a8a8a1eeeeeeeeeee
4255*18aa8aaa51135aaa8aa81eeeeeeeeeee1aaaaaaaaaaaaaaaaaaa1eeeeeeeeeee1acaaaaaaaaaaa
4256*aacaaa1eeeeeeeeeee1aaaacaccaccacaaaaca1eeeeeeeeeee16ccccbccbccbbcbccc61eeeeeee
4257*eeeee11cc71111111136cc10eeeeeeeeeeeeee1cc70eeeeeee06bc1eeeeeeeeeeeeeee1cc60eee
4258*eeee06bb1eeeeeeeeeeeeeee1cd70eeeeeee06dd1eeeeeeeeeeeeeee1db70eeeeeee07db1eeeee
4259*eeeeeeeeee1ddd0eeeeeee0ddd1eeeeeeeeeeeeeee1bddb0eeeee0bddb1eeeeeeeeeeeeeee11dd
4260*db11001bddd11eeeeeeeeeeeeeeee06ddddbbddddd60eeeeeeeeeeeeeeeeee06ddddddddd60eee
4261*eeeeeeeeeeeeeeeee01adddddb10eeeeeeeeeeeeeeeeeeeeeee0013100eeeeeeeeeeeefe00003f
4262*fc00001ffc00001ffc00001ffc00001ffc00801ffc00801ffc00801ffc00801ffc00801ffc01c0
4263*1ffc03e01ffc03e01ffc03e01ffc00801ffc00001ffc00001ffc00001ffc00001ffc00001ffe00
4264*003fff07f07fff07f07fff07f07fff07f07fff07f07fff03e07fff00007fff8000ffffc001ffff
4265*e003fffff80fff2800000010000000200000000100040000000000c00000000000000000000000
4266*0000000000000000378a020019aa100029a817001dbf2700529f2a0006c8210069b8530030d247
4267*0069d4700086ba68008cc072007be28a0080808000a2e4a600cde1bf00f5fbf400000011111111
4268*000000015551155510000001555005551000000255500555100000027330015510000002772001
4269*5510000006b820048b60000006dd8208dd60000006dddddddd60000004dddddddd40000000d900
4270*009d00000000d90000ad00000000aa0000aa000000004f4004f40000000009feef900000000000
4271*49a4000000e007ffffe007ffffe007ffffe007ffffe007ffffe007ffffe187ffffe007ffffe007
4272*ffffe007ffffe007ffffe3c7ffffe187fffff00ffffff00ffffff81fffff280000001000000020
4273*000000010020000000000040040000000000000000000000000000000000000000000000000000
4274*00000000338d02cf1fa40dff1ca80fff1ca80fff1ca80fff1ca80fff1ca80fff1ca80fff1ca80f
4275*ff338d02cf0000000000000000000000000000000000000000000000001ca80fff01c71dff01c7
4276*1dff01c71dff0fb716ff0fb716ff01c71dff01c71dff01c71dff1ca80fff000000000000000000
4277*00000000000000000000000000000020a812ff05c821ff02c71eff01c71dff378800df378800df
4278*01c71dff01c71dff01c71dff1ca80fff0000000000000000000000000000000000000000000000
4279*0027aa19ff13cb2dff0eca28ff08c923ff378800bf378800bf01c71dff01c71dff01c71dff1ca8
4280*0fff0000000000000000000000000000000000000000000000002fac1fff22cf3bff1dcd36ff1d
4281*bf27ff378800bf378800bf0fbc1bff03c81fff01c71dff1ca80fff000000000000000000000000
4282*00000000000000000000000041b030ff35d34bff2cd143ff32a015ef37880020378800202b9e0f
4283*ef10cb2aff0ac925ff25aa17ff0000000000000000000000000000000000000000000000005bb6
4284*47ff7be28aff65dd76ff41a01fdf00000000000000003e9f1ddf55da68ff6cdf7dff5bb647ff00
4285*000000000000000000000000000000000000000000000063b74eff90e79cff90e79cff75c96cff
4286*3f900ebf3f900ebf75c96cff90e79cff90e79cff63b74eff000000000000000000000000000000
4287*0000000000000000006cb955ffa0ebabffa0ebabffa0ebabffa0ebabffa0ebabffa0ebabffa0eb
4288*abffa0ebabff6cb955ff0000000000000000000000000000000000000000000000005ca839ffa8
4289*e7adffb0eeb9ffb0eeb9ffb0eeb9ffb0eeb9ffb0eeb9ffb0eeb9ffb0eeb9ff5ca839ff00000000
4290*0000000000000000000000000000000000000000378800709ed796ff7cbd64ff37880080378800
4291*8037880080378800807cbd64ff9ed796ff37880070000000000000000000000000000000000000
4292*00000000000037880040abdaa1ff84bf6bff0000000000000000000000000000000084bf6bffab
4293*daa1ff378800400000000000000000000000000000000000000000000000003788004096c780ff
4294*97c781ff37880060000000000000000037880060a2ce8fff8cc072ff3788004000000000000000
4295*0000000000000000000000000000000000000000004f9720efe6f5e4ff5d9f32ef378800803788
4296*008f5d9f32eff2fcf3ff4f9720ef00000000000000000000000000000000000000000000000000
4297*000000000000003788006081b45ffffefffeffcde1bfffcde1bffffefffeff81b45fff37880050
4298*000000000000000000000000000000000000000000000000000000000000000000000000378800
4299*50549924df8fbc70ff8fbc70ff549924df37880050000000000000000000000000000000000000
4300*0000e007ffffe007ffffe007ffffe007ffffe007ffffe007ffffe187ffffe007ffffe007ffffe0
4301*07ffffe007ffffe3c7ffffe187fffff00ffffff00ffffff81fffff280000002000000040000000
4302*010020000000000080100000000000000000000000000000000000000000000000000000000000
4303*000000000000000000000000000000000049951aac49951a8549951a7849951a6749951a584995
4304*1a4849951a4149951a3849951a3049951a2949951a2149951a1d49951a1649951a1249951a0d49
4305*951a0949951a0549951a0349951a03000000000000000000000000000000000000000000000000
4306*000000000000000000000000000000000000000000000000378800af12b314ff01c71dff01c71d
4307*ff01c71dff01c71dff01c71dff01c71dff01c71dff01c71dff01c71dff01c71dff01c71dff01c7
4308*1dff01c71dff01c71dff01c71dff01c71dff01c71dff12b314ff378800bf000000000000000000
4309*000000000000000000000000000000000000000000000000000000000000000000000049951a02
4310*01c71dff01c71dff01c71dff01c71dff01c71dff01c71dff01c71dff01c71dff01c71dff01c71d
4311*ff01c71dff01c71dff01c71dff01c71dff01c71dff01c71dff01c71dff01c71dff01c71dff4995
4312*1a7f00000000000000000000000000000000000000000000000000000000000000000000000000
4313*0000000000000049951a0301c71dff01c71dff01c71dff01c71dff01c71dff01c71dff01c71dff
4314*01c71dff01c71dff01c71dff01c71dff01c71dff01c71dff01c71dff01c71dff01c71dff01c71d
4315*ff01c71dff01c71dff49951a620000000000000000000000000000000000000000000000000000
4316*00000000000000000000000000000000000049951a0504c820ff02c71eff01c71dff01c71dff01
4317*c71dff01c71dff01c71dff0fb716ff378800df378800bf378800df0fb716ff01c71dff01c71dff
4318*01c71dff01c71dff01c71dff01c71dff01c71dff49951a44000000000000000000000000000000
4319*000000000000000000000000000000000000000000000000000000000049951a060bc926ff09c9
4320*24ff06c821ff03c81fff02c71eff01c71dff01c71dff0fb716ff3788008000000000378800800f
4321*b716ff01c71dff01c71dff01c71dff01c71dff01c71dff01c71dff01c71dff49951a3200000000
4322*000000000000000000000000000000000000000000000000000000000000000000000000000000
4323*0049951a0913cb2dff10cb2aff0dca28ff0bc926ff08c923ff05c821ff03c81fff0fb716ff3788
4324*008000000000378800800fb716ff01c71dff01c71dff01c71dff01c71dff01c71dff01c71dff01
4325*c71dff49951a230000000000000000000000000000000000000000000000000000000000000000
4326*00000000000000000000000049951a0c1acd33ff18cc31ff15cc2fff12cb2cff10cb2aff0dca28
4327*ff0ac925ff14b91aff3788008000000000378800800fb716ff01c71dff01c71dff01c71dff01c7
4328*1dff01c71dff01c71dff01c71dff49951a19000000000000000000000000000000000000000000
4329*000000000000000000000000000000000000000000000049951a0f22ce3aff1fce37ff1ccd35ff
4330*1acd33ff17cc31ff14cb2eff12cb2cff19ba1fff37880080000000003788008011b818ff02c71e
4331*ff01c71dff01c71dff01c71dff01c71dff01c71dff01c71dff49951a1200000000000000000000
4332*0000000000000000000000000000000000000000000000000000000000000000000049951a1429
4333*d040ff27d03eff24cf3cff21ce39ff1fce37ff1ccd35ff1bc82fff2c9d0fff3788007000000000
4334*37880070299c0bff0cc522ff07c922ff04c820ff02c71eff01c71dff01c71dff01c71dff49951a
4335*0d0000000000000000000000000000000000000000000000000000000000000000000000000000
4336*00000000000049951a1731d247ff2ed145ff2bd042ff29d040ff26cf3eff23cf3bff2da719ff37
4337*8800700000000000000000000000003788007026a512ff0eca29ff0cca26ff09c924ff06c821ff
4338*04c81fff02c71eff49951a0b000000000000000000000000000000000000000000000000000000
4339*000000000000000000000000000000000049951a1b5ddb6eff39d44fff33d249ff30d247ff2ed1
4340*44ff2bd042ff378800df0000000000000000000000000000000000000000378800df16cc2fff13
4341*cb2dff10cb2aff0eca28ff0bc926ff23cf3bff49951a0800000000000000000000000000000000
4342*0000000000000000000000000000000000000000000000000000000049951a207be289ff77e186
4343*ff5fdc70ff44d659ff35d34bff32d249ff378800bf000000000000000000000000000000000000
4344*0000378800bf1dcd36ff1bcd34ff24cf3cff3bd451ff61dc72ff7be289ff49951a050000000000
4345*000000000000000000000000000000000000000000000000000000000000000000000000000000
4346*49951a2782e490ff82e490ff82e490ff82e490ff82e490ff70e080ff419413ef37880010000000
4347*00000000000000000037880010419413ef6bde7bff7ce28bff82e490ff82e490ff82e490ff82e4
4348*90ff49951a03000000000000000000000000000000000000000000000000000000000000000000
4349*000000000000000000000049951a2d8ae697ff8ae697ff8ae697ff8ae697ff8ae697ff8ae697ff
4350*71c868ff378800cf378800200000000037880020378800cf71c868ff8ae697ff8ae697ff8ae697
4351*ff8ae697ff8ae697ff8ae697ff49951a0300000000000000000000000000000000000000000000
4352*0000000000000000000000000000000000000000000049951a3593e89fff93e89fff93e89fff93
4353*e89fff93e89fff93e89fff93e89fff7dd078ff55a633ff4fa029ff55a633ff7dd078ff93e89fff
4354*93e89fff93e89fff93e89fff93e89fff93e89fff93e89fff49951a020000000000000000000000
4355*00000000000000000000000000000000000000000000000000000000000000000049951a449be9
4356*a6ff9be9a6ff9be9a6ff9be9a6ff9be9a6ff9be9a6ff9be9a6ff9be9a6ff9be9a6ff9be9a6ff9b
4357*e9a6ff9be9a6ff9be9a6ff9be9a6ff9be9a6ff9be9a6ff9be9a6ff9be9a6ff9be9a6ff49951a02
4358*000000000000000000000000000000000000000000000000000000000000000000000000000000
4359*000000000049951a58a3ebaeffa3ebaeffa3ebaeffa3ebaeffa3ebaeffa3ebaeffa3ebaeffa3eb
4360*aeffa3ebaeffa3ebaeffa3ebaeffa3ebaeffa3ebaeffa3ebaeffa3ebaeffa3ebaeffa3ebaeffa3
4361*ebaeffa3ebaeff49951a0200000000000000000000000000000000000000000000000000000000
4362*0000000000000000000000000000000049951a78abedb5ffabedb5ffabedb5ffabedb5ffabedb5
4363*ffabedb5ffabedb5ffabedb5ffabedb5ffabedb5ffabedb5ffabedb5ffabedb5ffabedb5ffabed
4364*b5ffabedb5ffabedb5ffabedb5ffabedb5ff49951a020000000000000000000000000000000000
4365*00000000000000000000000000000000000000000000000000000049951a9c84c875ffb3efbcff
4366*b3efbcffb3efbcffb3efbcffb3efbcffb3efbcffb3efbcffb3efbcffb3efbcffb3efbcffb3efbc
4367*ffb3efbcffb3efbcffb3efbcffb3efbcffb3efbcffb3efbcff84c875ff49951a02000000000000
4368*000000000000000000000000000000000000000000000000000000000000000000000000000000
4369*00000049951a8c49951a50bbf0c3ffbbf0c3ff89c979ff57a230ff57a230ff57a230ff57a230ff
4370*57a230ff57a230ff57a230ff57a230ff57a230ff89c979ffbbf0c3ffbbf0c3ff489519bf378800
4371*af0000000000000000000000000000000000000000000000000000000000000000000000000000
4372*00000000000000000000000000000000000049951a38c4f2cbffc4f2cbff7dbd65ff3788004000
4373*000000000000000000000000000000000000000000000000000000378800407dbd65ffc4f2cbff
4374*c4f2cbff49951abf00000000000000000000000000000000000000000000000000000000000000
4375*000000000000000000000000000000000000000000000000000000000049951a23ccf4d2ffccf4
4376*d2ff82be69ff378800400000000000000000000000000000000000000000000000000000000037
4377*88004082be69ffccf4d2ffccf4d2ff4a961bbf0000000000000000000000000000000000000000
4378*000000000000000000000000000000000000000000000000000000000000000000000000000000
4379*0049951a15d4f6d9ffd4f6d9ff86bf6dff37880040000000000000000000000000000000000000
4380*000000000000000000003788004086bf6dffd4f6d9ffd4f6d9ff4b961cbf000000000000000000
4381*000000000000000000000000000000000000000000000000000000000000000000000000000000
4382*00000000000000000000000049951a0ddcf8e0ffdcf8e0ff94c77eff3788007000000000000000
4383*000000000000000000000000000000000000000000378800709ece8cffdcf8e0ffdcf8e0ff4995
4384*1a5400000000000000000000000000000000000000000000000000000000000000000000000000
4385*000000000000000000000000000000000000000000000049951a08e4f9e7ffe4f9e7ffd9f2d9ff
4386*449011df37880010000000000000000000000000000000000000000037880010449011dfd9f2d9
4387*ffe4f9e7ffe4f9e7ff49951a780000000000000000000000000000000000000000000000000000
4388*0000000000000000000000000000000000000000000000000000000000000000000049951a05be
4389*deb2ffecfbeeffecfbeeffa9d095ff378800cf3788001000000000000000000000000037880010
4390*378800cfa9d095ffecfbeeffecfbeeffbedeb2ff49951a94000000000000000000000000000000
4391*000000000000000000000000000000000000000000000000000000000000000000000000000000
4392*00000000000049951a0466a53dfff5fdf6fff5fdf6fff5fdf6ffbad8aaff519821ef3788009f37
4393*8800803788009f519821efbad8aafff5fdf6fff5fdf6fff5fdf6ff5a9e2eff49951a6d00000000
4394*000000000000000000000000000000000000000000000000000000000000000000000000000000
4395*0000000000000000000000000000000000000000003788008f81b45efffdfffdfffdfffdfffdff
4396*fdfffdfffdffcce1beffcce1beffd8e8cefffdfffdfffdfffdfffdfffdfffdfffdff81b45eff37
4397*880080000000000000000000000000000000000000000000000000000000000000000000000000
4398*000000000000000000000000000000000000000000000000000000000000000000000000378800
4399*9f82b560fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3f8
4400*efff82b560ff3788009f0000000000000000000000000000000000000000000000000000000000
4401*000000000000000000000000000000000000000000000000000000000000000000000000000000
4402*00000000000000000000000037880080509720ffb4d29ffff3f8efffffffffffffffffffffffff
4403*fff3f8efffb4d29fff529822ef3788007000000000000000000000000000000000000000000000
4404*000000000000000000000000000000000000000000000000000000000000000000000000000000
4405*0000000000000000000000000000000000000000000000000000000000000037880070378800bf
4406*5d9e30ff69a640ff5d9e30ff378800bf3788007000000000000000000000000000000000000000
4407*0000000000000000000000000000000000000000000000000000000000fe00003ffc00001ffc00
4408*001ffc00001ffc00001ffc00801ffc00801ffc00801ffc00801ffc00801ffc01c01ffc03e01ffc
4409*03e01ffc01c01ffc00801ffc00001ffc00001ffc00001ffc00001ffc00001ffe00003fff07f07f
4410*ff07f07fff07f07fff07f07fff03e07fff01c07fff00007fff8000ffffc001ffffe003fffff80f
4411*ff2800000030000000600000000100200000000000802500000000000000000000000000000000
4412*000000000000000000000000000000000000000000000000000000000000000000000000000042
4413*8513ff338600ff378702ff358a02ff358a02ff358a01ff358a01ff358901ff358a01ff358a01ff
4414*358901ff358a01ff358a01ff358901ff358a01ff358a01ff358901ff358a01ff358a01ff358901
4415*ff358a01ff358a01ff358901ff358a01ff358a01ff378904ff358800ff2d8600ff508231ff0000
4416*000000000000000000000000000000000000000000000000000000000000000000000000000000
4417*00000000000000000000000000000000000000000000000000000000000000548131ff338a05ff
4418*209c07ff19ab14ff14b013ff14af13ff14ae13ff14ae13ff14ad13ff14af13ff14af13ff14ae13
4419*ff14ae13ff15ae13ff15ad13ff15ae12ff15ae13ff14ad13ff14ae13ff14af13ff14ae13ff14ae
4420*13ff14ae13ff14ad13ff14ae13ff14ae11ff13af15ff17ac12ff229a09ff368a0dff55822fff00
4421*000000000000000000000000000000000000000000000000000000000000000000000000000000
4422*00000000000000000000000000000000000000000000000000000000428416ff209900ff0cb510
4423*ff03c822ff00c91fff00c71eff00c61eff00c71eff00c61eff00c71eff00c81eff00c61fff00c8
4424*1fff00c81fff00c71fff00c820ff00c81fff00c61fff00c71fff00c81eff00c71eff00c71eff00
4425*c61eff00c61eff00c71eff00c61cff00c81fff01c71eff10b514ff1d9a00ff3a8502ff00000000
4426*000000000000000000000000000000000000000000000000000000000000000000000000000000
4427*00000000000000000000000000000000000000000000000000448a23ff11ad07ff00c515ff01cc
4428*25ff00c71eff00c41cff00c61dff00c61dff00c51dff00c51dff00c61dff00c51dff00c71eff00
4429*c81eff00c71eff00c81fff00c81eff00c61eff00c71eff00c61dff00c51dff00c61dff00c61dff
4430*00c51dff00c61dff00c51cff01c71eff00ca1fff00c71cff12ab09ff3f8a16ff00000000000000
4431*000000000000000000000000000000000000000000000000000000000000000000000000000000
4432*00000000000000000000000000000000000000000000438c25ff0cb20aff00c616ff02c824ff01
4433*c41eff01c21cff01c41dff01c41dff01c31dff01c41dff01c51dff01c41cff01c41dff01c51eff
4434*00c51cff00c61cff00c61dff01c41dff00c51dff01c41dff01c31cff01c41dff01c41dff01c31d
4435*ff01c41dff01c31cff02c41eff00c71eff00c81dff0eaf0bff3d8d1aff00000000000000000000
4436*000000000000000000000000000000000000000000000000000000000000000000000000000000
4437*00000000000000000000000000000000000000428d24ff0db10aff00c315ff03c522ff01c41eff
4438*01c21cff01c41dff01c41dff01c31dff01c41dff01c51dff01c41cff07bd1aff13b115ff12ae0e
4439*ff0faf0cff14ad11ff11b215ff08bd19ff02c41cff01c51dff02c41dff01c31dff01c31dff01c4
4440*1dff01c31dff02c31eff00c61eff01c51bff10ae0aff3c8d18ff00000000000000000000000000
4441*000000000000000000000000000000000000000000000000000000000000000000000000000000
4442*00000000000000000000000000000000428d24ff0fb20bff00c516ff02c824ff01c61eff01c41c
4443*ff01c41dff01c51dff01c31dff01c51dff00c61eff01c51eff10b314ff2b9405ff388b0aff388d
4444*10ff388807ff299608ff13b213ff02c51cff00c81fff02c41dff01c41dff01c41dff01c51dff01
4445*c41dff02c41eff00c71eff00c71cff10ae0aff3d8d18ff00000000000000000000000000000000
4446*000000000000000000000000000000000000000000000000000000000000000000000000000000
4447*00000000000000000000000000428c24ff12b20eff02c519ff05c827ff03c61fff02c41cff02c4
4448*1dff01c41dff01c31dff00c41dff00c51eff03c421ff11af10ff2c8b00ff587d33ff6b7e56ff4d
4449*7b17ff2c8d01ff14ac11ff02c41cff00c720ff02c31cff01c31dff01c31dff01c41dff01c31dff
4450*02c31eff00c61eff00c61cff10ae0aff3d8d18ff00000000000000000000000000000000000000
4451*000000000000000000000000000000000000000000000000000000000000000000000000000000
4452*00000000000000000000438d25ff15b311ff07c71eff0bc92bff08c723ff06c51fff04c61fff03
4453*c61fff03c41eff00c41dff00c51eff04c422ff0eb10fff258f00ff667f52ff00000000517f25ff
4454*269100ff13ae11ff02c41dff00c720ff02c31cff01c31dff01c31dff01c41dff01c31dff02c31e
4455*ff00c61eff00c61cff10af0aff3d8e18ff00000000000000000000000000000000000000000000
4456*000000000000000000000000000000000000000000000000000000000000000000000000000000
4457*00000000000000448d25ff19b414ff0ec823ff12cb30ff0ec928ff0cc725ff09c825ff08c823ff
4458*07c521ff04c620ff01c71fff04c522ff0fb20fff269000ff64804cff000000004f8022ff269200
4459*ff14af11ff02c51dff00c820ff02c41cff01c41dff01c41dff01c51dff01c41dff02c41eff00c7
4460*1eff00c71cff10af0aff3d8e18ff00000000000000000000000000000000000000000000000000
4461*000000000000000000000000000000000000000000000000000000000000000000000000000000
4462*00000000448c25ff1cb416ff12c826ff16cb34ff12c92bff10c729ff0ec829ff0dc826ff0cc524
4463*ff09c623ff05c722ff08c424ff11b110ff268f00ff61804aff000000004e8021ff269000ff15ad
4464*10ff02c31dff00c820ff02c41cff01c31dff01c31dff01c41dff01c31dff02c31eff00c61eff00
4465*c61cff10ae0aff3d8d18ff00000000000000000000000000000000000000000000000000000000
4466*000000000000000000000000000000000000000000000000000000000000000000000000000000
4467*00458d26ff1fb619ff16ca2aff1bcc38ff17ca2fff15c82cff13c92dff12c92bff11c729ff0ec8
4468*27ff0ac927ff0cc82bff13b514ff269000ff627f4bff00000000507f22ff279100ff13af12ff01
4469*c51dff00c820ff02c41cff01c31dff01c31dff01c41dff01c31dff02c31eff00c61eff00c61cff
4470*10ae0aff3d8e18ff00000000000000000000000000000000000000000000000000000000000000
4471*00000000000000000000000000000000000000000000000000000000000000000000000000468e
4472*27ff23b81dff1bcc2fff20ce3dff1ccc34ff1aca31ff18cb32ff17cb30ff16c82dff13c92cff10
4473*ca2cff10cb31ff16b719ff279000ff627f4bff00000000507f22ff279200ff13b114ff02c71eff
4474*00c920ff02c41cff01c41dff01c41dff01c51dff01c41dff02c41eff00c71eff00c71cff10af0a
4475*ff3d8e18ff00000000000000000000000000000000000000000000000000000000000000000000
4476*00000000000000000000000000000000000000000000000000000000000000000000478d28bf27
4477*b821ff22cc36ff27ce43ff21cb39ff1fc934ff1dca36ff1ccb34ff1bc732ff16ca31ff13cc31ff
4478*1bc330ff21ab15ff288d03ff607f4cff000000004f8125ff2b8c02ff1da50eff09c11eff02c823
4479*ff03c41eff02c41eff01c31dff00c41cff00c31cff01c31dff00c61eff01c71dff12af0bff3d8d
4480*18ff00000000000000000000000000000000000000000000000000000000000000000000000000
4481*00000000000000000000000000000000000000000000000000000000000000478d28ff27b822ff
4482*25cd38ff2bd047ff26cd3eff24cb3aff23cc3bff21cc38ff1ecb36ff1bcd37ff1bc932ff26af23
4483*ff289405ff258800ff5e804aff00000000458418ff2c8500ff2d9308ff1ab018ff0bc323ff05c9
4484*23ff05c621ff05c31fff02c61eff02c41eff03c41fff01c71eff00c71bff0faf09ff3c8c17ff00
4485*000000000000000000000000000000000000000000000000000000000000000000000000000000
4486*00000000000000000000000000000000000000000000000000000000478e29ff2ab924ff28ce3a
4487*ff2fd14aff2ccf43ff2bcd40ff29ce40ff28cd3dff22d03dff22ce3aff27ba2aff2f9713ff2e81
4488*00ff2c8300ff63814eff00000000418312ff2d8100ff3a8507ff2d960aff19b51cff0bcc29ff0a
4489*c927ff0bc524ff09c823ff07c721ff07c522ff03c820ff00c71bff0dae08ff3b8d17ff00000000
4490*000000000000000000000000000000000000000000000000000000000000000000000000000000
4491*000000000000000000000000000000000000000000000000004d8e2dff3dbb34ff36d047ff32d1
4492*4dff2ace41ff29cb3fff2bcd42ff2bcc40ff29d246ff29ca3bff2fa91bff358906ff447d19ff5b
4493*7f42ff00000000000000000000000042801bff2c8100ff318700ff28a61aff16c72dff11cb2dff
4494*0ec728ff0bc625ff07c521ff01c41cff00c61aff02c71eff14af0eff3f8d1bff00000000000000
4495*000000000000000000000000000000000000000000000000000000000000000000000000000000
4496*00000000000000000000000000000000000000000000529031ff54c148ff54d862ff49d763ff37
4497*d24dff2fcd44ff2ece45ff2cce42ff2cd34bff28c634ff2b9d07ff46841aff6c815aff00000000
4498*00000000000000000000000000000000428219ff388305ff2a9c0fff17c026ff10cc2cff0eca2a
4499*ff0dc626ff0bc624ff0bc725ff14cc2fff28d141ff32b629ff468e21ff00000000000000000000
4500*000000000000000000000000000000000000000000000000000000000000000000000000000000
4501*00000000000000000000000000000000000000519131ff60c553ff74df7eff73e187ff5bd96cff
4502*49d35aff3fd253ff37d14bff34d654ff2bc634ff279b00ff58823dff0000000000000000000000
4503*0000000000000000000000000000000000488116ff249b02ff18bf25ff15ce32ff1acd35ff1fca
4504*35ff23cc3aff34d04aff50da65ff6ce07dff5bc04dff4b9024ff00000000000000000000000000
4505*000000000000000000000000000000000000000000000000000000000000000000000000000000
4506*00000000000000000000000000000000519031ff62c455ff7ce086ff86e398ff79e087ff6edb7c
4507*ff66da75ff5ad86aff58dd73ff4bcd52ff339f11ff488423ff718065ff00000000000000000000
4508*00000000000000000000537f42ff398109ff35a014ff3dc949ff42d65bff49d55fff52d664ff5d
4509*d86eff6bdb7bff7be18cff86e494ff65c155ff4b8f24ff00000000000000000000000000000000
4510*000000000000000000000000000000000000000000000000000000000000000000000000000000
4511*00000000000000000000000000529132ff62c556ff7be186ff88e59bff87e494ff86e192ff85e2
4512*92ff7de08bff7fe693ff76db80ff56b342ff368d05ff3f7c14ff6d7d60ff000000000000000000
4513*000000487c31ff177d00ff2e8a01ff58b343ff71dc80ff77e28bff79df88ff81e28fff89e295ff
4514*8be398ff89e598ff83e493ff60c051ff4b9024ff00000000000000000000000000000000000000
4515*000000000000000000000000000000000000000000000000000000000000000000000000000000
4516*00000000000000000000539133ff67c65bff81e28cff8de6a0ff89e596ff88e293ff89e396ff89
4517*e395ff8ee69cff8ee69cff7cd27cff48a126ff287d00ff3e7c12ff708066ff000000006c825cff
4518*35790fff227f00ff49a128ff79ce75ff91eaa2ff8fe79dff89e194ff8be498ff8ae395ff89e296
4519*ff8ae699ff89e698ff65c157ff4b9025ff00000000000000000000000000000000000000000000
4520*000000000000000000000000000000000000000000000000000000000000000000000000000000
4521*00000000000000539033ff6bc75eff87e390ff92e7a3ff8ce498ff89e194ff8ce398ff8de399ff
4522*8de39aff92e7a0ff8fe59bff70c669ff4ba12fff398c08ff498422ff568337ff45851aff3c8a11
4523*ff4fa233ff74c96cff8de297ff93e8a2ff90e59dff8de298ff8de39aff89e295ff89e196ff8de5
4524*9bff8ee79cff68c25aff4b9025ff00000000000000000000000000000000000000000000000000
4525*000000000000000000000000000000000000000000000000000000000000000000000000000000
4526*00000000549133ff6fc861ff8de596ff99e9a9ff93e79fff91e49bff93e69fff92e69eff8ee49a
4527*ff91e69dff94eaa2ff93e59eff83d280ff64b54eff4ea627ff47a41bff4da627ff63b54bff80d1
4528*7bff94e7a0ff95e9a4ff8ee49aff8fe59cff90e59eff92e69fff91e59dff92e49eff95e8a2ff95
4529*e9a2ff6cc45cff4c9126ff00000000000000000000000000000000000000000000000000000000
4530*000000000000000000000000000000000000000000000000000000000000000000000000000000
4531*00559033ff72c764ff93e69aff9febafff99e8a5ff96e5a1ff99e7a5ff98e7a4ff97e6a3ff97e7
4532*a3ff99e8a4ff9be9a9ff9ce9a9ff94e29cff8ddd91ff8adb8cff8cdc90ff93e29cff9beaa9ff9b
4533*e9aaff98e7a6ff98e6a4ff98e6a4ff97e6a4ff98e7a5ff96e6a3ff97e5a4ff9beaa8ff9be9a8ff
4534*70c360ff4d9026ff00000000000000000000000000000000000000000000000000000000000000
4535*000000000000000000000000000000000000000000000000000000000000000000000000005690
4536*35ff75c767ff96e49cffa1e9b1ff9de8a9ff9ae5a4ff9de6a8ff9de7a8ff9ce6a7ff9ce6a6ff9c
4537*e5a5ff9be5a6ffa0eaadffa4edb3ffa6edb8ffa7edbaffa6edb7ffa2ecb3ffa0eaaeff9ce5a6ff
4538*9be4a4ff9de6a8ff9de6a7ff9ce6a7ff9de7a8ff9ce6a7ff9be5a7ff9ee8a9ff9ee9a9ff73c463
4539*ff4f9029ff00000000000000000000000000000000000000000000000000000000000000000000
4540*00000000000000000000000000000000000000000000000000000000000000000000579136ff7d
4541*cb70ff9fe8a6ffa9ecb8ffa3eaadffa0e7a8ffa3e8adffa3e9adffa2e8abffa3e9acffa3e9acff
4542*a1e7a9ffa1e7a9ffa2e8a9ffa1e7a9ffa2e8aaffa1e8aaffa0e6a8ffa1e7a9ffa2e7abffa2e7ab
4543*ffa3e9acffa3e8acffa2e8acffa3e9acffa2e8acffa2e7acffa5eab0ffa8eeb4ff79c86bff4f91
4544*2aff00000000000000000000000000000000000000000000000000000000000000000000000000
4545*00000000000000000000000000000000000000000000000000000000000000568f36ff7fc970ff
4546*a6eaacffb1f0c1ffa9ebb1ffa5e7adffa9eab2ffa9ebb2ffa7e9afffa8eab0ffa8eab0ffa6e9af
4547*ffa7eaafffa7eaafffa6e9afffa7eab0ffa7eab0ffa6e9aeffa7eaafffa7e9b0ffa7e9afffa8ea
4548*b0ffa7e9b0ffa8e9b0ffa9eab1ffa7e9b0ffa7e8b1ffacedb7ffaeefbbff7cc66cff4d8e28ff00
4549*000000000000000000000000000000000000000000000000000000000000000000000000000000
4550*0000000000000000000000000000000000000000000000000000000048881fff5db03aff99de96
4551*ffbcf4ceffb0edbaffa8e7b1ffaceab4ffaeecb9ffb3f0bfffb8f3c4ffb9f3c8ffb8f1c9ffbaf3
4552*c9ffb9f2c9ffb8f1c8ffb9f2c9ffb9f2c9ffb8f2c7ffbaf3c9ffb9f2c9ffb8f2c6ffb8f3c4ffb3
4553*f0c0ffaeecb9ffabeab3ffa8e7afffb3eec0ffb8f3c6ff9fdea0ff5fb13eff3d870bff00000000
4554*000000000000000000000000000000000000000000000000000000000000000000000000000000
4555*00000000000000000000000000000000000000000000000000000000003c9108ff70bb56ffa8e1
4556*acffb3edbdffb4edbeffb2ecbaffade9b5ffa2e0a5ff9ada9aff9bdd9aff9bdc9bff9cdd9bff9c
4557*dd9bff9bdc9aff9cdd9bff9cdd9bff9bdc99ff9cdd9aff9cdd9bff9ada9bff9ddb9dffa2e0a4ff
4558*ace7b2ffb4efbfffb3edbcffb4ecbeffa2dfa2ff6db856ff419213ff0000000000000000000000
4559*000000000000000000000000000000000000000000000000000000000000000000000000000000
4560*0000000000000000000000000000000000000000000000000000000000003d8d0bff6cb24fffac
4561*e4aeffc5f5d3ffbdf0c5ffa3dd9fff65ab4eff3c8e1cff409913ff439d13ff419912ff419a12ff
4562*419912ff419a12ff419a12ff409912ff419a11ff439d13ff3d9317ff439322ff65ab49ff9ad591
4563*ffc5f8d3ffc8fbd9ff9dd897ff5ea83bff338805ff000000000000000000000000000000000000
4564*000000000000000000000000000000000000000000000000000000000000000000000000000000
4565*000000000000000000000000000000000000000000000000000000000000004fa023ffaadfa8ff
4566*cff8deffc3f2cdffa1d899ff489623ff1e6e00ff41781cff4f7d2cff467a22ff477a23ff477923
4567*ff477a23ff477a23ff467922ff487a25ff4c7d29ff33730bff247500ff4a961fff93cd84ffd0fc
4568*dfffd7ffecff8fce7fff449212ff00000000000000000000000000000000000000000000000000
4569*000000000000000000000000000000000000000000000000000000000000000000000000000000
4570*0000000000000000000000000000000000000000000000000000000057a92dffb1e3afffd3fae3
4571*ffc8f4d2ffaadca3ff4fa029ff357a0eff00000000000000000000000000000000000000000000
4572*000000000000000000000000000000000000000000003a810bff53a029ff99d38cffd7fde6ffdf
4573*fef2ff91d27fff519c26ff00000000000000000000000000000000000000000000000000000000
4574*000000000000000000000000000000000000000000000000000000000000000000000000000000
4575*000000000000000000000000000000000000000000000000005aaa2effb6e5b3ffdafce9ffcef7
4576*d7ffaedda7ff51a02aff34790dff00000000000000000000000000000000000000000000000000
4577*000000000000000000000000000000000000003d7f0eff54a029ff9bd48effdcfeebffe4fef8ff
4578*95d382ff529c26ff00000000000000000000000000000000000000000000000000000000000000
4579*000000000000000000000000000000000000000000000000000000000000000000000000000000
4580*000000000000000000000000000000000000000000005ba92fffbae5b6ffdffdeeffd4f7dbffb0
4581*dda9ff519f2cff30780bff00000000000000000000000000000000000000000000000000000000
4582*000000000000000000000000000000003e7e10ff549f29ff9cd48effe2fef0ffe9fdfbff99d487
4583*ff539c27ff00000000000000000000000000000000000000000000000000000000000000000000
4584*000000000000000000000000000000000000000000000000000000000000000000000000000000
4585*0000000000000000000000000000000000000056a529ffbde6b9ffe7fff5ffdbf9e1ffb5dfadff
4586*51a02bff30780aff00000000000000000000000000000000000000000000000000000000000000
4587*000000000000000000000000003e7f0fff56a02bffa1d594ffe8fff5fff1ffffff9ed68cff549d
4588*28ff00000000000000000000000000000000000000000000000000000000000000000000000000
4589*000000000000000000000000000000000000000000000000000000000000000000000000000000
4590*00000000000000000000000000000000489c1dffbae1b5ffebfef6ffe1f9e7ffbbe1b5ff57a42f
4591*ff377b0dff00000000000000000000000000000000000000000000000000000000000000000000
4592*000000000000000000003c8410ff63a73cffadd9a2ffebfef7fff3feffff9fd68cff539d27ff00
4593*000000000000000000000000000000000000000000000000000000000000000000000000000000
4594*000000000000000000000000000000000000000000000000000000000000000000000000000000
4595*00000000000000000000000000409616ffb2daa9ffe7f9ecffe7fbf0ffd0ecd0ff6eb049ff3981
4596*07ff00000000000000000000000000000000000000000000000000000000000000000000000000
4597*00000000000000308500ff80b962ffcae7c7ffebfdf4fff0fcf9ff9acf84ff4e971eff00000000
4598*000000000000000000000000000000000000000000000000000000000000000000000000000000
4599*000000000000000000000000000000000000000000000000000000000000000000000000000000
4600*000000000000000000003f9112ff9ac984ffdaf0d8fff5fffdffeafcf0ff9cca84ff50971fff40
4601*7f17ff000000000000000000000000000000000000000000000000000000000000000000000000
4602*357c06ff429513ffacd59cffecf9f1ffedfef3ffe3f4e7ff87c169ff408d0bff00000000000000
4603*000000000000000000000000000000000000000000000000000000000000000000000000000000
4604*000000000000000000000000000000000000000000000000000000000000000000000000000000
4605*00000000000000000000006dac45ffc6e3bcfffefffffff0fef7ffd2e8ccff8abd6eff338701ff
4606*2f7609ff00000000000000000000000000000000000000000000000000000000307807ff418d10
4607*ff8bbe6fffd7edd3fffafdfbffeefaf1ffc8e1c1ff66ab3dff0000000000000000000000000000
4608*000000000000000000000000000000000000000000000000000000000000000000000000000000
4609*000000000000000000000000000000000000000000000000000000000000000000000000000000
4610*0000000000000000439110ffa0cc88fff8f9f6fff9fffcfff2faf3ffc9e3c1ff77b357ff3f8e14
4611*ff3c8015ff0000000000000000000000000000000000000000367f0cff449019ff8aba6cffd5e7
4612*ceffedf9eeffffffffffeff8f2ff94c478ff4e9124ff0000000000000000000000000000000000
4613*000000000000000000000000000000000000000000000000000000000000000000000000000000
4614*000000000000000000000000000000000000000000000000000000000000000000000000000000
4615*00000000000000000069ab40ffcbe0bffffcfdfbfffffffffff4fbf6ffddecd6ff97c27cff549d
4616*29ff3f900dff488a1cff508a28ff498c1cff3e8e0bff58a12affa0c886ffe0ecd9fffefffffffa
4617*fffefffcfefeffcfe5c6ff55a326ff497f26ff0000000000000000000000000000000000000000
4618*000000000000000000000000000000000000000000000000000000000000000000000000000000
4619*000000000000000000000000000000000000000000000000000000000000000000000000000000
4620*000000000000358904ff79b359ffe3ecddfffffffffffefffffffbfcfaffe6efdfffc8dfbaffa9
4621*cf91ff9ac47eff96c179ff98c47bffaccf95ffcde2bfffe9f1e3fff7faf6ffffffffffffffffff
4622*dae7d0ff7cb358ff2f8900ff000000000000000000000000000000000000000000000000000000
4623*000000000000000000000000000000000000000000000000000000000000000000000000000000
4624*000000000000000000000000000000000000000000000000000000000000000000000000000000
4625*000000000000003e8f11ff8dbd6dffd6e6cafffdfbfbfffffffffffffffffffffffffffefcffff
4626*ebf2e5ffe3f0daffe9f2e3fffffcfffffffffffffffffffffffffffff8faf6ffd9e7ceff84b860
4627*ff3b8c04ff00000000000000000000000000000000000000000000000000000000000000000000
4628*000000000000000000000000000000000000000000000000000000000000000000000000000000
4629*000000000000000000000000000000000000000000000000000000000000000000000000000000
4630*0000000000000000388b00ff7cb354ffd1e1c4fff7f9f3fffefefdfffcfdfcfffffffffffdfdfd
4631*fffffffffffffffffffdfdfcfffefefefffefefdfff6f8f3ffc9debaff76ae52ff388b02ff0000
4632*000000000000000000000000000000000000000000000000000000000000000000000000000000
4633*000000000000000000000000000000000000000000000000000000000000000000000000000000
4634*000000000000000000000000000000000000000000000000000000000000000000000000000000
4635*000000000000000000318900ff55a12bff97c17affc6dbb2ffe0ecd5fff1f6edfffbfbfaffffff
4636*fffffbfbfbffeef4ebffe0ecd7ffc8dcb4ff96bf77ff58a02cff2e8800ff000000000000000000
4637*000000000000000000000000000000000000000000000000000000000000000000000000000000
4638*000000000000000000000000000000000000000000000000000000000000000000000000000000
4639*000000000000000000000000000000000000000000000000000000000000000000000000000000
4640*0000000000000000000000000000408a19ff5a9d3eff7cb05fff94be78ffa4c88cffabcc95ffa3
4641*c78cff94bd76ff7cb05dff5b9c40ff3f891aff0000000000000000000000000000000000000000
4642*000000000000000000000000000000000000000000000000000000000000000000000000000000
4643*000000000000000000000000000000000000000000000000000000000000000000000000000000
4644*000000000000000000000000000000000000000000000000000000000000000000000000000000
4645*000000000000000000000000000000000000002e8107ff489118ff5b9c2dff60a036ff599d2eff
4646*4a9114ff2f8200ff00000000000000000000000000000000000000000000000000000000000000
4647*000000000000000000000000000000000000000000000000000000000000000000000000000000
4648*0000000000000000000000000000ff80000003ffffffff00000001ffffffff00000001ffffffff
4649*00000001ffffffff00000001ffffffff00000001ffffffff00000001ffffffff00000001ffffff
4650*ff00010001ffffffff00010001ffffffff00010001ffffffff00010001ffffffff00010001ffff
4651*ffff00010001ffffffff00010001ffffffff00010001ffffffff00038001ffffffff0007c001ff
4652*ffffff000fe001ffffffff0007c001ffffffff00038001ffffffff00010001ffffffff00000001
4653*ffffffff00000001ffffffff00000001ffffffff00000001ffffffff00000001ffffffff000000
4654*01ffffffff00000001ffffffff80000003ffffffffc0000007ffffffffe000000fffffffffe03f
4655*f80fffffffffe03ff80fffffffffe03ff80fffffffffe03ff80fffffffffe03ff80fffffffffe0
4656*3ff80fffffffffe01ff00ffffffffff00fe01ffffffffff007c01ffffffffff800001fffffffff
4657*f800003ffffffffffc00007ffffffffffe0000ffffffffffff0001ffffffffffffc007ffffffff
4658*fffff01fffffffff
4659newhex
4660*
4661rmfile ./windows/amdicon.ico
4662hunk ./windows/confwiz.py 1
4663-import sys
4664-from allmydata.gui.confwiz import main
4665-
4666-if __name__ == '__main__':
4667-#    main(sys.argv, open_welcome_page=False)
4668-    main(sys.argv)
4669rmfile ./windows/confwiz.py
4670hunk ./windows/depends.py 1
4671-
4672-# nevow requires all these for its voodoo module import time adaptor registrations
4673-from nevow import accessors, appserver, static, rend, url, util, query, i18n, flat
4674-from nevow import guard, stan, testutil, context
4675-from nevow.flat import flatmdom, flatstan, twist
4676-from formless import webform, processors, annotate, iformless
4677-from decimal import Decimal
4678-
4679-import allmydata.web
4680-
4681-# junk to appease pyflakes's outrage at py2exe's needs
4682-junk = [
4683-    accessors, appserver, static, rend, url, util, query, i18n, flat, guard, stan, testutil,
4684-    context, flatmdom, flatstan, twist, webform, processors, annotate, iformless, Decimal,
4685-    allmydata,
4686-    ]
4687rmfile ./windows/depends.py
4688binary ./windows/installer.bmp
4689oldhex
4690*424dc82d000000000000360000002800000036000000360000000100200000000000922d000012
4691*0b0000120b00000000000000000000ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00
4692*ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff
4693*00ffffff00ffffff00ffffff1affffff40fefeff52fefdfe7bfdfdfd8dfcfcfd97fcfbfcbcfbfa
4694*fcc1fbfafbc1fbfafbc1fbfafbc1fbfbfcc0fcfbfcaafdfcfd8efefdfe8afefeff6dfffeff4bff
4695*ffff27ffffff0cffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00
4696*ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff
4697*00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff11ffffff1dfffe
4698*ff3ffefefe4ef5f9f262f2f7ee84f0f5eb87edf3e894e7efe1afe0e9d9ccdae4d2f0d5dfcdffd1
4699*dbc9ffced8c5ffcad4c2ffc8d2c0ffc6d1bdffc5cfbcffc4cebcffc4cebcffc5cfbcffc5cfbdff
4700*c7d1beffc9d3c0ffccd6c3ffcfd9c6ffd3ddcaffd7e1cff8dde6d5dfe4ecdcc0eaf1e4a2eef4e9
4701*8bf1f6ec85f2f7ee7cf6faf455fefefe4bfefefe2bffffff18ffffff01ffffff00ffffff00ffff
4702*ff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff07ffffff35fefefe5efd
4703*fdfd7cfafafa9ef7f7f7c7f3f3f3e7efefeff3edeceeff9dc883ff48af15ff4fb423ff50b424ff
4704*4fb323ff4fb323ff4eb223ff4eb223ff4eb223ff4eb124ff4eb224ff4eb224ff4fb125ff4fb125
4705*ff4fb126ff4fb126ff4fb226ff4fb227ff4fb227ff50b227ff50b227ff4fb227ff4fb227ff4fb2
4706*27ff4fb227ff4fb227ff50b328ff50b328ff51b529ff52b52aff50b528ff48ae16ffc3d8b7fff0
4707*eff1faf1f1f1eff5f5f5cef9f9f9b8fcfcfc8afefefe69ffffff4cffffff25ffffff00ffffff00
4708*ffffff05fefefe71fbfbfbd7f6f6f6fff1f1f1ffedededffe9e9e9ffe5e5e5ffe1e1e1ffddddde
4709*ffcdd1c9ff4fab22ff3ded43ff1af127ff20f12fff21f233ff22f236ff24f33aff25f43eff26f5
4710*42ff27f646ff28f74aff29f74eff2bf851ff2cf955ff2dfa59ff2efa5dff2ffb61ff31fc64ff32
4711*fd68ff33fd6cff34fe70ff35ff73ff36ff76ff36ff77ff36ff77ff36ff77ff36ff77ff35ff77ff
4712*35ff76ff35ff76ff33ff78ff60f283ff84b767ffdcdaddffdfdfdfffe2e2e2ffe6e6e6ffeaeaea
4713*ffefefeffff4f4f4fff9f9f9f7fcfcfcb5ffffff32ffffff0efdfdfdcbf8f8f8fff3f3f3ffefef
4714*efffebebebffe7e7e7ffe3e3e3ffdededeffd8d7d9ffc5cac1ff54ad23ff2ced2dff00ed00ff00
4715*ee07ff00ee0bff01ef0fff03f014ff04f118ff05f21dff07f321ff08f426ff09f42aff0bf52eff
4716*0cf632ff0df737ff0ef83bff10f940ff11fa44ff12fa49ff14fb4dff15fc52ff16fd56ff18fe5a
4717*ff19ff5fff1aff62ff1aff63ff1aff63ff1aff63ff1aff63ff1aff63ff14ff61ff5bf785ff83b5
4718*63ffd6d3d7ffd9d9d9ffe1e1e1ffe5e5e5ffe9e9e9ffedededfff1f1f1fff6f6f6fffafafafffe
4719*fefe6affffff00ffffff0affffff46fdfdfd70fbfbfb9ef7f7f7d4f3f3f3f2efefefffeaeaeaff
4720*e5e4e5ffd0d5ccff55ae24ff2beb2bff00eb00ff01eb02ff02ec06ff03ed0aff04ee0fff06ef13
4721*ff07f018ff08f01cff09f120ff0bf224ff0cf328ff0bf42aff0cf52fff0ef534ff0ff738ff10f7
4722*3cff11f840ff13f945ff16fa4bff18fb4fff19fc53ff1afc58ff1bfd5cff1dfe61ff1eff64ff1e
4723*ff65ff1eff65ff1eff65ff19ff64ff5af683ff89bb6affe2dee2ffe7e7e7ffedededfff1f1f1fa
4724*f5f5f5e3f9f9f9befcfcfc8bfefefe62ffffff2bffffff00ffffff00ffffff00ffffff00ffffff
4725*00ffffff00ffffff04ffffff1cffffff40fefefe57fdfdfeb0ebefe7ff57b026ff2ae92bff00ea
4726*00ff00ea00ff00eb00ff00eb02ff02ec05ff03ed0aff04ee0eff05ef12ff07ef16ff08f01bff0b
4727*f121ff17f633ff1af83aff1bf93eff1cfa42ff1efb46ff1ffb4bff1efa4aff15f842ff15f945ff
4728*16fa4aff17fb4fff19fb52ff1afc57ff1bfd5cff1cfe60ff1eff64ff1eff65ff19ff64ff58f380
4729*ff99c979fffcf9fdeafefefe82ffffff4effffff2bffffff0fffffff00ffffff00ffffff00ffff
4730*ff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ff
4731*ffff00ffffff00fbfdfa655ab22afb2ae82aff00e900ff00e900ff00ea00ff00ea00ff00ea00ff
4732*01eb01ff01ec04ff03ed09ff04ee0eff02ee0eff1cf22dff5ccf49ff4cc028ff4cc32aff4cc32b
4733*ff4cc32cff4bc02aff6add69ff24fa4eff0ff73aff13f841ff15f946ff16fa4aff17fa4eff18fb
4734*52ff1afc57ff1bfd5bff1cfe5fff18ff62ff58f380ffa6d389d9ffffff27ffffff00ffffff00ff
4735*ffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00
4736*ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00f5faf10855b022ed2ce82d
4737*ff00e800ff00e800ff00e900ff00e900ff00ea00ff00ea00ff00eb00ff00eb01ff01ec04ff00ed
4738*05ff1df228ff4fb526ff97b77fffabbf9cffa8be98ffacbf9dff95b57bff63ca4dff26fb4bff0c
4739*f530ff11f638ff12f73cff13f840ff14f945ff16fa49ff17fa4dff18fb51ff1afc56ff16ff59ff
4740*5ff688ff8dc868a9ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff
4741*00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffff
4742*ff00ffffff00ffffff00edf6e91253af21ed2de82eff00e700ff00e700ff00e800ff00e800ff00
4743*e900ff00e900ff00e900ff00ea00ff00ea00ff00eb00ff19f01fff50b825ffdbe0d6ffefecf0ff
4744*eceaedffefecf1ffd9dfd3ff61cb4aff22f841ff09f327ff0ef42fff0ff533ff10f637ff12f73c
4745*ff13f840ff14f845ff16f949ff17fa4dff13fd4fff5ff583ff8ac766aeffffff00ffffff00ffff
4746*ff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ff
4747*ffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00eef7e91254b021ed
4748*2ce72eff00e500ff00e600ff00e700ff00e700ff00e700ff00e800ff00e800ff00e900ff00e900
4749*ff00ea00ff18ee1cff4cb51ffdf0f7ea98ffffff82fefefe84ffffff81e9f3e1935bc841ff20f7
4750*39ff06f11eff0bf326ff0df32aff0ef42fff0ff533ff11f638ff12f73bff13f840ff14f844ff10
4751*fb46ff5df47eff8bc766aeffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00
4752*ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff
4753*00ffffff00ffffff00ffffff00eef7e91254b021ed2ce62eff00e400ff00e500ff00e500ff00e6
4754*00ff00e600ff00e700ff00e700ff00e800ff00e800ff00e900ff18ed1cff4cb520fbe6f3de1dff
4755*ffff00ffffff00ffffff00dff0d6405fc946ff1ef531ff03f014ff09f11dff0af221ff0bf225ff
4756*0cf32aff0ef42eff0ff532ff10f636ff11f73bff0df93cff5bf278ff8bc766aeffffff00ffffff
4757*00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffff
4758*ff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00eef7e91254
4759*b021ed2ce62eff00e400ff00e400ff00e500ff00e500ff00e500ff00e600ff00e600ff00e700ff
4760*00e700ff00e800ff18ed1cff52b826fbdfefd72affffff00ffffff00ffffff00dbeed34a63cb48
4761*ff1bf428ff01ee0cff06ef14ff07f018ff08f11cff0af221ff0bf225ff0cf32aff0ef42eff0ff5
4762*32ff0af733ff5af272ff8bc766aeffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ff
4763*ffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00
4764*ffffff00ffffff00ffffff00ffffff00eef7e91254b021ed2ce52dff00e200ff00e300ff00e300
4765*ff00e400ff00e400ff00e500ff00e500ff00e600ff00e600ff00e700ff18ec1cff52b826fbe0f0
4766*d72affffff00ffffff00ffffff00ddeed34a62ca47ff19f220ff00ec02ff03ed0bff05ee0fff06
4767*ef13ff07f017ff08f11cff0af120ff0bf224ff0cf328ff07f529ff58f06dff8bc766aeffffff00
4768*ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff
4769*00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00eef7
4770*e91254b021ed2ce42dff00e100ff00e200ff00e200ff00e300ff00e300ff00e400ff00e400ff00
4771*e500ff00e500ff00e500ff19ec1eff52b928fce0f0d72bffffff00ffffff00ffffff00ddeed34b
4772*64cc4bff19f21fff00ea00ff00eb02ff02ec05ff03ed09ff04ee0eff06ef12ff07ef17ff08f01b
4773*ff09f11fff05f420ff56f067ff8bc766aeffffff00ffffff00ffffff00ffffff00ffffff00ffff
4774*ff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ff
4775*ffff00ffffff00ffffff00ffffff00ffffff00eef7e91254b021ed2ce32dff00e100ff00e100ff
4776*00e200ff00e200ff00e200ff00e300ff00e300ff00e400ff00e300ff0be90fff4be74bff4db01b
4777*ffe2f1d929ffffff00ffffff00ffffff00deefd44858bb30ff3fee43ff00ec02ff00ea00ff00eb
4778*00ff00eb01ff01ec05ff03ed0aff04ee0eff05ef12ff07f016ff02f217ff55ee62ff8bc766aeff
4779*ffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00
4780*ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff
4781*00eef7e91254af21ed2ce22dff00df00ff00e000ff00e000ff00e100ff00e100ff00e200ff00e2
4782*00ff00e300ff08e80cff54e14eff64b535e6bfe0ac50ffffff06ffffff00ffffff00ffffff00fe
4783*fffe0ba1d1865f64bd3df848eb4aff00ea01ff00ea00ff00ea00ff00eb00ff00eb01ff01ec04ff
4784*02ed08ff04ee0dff00ef0cff53ee5cff8bc766aeffffff00ffffff00ffffff00ffffff00ffffff
4785*00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffff
4786*ff00ffffff00ffffff00ffffff00ffffff00ffffff00eef7e91254b021ed2ce22dff00de00ff00
4787*df00ff00df00ff00e000ff00e000ff00e100ff00e100ff00e300ff52e752ff67b73be9e9f4e32a
4788*ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00c0e0ae5658b72df12dee32
4789*ff00e800ff00e900ff00ea00ff00ea00ff00ea00ff00eb00ff01ec04ff00ee03ff51ec56ff8bc7
4790*66aeffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ff
4791*ffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00
4792*ffffff00eef7e91253af21ed2ce02dff00dd00ff00de00ff00de00ff00df00ff00df00ff00e000
4793*ff00e000ff14e718ff57c136feb4da9e5fffffff00ffffff00ffffff00ffffff00ffffff00ffff
4794*ff00ffffff00ffffff00ffffff009dce7e8f62da55ff09ec0dff00e800ff00e800ff00e900ff00
4795*e900ff00ea00ff00ea00ff00ec00ff4feb51ff8bc766aeffffff00ffffff00ffffff00ffffff00
4796*ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff
4797*00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00eef7e91254b021ed32e533ff00dc
4798*00ff00db00ff00dd00ff00de00ff00de00ff00df00ff00df00ff3ce63fff6cba42cefafcf800ff
4799*ffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00e6f3df25
4800*62bc3bf62eee34ff00e700ff00e800ff00e800ff00e800ff00e900ff00ea00ff00eb00ff4feb4f
4801*ff8bc766aeffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffff
4802*ff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ff
4803*ffff00ffffff00eef7e91254b021ed48f64bff15f218ff09e40aff01dd02ff00db00ff00dc00ff
4804*00de00ff00df00ff54e051ff92ca6fa2ffffff00ffffff00ffffff00ffffff00ffffff00ffffff
4805*00ffffff00ffffff00ffffff00ffffff00fafcf80062b432cb3ce73cff00e600ff00e600ff00e7
4806*00ff00e700ff00e800ff00e800ff00ea00ff4fea4fff8bc766aeffffff00ffffff00ffffff00ff
4807*ffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00
4808*ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00eef7e91254b021ed4cf54f
4809*ff22f928ff26f82bff21f425ff15ec18ff07e208ff00dc00ff00de00ff57dc51ff9dcf7d98ffff
4810*ff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00fd
4811*fefd0063b433bb3ce43aff00e600ff00e500ff00e600ff00e600ff00e700ff00e700ff00e800ff
4812*4ee94eff8bc766aeffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff
4813*00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffff
4814*ff00ffffff00ffffff00eef7e91254b021ed50f554ff27f82dff2bf730ff2af830ff2bf930ff28
4815*f72dff1ef122ff0fed13ff5ae85aff88c562aaffffff00ffffff00ffffff00ffffff00ffffff00
4816*ffffff00ffffff00ffffff00ffffff00ffffff00f6fbf30561b533d93ae73cff00e300ff00e300
4817*ff00e400ff00e400ff00e400ff00e600ff00ea00ff52ec52ff8bc766aeffffff00ffffff00ffff
4818*ff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ff
4819*ffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00eef7e91254b021ed
4820*54f559ff2df834ff30f736ff2ff735ff2ef734ff2ef733ff2ef834ff28f92eff54fa5bff63b93a
4821*e4ecf6e60dffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffff
4822*ff00d7eccc4363c443fe2bef31ff01e701ff08e908ff09eb0aff0bed0cff0ef110ff12f515ff0f
4823*fb13ff5cf45dff8bc766aeffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00
4824*ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff
4825*00ffffff00ffffff00ffffff00eef7e91255b021ed59f55eff32f83aff35f73cff34f73bff34f7
4826*3aff33f739ff32f738ff2ff736ff38fc41ff68d250ff92c9728fffffff00ffffff00ffffff00ff
4827*ffff00ffffff00ffffff00ffffff00ffffff00ffffff0078bc4fb56dec69ff21fc28ff21f925ff
4828*21fa25ff20fa24ff20fa24ff1ffa22ff1dfa20ff16fb1bff5ff360ff8bc766aeffffff00ffffff
4829*00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffff
4830*ff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00eef7e91255
4831*b021ed5df463ff38f741ff3bf742ff3af741ff39f740ff38f73fff37f73eff36f73dff31f838ff
4832*62fb6bff6bc246fbacd69663ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff
4833*0090c86f886dce52ff3efc47ff24f829ff27f92cff26f92bff25f92aff24f928ff23f927ff21f9
4834*26ff1cfb21ff63f364ff8bc766aeffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ff
4835*ffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00
4836*ffffff00ffffff00ffffff00ffffff00eef7e91255b021ed61f467ff3df747ff40f648ff3ff647
4837*ff3ef746ff3df745ff3cf744ff3bf743ff3af741ff37f940ff68f46cff63bf3cff94ca749ed7eb
4838*cb27f7fbf406ffffff01f1f8ed09cde7bf367cbf53b76bce4fff5cfd66ff29f92fff2df833ff2c
4839*f832ff2bf830ff2af92fff29f92eff28f92dff27f92cff21fb27ff66f367ff8bc766aeffffff00
4840*ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff
4841*00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00eef7
4842*e91255b021ed66f46cff43f74dff46f64fff45f64eff44f64dff43f64bff42f74aff41f749ff40
4843*f748ff3ef746ff3af944ff61fd6dff77e06aff5abb30f663b733d86dba41cf5eb52edc5cc036fd
4844*79eb74ff4efe59ff2ef834ff33f83aff33f839ff32f838ff30f837ff30f836ff2ff835ff2ef934
4845*ff2df932ff27fb2eff6af36bff8bc766aeffffff00ffffff00ffffff00ffffff00ffffff00ffff
4846*ff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ff
4847*ffff00ffffff00ffffff00ffffff00ffffff00eef7e91255b021ed6af471ff49f753ff4bf655ff
4848*4af654ff49f653ff48f651ff47f650ff47f650ff46f64fff45f74dff43f74cff3df746ff47fb53
4849*ff54fb5fff5ff565ff64f469ff5bf662ff4dfb58ff3dfb47ff37f83eff3af841ff39f840ff38f8
4850*3fff37f83eff36f83dff35f83cff34f83bff33f83aff32f838ff2cfa34ff6df36fff8bc766aeff
4851*ffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00
4852*ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff
4853*00eef7e91255b022ed6ef375ff4ef659ff51f65bff50f65aff4ff659ff4ef658ff4df656ff4cf6
4854*56ff4bf654ff4af653ff49f652ff48f751ff46f74fff43f74cff41f84aff3ff849ff3ff848ff40
4855*f748ff41f749ff40f749ff3ff747ff3ef846ff3df845ff3cf844ff3bf843ff3af842ff39f841ff
4856*38f83fff37f83eff32fa3aff70f272ff8ac766aeffffff00ffffff00ffffff00ffffff00ffffff
4857*00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffff
4858*ff00ffffff00ffffff00ffffff00ffffff00ffffff00eef7e91255b022ed73f37aff54f660ff56
4859*f561ff55f560ff54f55fff53f65eff52f65dff52f65cff51f65bff50f65aff4ff658ff4ef658ff
4860*4cf656ff4cf755ff4bf754ff4af753ff49f752ff48f751ff47f750ff46f74fff45f74dff44f74c
4861*ff43f74cff42f84aff41f849ff40f848ff3ff847ff3ef846ff3df845ff38fa41ff74f276ff8ac7
4862*66aeffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ff
4863*ffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00
4864*ffffff00eef7e91255b022ed77f37eff5af666ff5bf567ff5af565ff5af565ff59f564ff58f563
4865*ff57f662ff56f661ff55f660ff54f65fff53f65eff52f65cff51f65bff50f65aff4ff759ff4ef7
4866*58ff4df757ff4cf756ff4bf755ff4af754ff49f752ff48f752ff47f750ff46f74fff45f84eff44
4867*f84dff43f84cff42f84bff3efa47ff77f279ff8ac765aeffffff00ffffff00ffffff00ffffff00
4868*ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff
4869*00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00eef7e91356b023f180f78bff62fa
4870*72ff63f972ff5ff66bff5ff56aff5ef569ff5ef568ff5bf566ff5cf96bff5cfa6cff5bfa6aff5a
4871*fa69ff59fa68ff58fa67ff57fa66ff56fa65ff55fb64ff54fb63ff53fb61ff52fb60ff51fb5fff
4872*50fb5eff4cf958ff4cf756ff4cf755ff4bf754ff49f752ff47f952ff49fc56ff44fe53ff7ef684
4873*ff89c664b2ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffff
4874*ff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ff
4875*ffff00ffffff00fafcf80a60b42fdb75d662ff73dc66ff77dc6aff76f37eff63f670ff64f570ff
4876*60f56dff74f67eff78df6cff6eda60ff6fdb61ff6edc60ff6edc60ff6ddc5fff6ddc5fff6cdc5f
4877*ff6cdc5eff6cdc5eff6bdc5dff6bdc5dff6adc5cff69da59ff76ec75ff56f962ff50f75bff50f7
4878*5aff55f960ff79ed78ff65db55ff66df59ff6ed357ff98ce779affffff00ffffff00ffffff00ff
4879*ffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00
4880*ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00d5ebc82d81c25c
4881*967dbf569f51a819e67deb7eff68f777ff69f576ff65f672ff82f58cff55ac21f478bc51a381c1
4882*599e7fc0579f7fc0579f7fc0579f7fc0579f7fc0579f7fc0579f7fc0579f7fc0579f7fc0579f83
4883*c25c9d65b13ac073d05cff61fd71ff56f761ff54f75fff62fd70ff7ed469ff62af36c381c1599f
4884*87c5648ee7f4e018ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff
4885*00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffff
4886*ff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff0068b637ba7feb81ff6ff67eff6f
4887*f57cff6bf679ff85f58fff5eb32ddff1f8ed00ffffff00ffffff00ffffff00ffffff00ffffff00
4888*ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00bddfab5173d15bff67fc75ff5bf766
4889*ff59f765ff66fc75ff7dd668ffb3da9e59ffffff00ffffff00ffffff00ffffff00ffffff00ffff
4890*ff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ff
4891*ffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00
4892*ffffff00ffffff0067b637bd83eb86ff74f684ff74f482ff71f57fff8af594ff5db32ce1f1f8ed
4893*0bffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffff
4894*ff00ffffff00bddfaa5974d15cff6cfb7cff61f66cff5ff76bff6bfd7bff7ed669ffb3da9e61ff
4895*ffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00
4896*ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff
4897*00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff0067b637bd87eb8aff7af6
4898*8bff7af488ff76f586ff8ef499ff5db32ce1f1f8ed0bffffff00ffffff00ffffff00ffffff00ff
4899*ffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00bddfaa5976d15eff72fb82ff
4900*66f672ff65f671ff71fc81ff80d66bffb3da9e61ffffff00ffffff00ffffff00ffffff00ffffff
4901*00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffff
4902*ff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ff
4903*ffff00ffffff00ffffff0067b636bd8beb8eff7ff691ff7ff48eff7cf58cff92f49dff5db32ce1
4904*f1f8ed0bffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff
4905*00ffffff00ffffff00bddfaa5978d160ff77fb88ff6cf679ff6af677ff76fc87ff82d66dffb3da
4906*9e61ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ff
4907*ffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00
4908*ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff0067b637be8feb93
4909*ff85f698ff84f495ff81f592ff96f4a2ff5eb32de0f1f8ed0affffff00ffffff00ffffff00ffff
4910*ff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00bcdfaa5879d162ff7d
4911*fb8eff71f67fff70f67dff7cfc8dff83d66fffb3da9e62ffffff00ffffff00ffffff00ffffff00
4912*ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff
4913*00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffff
4914*ff00ffffff00ffffff00ffffff0066b535bc91e994ff8bf59fff8af49bff87f499ff9cf5a9ff5c
4915*b32be9ecf6e60fffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00
4916*ffffff00ffffff00ffffff00acd795617bd366ff80fa92ff77f586ff75f584ff83fc95ff7fd267
4917*ffb6dca25effffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffff
4918*ff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ff
4919*ffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff0076bd4aa3
4920*95e594ff92f6a7ff8ff3a1ff8cf39effa2f9b4ff6bbe47fed7eccd3effffff00ffffff00ffffff
4921*00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff007fc05a8682dd
4922*78ff81f994ff7df58cff7af589ff8bfb9dff72c753ffc1e1b051ffffff00ffffff00ffffff00ff
4923*ffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00
4924*ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff
4925*00ffffff00ffffff00ffffff00ffffff009acf7d6d98df8eff9bf7b1ff95f3a7ff93f3a5ff9bf7
4926*b0ff9ce092ff9cd08098ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ff
4927*ffff00ffffff00ffffff00eff8eb1260b331e39df4a7ff81f693ff82f592ff7ff590ff90f79fff
4928*5bb52cfddaedd02fffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff
4929*00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffff
4930*ff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00d2
4931*e9c63684cc68ffaefac5ff99f3abff99f3acff96f3aaffaef8beff62b738f2c7e4b93effffff00
4932*ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff008ac66a9897dd8a
4933*ff96faaaff88f598ff88f598ff85f798ff99ef9fff69b73ad1fefffe04ffffff00ffffff00ffff
4934*ff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ff
4935*ffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00
4936*ffffff00ffffff00ffffff00ffffff00ffffff00fcfefb106fbb45e5b5f3c0ff9ff4b5ff9ff3b2
4937*ff9ef3b1ffa0f6b6ffa6e8a5ff69b83ee0d3eac838ffffff00ffffff00ffffff00ffffff00ffff
4938*ff00ffffff00fefffe0099ce7e7675c452fda5f8b6ff8df49fff8ef4a0ff8cf49dff98fbacff95
4939*dd88ffa4d38a73ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00
4940*ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff
4941*00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffff
4942*ff00ffffff0093cb777288d074ffb1facaffa3f3b7ffa3f3b7ffa1f3b5ffaaf8c2ffafecb1ff5b
4943*b328fa99ce7d84e8f4e22ffafdf915fafdf911f7fbf51ed1e9c5466ab83bb87fca61ffb4fac5ff
4944*94f5a8ff94f4a6ff94f4a6ff90f5a3ffacf6b9ff68b93df7eef7e91dffffff00ffffff00ffffff
4945*00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffff
4946*ff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ff
4947*ffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00f3f9f0066ab93ee0bef2c7ff
4948*adf6c5ffa8f3bdffa8f3bcffa5f3baffabf6c1ffb4f4c3ff9fdd93ff76c251fd6bba3eef69b83a
4949*ec6ebc42f484cb66ffa9eaaaffaaf8beff9bf5afff9bf4adff9af4adff96f4aaffaafcc2ff85d0
4950*6eff92ca7685ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ff
4951*ffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00
4952*ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff
4953*00ffffff00ffffff00ffffff00c8e5b94d65b83afac0f5cfffb0f5c9ffadf3c2ffacf3c2ffabf3
4954*c0ffa9f4c0ffb2f8cbffbbf9d0ffb5f3c3ffb1f1beffb7f6c8ffb6f9cdffa7f6bdffa1f3b5ffa1
4955*f3b5ffa1f4b4ff9ef4b2ffaafac1ffa3e39bff77be4fd3fafcf80affffff00ffffff00ffffff00
4956*ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff
4957*00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffff
4958*ff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff009f
4959*d1876a7fc760ffc3f6d4ffb5f6ceffb0f3c6ffb1f3c6ffb0f3c6ffaef3c4ffacf3c2ffacf4c3ff
4960*abf4c2ffa9f3bfffa8f3bdffa9f3beffa8f3bcffa7f3bbffa4f3b9ffb1fac9ffade9acff5bb12b
4961*dadceed22effffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffff
4962*ff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ff
4963*ffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00
4964*ffffff00ffffff00ffffff00ffffff00ffffff00ffffff009fd1876d68ba3cfbc2f2cbffbef9d8
4965*ffb2f4caffb1f3c7ffb2f3c8ffb2f3c8ffb2f3c7ffb1f3c7ffb0f3c6ffb0f3c5ffaef3c4ffacf3
4966*c2ffb0f6c9ffbff9d5ff9edc91ff5bb029d7e6f3df2dffffff00ffffff00ffffff00ffffff00ff
4967*ffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00
4968*ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff
4969*00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffff
4970*ff00ffffff00ffffff00cde7bf415fb32ee38fd177ffc4f4d1ffc2fadcffb9f7d3ffb5f6cfffb3
4971*f5ccffb3f5ccffb4f5cdffb7f7d1ffbcf9d6ffc6faddffb7eab8ff6bbc40ff87c664abf3f9ef12
4972*ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff
4973*00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffff
4974*ff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ff
4975*ffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00f0f8ec1c
4976*98ce7d7671bd46d98ace70ff9ada8effa8e5a9ffb5eebeffb6efc0ffb2ecb8ffa1e19eff95d684
4977*ff7cc457fd79bf50b1c0e1af4fffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffff
4978*ff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ff
4979*ffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00
4980*ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff
4981*00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00f9fcf70cc6e4b7568ac76a8f6bb8
4982*3ca85fb32cb85ab127bd64b533b374bc4aa0a2d28980e1f1d934ffffff00ffffff00ffffff00ff
4983*ffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00
4984*ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff
4985*00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffff
4986*ff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ff
4987*ffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00
4988*ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff
4989*00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffff
4990*ff00ffffff00ffffff00ffffff00ffffff000000
4991newhex
4992*
4993rmfile ./windows/installer.bmp
4994binary ./windows/installer.ico
4995oldhex
4996*0000010009003030000001000800a80e0000960000002020000001000800a80800003e0f000010
4997*1000000100080068050000e61700003030000001002000a82500004e1d00002020000001002000
4998*a8100000f64200001010000001002000680400009e530000101000000100180068030000065800
4999*002020000001001800a80c00006e5b00003030000001001800a81c000016680000280000003000
5000*0000600000000100080000000000800a00000000000000000000000100000000000000c91d007a
5001*e38a00122f490091eba00079b25a00149b1000acf2ba00a7e6ab00122741000710000031d44a00
5002*90e89d0022ce380058a1340088b86800137c1c0024730800a5ecb000194802000ccc280006c921
5003*0001c71c004f8c5b000eb7150083b5e700a9efb6001534000093c7de00accf98002255030027d0
5004*3f00acdff700498dc5005195ce009bcfef005195d60072b5de0038689b00a4d7ef0083bde700a4
5005*cfef00729db400feffff009bd7ef00a4dfef0093cfef0093c7e7004985b4007aadce0028508300
5006*9ae9a50028588b004170ac00a4d7f70030608b0093c7ef008bbdde0072add600acdfef0072a5c5
5007*0083adce00306093008bc7e7009bcfe700628db4004178b4006a9dc500a7edb2006295bc003870
5008*ac0072a5bc0020487a0020507a00173762007aa5ce0017406a004185bc004178ac003870a40051
5009*8db4008bb5d60030588300b0edb800285072006a8dac002858830072a5ce009eedab0004c21a00
5010*5995bc0030689b00b9eef400628dac00a4d7e7007ab5de005995c5008bb5ce00598dbc003868a4
5011*00172738008bbde70064ad5200b3d29e00a4cc92007295b4006cb25800a2c8890085b66700629d
5012*d2007aadd60097cf8800cae1bb0084bd7e0020486a007aa5bc00629dc50011d13000b3d3a300b9
5013*d6ab00508d5f00adebb3004ba737002858930030507a0008c120005d7c7e00515862006295b400
5014*9adb960083b66400b4f1bd004cc54d0047d75b0072ad520049709b00497093006fab4e0028486a
5015*0023d23d0097cb84008fe79c00a8eeb40020960d0078d175001cce34005ba13900bdd8ac001740
5016*7200caf3d000aadfed0020487200add099006aadde0099e8a400abd59b002cc8390076a864007d
5017*b56100224a0c002a5d100006b31d0071b15d00379924001abf250015cc2f0066a9460062a94000
5018*8abb6c00f1fcf20038404100d5f5d800d4fadd00a4cfde00429c2500478f2a0050904200284062
5019*008edd9100e3eedb00005e0e0070e5850057ad45005fa73a00a2e4e100b2efbb00a4cfd6009ceb
5020*a80093e29900a7edb300a6dfa200c5f6d2009cc8840018cd310002c91f00c5e1b9000cc7220012
5021*cb2b00a8cd9400172f510017cf33009ceca9003b534d009aeaa60064aa4a00b5edee00e2fbe800
5022*eef5eb008dcb7d0024880d006a95bc008abe70008ee79b0093cfde0041689300a9e8ae00539c43
5023*00303741005185b4001daf19005185bc00518dbc00bcefc2008dd6890071c7670074cf71006ad9
5024*750081e48f0089e1900066e07a0085e8960087e897009bc7d6009bc7de00acdea5006aa5ce0062
5025*8593006295c5009bc7e700d1edce00b7e1af00f7fbf5004b89550082d27e005199570062788300
5026*80b45e005c9f8e005185ac0083b5d60030844100e7f4e3005a99a300bceff700b4e7f700000000
5027*00ffffff00fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe
5028*fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe
5029*fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe
5030*fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe
5031*fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe
5032*fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe
5033*fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe
5034*fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe
5035*fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe
5036*fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe
5037*fefefefefefefefefefefefefefefefefefefefefe4f455508fefefefefefefefefefefefefefe
5038*fefefefefefefefefefefefefefefefefefefefefefefefefefefefefe4598234c5a4702fefefe
5039*fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe254e21
5040*2423204c453d4708fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe
5041*fefefefefe366220212423204c4d4e5a339308fefefefefefefefefefefefefefefefefefefefe
5042*fefefefefefefefefefefefefe31252f2021242320413462253d7a484b08fefefefefefefefefe
5043*fefefefefefefefefefefefefefefefefefefefefe7136342f202124232041564d3d3633333147
5044*4bfefefefefefefefefefefefefefefefefefefefefefefefefefefefe497b25342f2021242320
5045*eafd3a3025553131314bfefefefefefefefefefefefefefefefefefefefefefefefefefefe0289
5046*5125342f20212423213afcfd3a5d4636484849fefefefefefefefefefefefefefefefefefefefe
5047*fefefefefefefe02535144f8db2021242327fcfcfdfd3a5dd4445149fefefefefefefefefefefe
5048*fefefefefefefefefefefefefefefefe025346fdfd2c3921246cfdfcfcfcfdfd2c2bed38d5fefe
5049*fefefefefefefefefefefefefefefefefefefefefefefefefec6301ffdfdfcfc22182bfcfcfcfc
5050*fdfd1f26222e27d986fefefefefefefefefefefefefefefefefefefefefefefefefe40261ffdfd
5051*fcfc5bb7e7fcfcfcfcfdfd1f2c2b2d645eec4efefefefefefefefefefefefefefefefefefefefe
5052*fefefe4222261ffdfdfcccb915a0f9f4fcfcfdfd1f2c2b2d3e185f4dfefefefefefefefefefefe
5053*fefefefefefefefefefe59732e22261ffdfd5b701558101d05b37dacfd1f2c2b2d3e392ffefefe
5054*fefefefefefefefefefefefefefefefefefedc6c272e22261ffd959c14c158120905007c0fc972
5055*2c2b2d3e59fefefefefefefefefefefefefefefefefefefefefe415f39182e22261f1bb5a4c413
5056*c3120905001515150fb040643961fefefefefefefefefefefefefefefefefefefefefefe2ff742
5057*3e222630a28a0c90c7a312098e14c11500176396254a4afefefefefefefefefefefefefefefefe
5058*fefefefefefefefe44563f4f33ad0a1e1e0c1009fe1ada1314001763873f285030fefefefefefe
5059*fefefefefefefefefefefefefefefefefefefe3b4f3d0de4840a9b1afefefed074c00a83d8293f
5060*28351b30fefefefefefefefefefefefefefefefefefefefefefefe4a2e3727b6e6e201e11dfefe
5061*0979b401e5e0a9463728351fe83bfefefefefefefefefefefefefefefefefefefefefe3c382d37
5062*27a603d30b03df9f9eaee30b8c038f7e3c3f283535286029fefefefefefefefefefefefefefefe
5063*fefefefefe3c222d3727cb573232cac8bbb199ba323257f2eb382e2228502929fefefefefefefe
5064*fefefefefefefefefefefefefefe687f3b6d276506111143bc19198d43431106de3b3850602929
5065*fefefefefefefefefefefefefefefefefefefefefefefefefe5c4061f3808252d6070707070778
5066*b852695e3c5454fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefed7
5067*ddbdaf16161677f1a1becff6425cfefefefefefefefefefefefefefefefefefefefefefefefefe
5068*fefefefefefefefe9d94e9fefefefefefed2ab6efbd1fefefefefefefefefefefefefefefefefe
5069*fefefefefefefefefefefefefefefefefe04aaef66fefefefefed2cd8bfefefefefefefefefefe
5070*fefefefefefefefefefefefefefefefefefefefefefefefefefe81eecdf5fefefefe769a2aa5fe
5071*fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefebf2ac2
5072*6bfefe75a7a8fa04fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe
5073*fefefefefefe88c5f0fa971c6f2a2a0efefefefefefefefefefefefefefefefefefefefefefefe
5074*fefefefefefefefefefefefefefefefe851cce2a2a2ab20efefefefefefefefefefefefefefefe
5075*fefefefefefefefefefefefefefefefefefefefefefefefefefe92670d910e6afefefefefefefe
5076*fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe
5077*fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe
5078*fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe
5079*fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe
5080*fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe
5081*fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe
5082*fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe
5083*fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe
5084*fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe
5085*fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe
5086*fefefefefefefefeffffffffffff0000ffffffffffff0000ffffffffffff0000ffffffffffff00
5087*00ffffffffffff0000ffffffffffff0000ffffffffffff0000ffffffffffff0000fffffc1fffff
5088*0000fffff803ffff0000ffffe000ffff0000ffffc0007fff0000ffff80003fff0000ffff00001f
5089*ff0000fffe00001fff0000fffc00001fff0000fffc00001fff0000fffc00001fff0000fffc0000
5090*07ff0000fffc000003ff0000fff8000003ff0000ffe0000007ff0000ffc000000fff0000ff8000
5091*000fff0000ffc000000fff0000fff0000007ff0000fffc000003ff0000fff8000001ff0000fff0
5092*000000ff0000fff0000001ff0000fff0000007ff0000fffc00001fff0000ffffc0007fff0000ff
5093*ffc7e0ffff0000ffffc3e3ffff0000ffffc3c3ffff0000ffffe183ffff0000ffffe007ffff0000
5094*fffff00fffff0000fffff81fffff0000ffffffffffff0000ffffffffffff0000ffffffffffff00
5095*00ffffffffffff0000ffffffffffff0000ffffffffffff0000ffffffffffff0000ffffffffffff
5096*000028000000200000004000000001000800000000008004000000000000000000000001000000
5097*00000000c91d007ae38a00122f490091eba00079b25a00149b1000acf2ba00a7e6ab0012274100
5098*0710000031d44a0090e89d0022ce380058a1340088b86800137c1c0024730800a5ecb000194802
5099*000ccc280006c9210001c71c004f8c5b000eb7150083b5e700a9efb6001534000093c7de00accf
5100*98002255030027d03f00acdff700498dc5005195ce009bcfef005195d60072b5de0038689b00a4
5101*d7ef0083bde700a4cfef00729db400feffff009bd7ef00a4dfef0093cfef0093c7e7004985b400
5102*7aadce00285083009ae9a50028588b004170ac00a4d7f70030608b0093c7ef008bbdde0072add6
5103*00acdfef0072a5c50083adce00306093008bc7e7009bcfe700628db4004178b4006a9dc500a7ed
5104*b2006295bc003870ac0072a5bc0020487a0020507a00173762007aa5ce0017406a004185bc0041
5105*78ac003870a400518db4008bb5d60030588300b0edb800285072006a8dac002858830072a5ce00
5106*9eedab0004c21a005995bc0030689b00b9eef400628dac00a4d7e7007ab5de005995c5008bb5ce
5107*00598dbc003868a400172738008bbde70064ad5200b3d29e00a4cc92007295b4006cb25800a2c8
5108*890085b66700629dd2007aadd60097cf8800cae1bb0084bd7e0020486a007aa5bc00629dc50011
5109*d13000b3d3a300b9d6ab00508d5f00adebb3004ba737002858930030507a0008c120005d7c7e00
5110*515862006295b4009adb960083b66400b4f1bd004cc54d0047d75b0072ad520049709b00497093
5111*006fab4e0028486a0023d23d0097cb84008fe79c00a8eeb40020960d0078d175001cce34005ba1
5112*3900bdd8ac0017407200caf3d000aadfed0020487200add099006aadde0099e8a400abd59b002c
5113*c8390076a864007db56100224a0c002a5d100006b31d0071b15d00379924001abf250015cc2f00
5114*66a9460062a940008abb6c00f1fcf20038404100d5f5d800d4fadd00a4cfde00429c2500478f2a
5115*0050904200284062008edd9100e3eedb00005e0e0070e5850057ad45005fa73a00a2e4e100b2ef
5116*bb00a4cfd6009ceba80093e29900a7edb300a6dfa200c5f6d2009cc8840018cd310002c91f00c5
5117*e1b9000cc7220012cb2b00a8cd9400172f510017cf33009ceca9003b534d009aeaa60064aa4a00
5118*b5edee00e2fbe800eef5eb008dcb7d0024880d006a95bc008abe70008ee79b0093cfde00416893
5119*00a9e8ae00539c4300303741005185b4001daf19005185bc00518dbc00bcefc2008dd6890071c7
5120*670074cf71006ad9750081e48f0089e1900066e07a0085e8960087e897009bc7d6009bc7de00ac
5121*dea5006aa5ce00628593006295c5009bc7e700d1edce00b7e1af00f7fbf5004b89550082d27e00
5122*519957006278830080b45e005c9f8e005185ac0083b5d60030844100e7f4e3005a99a300bceff7
5123*00b4e7f70000000000ffffff00fefefefefefefefefefefefefefe4f455508fefefefefefefefe
5124*fefefefefefefefefefefefefefefefefefefe4598234c5a4702fefefefefefefefefefefefefe
5125*fefefefefefefefefefe254e212423204c453d4708fefefefefefefefefefefefefefefefefefe
5126*fefe366220212423204c4d4e5a339308fefefefefefefefefefefefefefefefefe31252f202124
5127*2320413462253d7a484b08fefefefefefefefefefefefefefe7136342f202124232041564d3d36
5128*333331474bfefefefefefefefefefefefe497b25342f2021242320eafd3a3025553131314bfefe
5129*fefefefefefefefefe02895125342f20212423213afcfd3a5d4636484849fefefefefefefefefe
5130*fefe02535144f8db2021242327fcfcfdfd3a5dd4445149fefefefefefefefefefefe025346fdfd
5131*2c3921246cfdfcfcfcfdfd2c2bed38d5fefefefefefefefefefefec6301ffdfdfcfc22182bfcfc
5132*fcfcfdfd1f26222e27d986fefefefefefefefefe40261ffdfdfcfc5bb7e7fcfcfcfcfdfd1f2c2b
5133*2d645eec4efefefefefefefe4222261ffdfdfcccb915a0f9f4fcfcfdfd1f2c2b2d3e185f4dfefe
5134*fefefe59732e22261ffdfd5b701558101d05b37dacfd1f2c2b2d3e392ffefefefefedc6c272e22
5135*261ffd959c14c158120905007c0fc9722c2b2d3e59fefefefefe415f39182e22261f1bb5a4c413
5136*c3120905001515150fb040643961fefefefefefe2ff7423e222630a28a0c90c7a312098e14c115
5137*00176396254a4afefefefefefefefe44563f4f33ad0a1e1e0c1009fe1ada1314001763873f2850
5138*30fefefefefefefefefe3b4f3d0de4840a9b1afefefed074c00a83d8293f28351b30fefefefefe
5139*fefe4a2e3727b6e6e201e11dfefe0979b401e5e0a9463728351fe83bfefefefefe3c382d3727a6
5140*03d30b03df9f9eaee30b8c038f7e3c3f283535286029fefefefe3c222d3727cb573232cac8bbb1
5141*99ba323257f2eb382e2228502929fefefefefe687f3b6d276506111143bc19198d43431106de3b
5142*3850602929fefefefefefefefefe5c4061f3808252d6070707070778b852695e3c5454fefefefe
5143*fefefefefefefefefefefed7ddbdaf16161677f1a1becff6425cfefefefefefefefefefefefefe
5144*fefefefe9d94e9fefefefefefed2ab6efbd1fefefefefefefefefefefefefefefefefefe04aaef
5145*66fefefefefed2cd8bfefefefefefefefefefefefefefefefefefefefe81eecdf5fefefefe769a
5146*2aa5fefefefefefefefefefefefefefefefefefefefefebf2ac26bfefe75a7a8fa04fefefefefe
5147*fefefefefefefefefefefefefefefefe88c5f0fa971c6f2a2a0efefefefefefefefefefefefefe
5148*fefefefefefefefefefe851cce2a2a2ab20efefefefefefefefefefefefefefefefefefefefefe
5149*fefefefe92670d910e6afefefefefefefefefefefefefefffc1ffffff803ffffe000ffffc0007f
5150*ff80003fff00001ffe00001ffc00001ffc00001ffc00001ffc000007fc000003f8000003e00000
5151*07c000000f8000000fc000000ff0000007fc000003f8000001f0000000f0000001f0000007fc00
5152*001fffc0007fffc7e0ffffc3e3ffffc3c3ffffe183ffffe007fffff00ffffff81fff2800000010
5153*000000200000000100080000000000400100000000000000000000000100000000000000000000
5154*ffffff0093c07a00ecf6e800edf5e800afcf9900bad7ab00bbd6af00bed8b000d5e7cd007a9b66
5155*00b7dca700c5e4bc00bddcaf00bae0ab0096cb8c00a6d7a20094c191008ebb85008dc17e00a1d5
5156*a10087b3c4006a97c1004a7c790098dd9500a2e3ab0095daa10098dda5009ddea700a3e6a2006d
5157*ada6007da1d0006a90ac008ab7ca0094caf60086c7b90091e18f00a1f2b1007cc67c0071b56b00
5158*9dedaa009deea40072a38d008fbde300a0d1ee008ab6d0006c97ad0078abdb005a9689006ddb6e
5159*0059da69000e28000042ba46005be66d004c7c59008eb7da00aaddf9008cbed9005d94c0005d94
5160*c80086bae4004b8b7b0021c628001ad7360014570e000f31060008c71c0000d40d000955230063
5161*85b70087b7d800447eb7004d8bbc007fb7dd00a3d7f200acdef4006cc1830006d21d000a7d0a00
5162*0957000000c31500229939005e9497007fb4dc00659fc7007dacd0009bceec00afe3f800c0e7ff
5163*0080dba4001aab27003c8245007ebaac00b1d5f200ade4fc009ad9f20077b1db004882b300537c
5164*9e00aadef200bff4fb00b0e0fa008fcbe000bdedf900c4f5ff00b1e8f700a6dcf10099d0f00068
5165*9ac700416e9e000b2944005885a60083b8d9005497c8005fa0d900a4daee00bff2f700b5e9f600
5166*93cce0004e79a0001b3a66002d527f002c5586003d73ad005094c800589ed50064a1d000a6d8ea
5167*006798b90031608e001c487b00143c67001a3757003b6ea0005397cb005fa4d8004381bc004175
5168*ab002a5f97001a436e00142d4b002f5f9700417eb90060a5dc004286c2002f6296001733530016
5169*2849004989bf002047700001050b00000000000000000000000000000000000000000000000000
5170*000000000000000000000000000000000000000000000000000000000000000000000000000000
5171*000000000000000000000000000000000000000000000000000000000000000000000000000000
5172*000000000000000000000000000000000000000000000000000000000000000000000000000000
5173*000000000000000000000000000000000000000000000000000000000000000000000000000000
5174*000000000000000000000000000000000000000000000000000000000000000000000000000000
5175*000000000000000000000000000000000000000000000000000000000000000000000000000000
5176*000000000000000000000000000000000000000000000000000000000000000000000000000000
5177*000000000000000000000000000000000000000000000000000000000000000000000000000000
5178*000000000000000000000000000000000000000000000000000000000000000000000000000000
5179*000000000000000000000000000000000000000000000000000000000000000000000000000000
5180*0000000000000000000000000094959600000000000000000000008d8e8f909192930000000000
5181*0000008485868788898a8b8c000000000000797a7b7c7d7e7f8081828300000000006e6f707172
5182*737475767778000000000062636465666768696a6b6c6d00000055565758595a5b5c5d5e5f6061
5183*004748494a4b4c4d4e4f50515253540000003a3b3c3d3e3f4041424344454600000000002f3031
5184*3233003435363738390000002122232425262728292a2b2c2d2e000000161718191a1b1c1d1e1f
5185*20000000000000000f1011121314150000000000000000000b0c00000d0e000000000000000000
5186*0000060708090a000000000000000000000002030405000000000000fe3f0000f80f0000f00700
5187*00e0030000e0030000e0010000c00100000003000080030000e0010000c0000000e0030000f80f
5188*0000f99f0000fc1f0000fc3f000028000000300000006000000001002000000000008025000000
5189*000000000000000000000000000000000000000000000000000000000000000000000000000000
5190*000000000000000000000000000000000000000000000000000000000000000000000000000000
5191*000000000000000000000000000000000000000000000000000000000000000000000000000000
5192*000000000000000000000000000000000000000000000000000000000000000000000000000000
5193*000000000000000000000000000000000000000000000000000000000000000000000000000000
5194*000000000000000000000000000000000000000000000000000000000000000000000000000000
5195*000000000000000000000000000000000000000000000000000000000000000000000000000000
5196*000000000000000000000000000000000000000000000000000000000000000000000000000000
5197*000000000000000000000000000000000000000000000000000000000000000000000000000000
5198*000000000000000000000000000000000000000000000000000000000000000000000000000000
5199*000000000000000000000000000000000000000000000000000000000000000000000000000000
5200*000000000000000000000000000000000000000000000000000000000000000000000000000000
5201*000000000000000000000000000000000000000000000000000000000000000000000000000000
5202*000000000000000000000000000000000000000000000000000000000000000000000000000000
5203*000000000000000000000000000000000000000000000000000000000000000000000000000000
5204*000000000000000000000000000000000000000000000000000000000000000000000000000000
5205*000000000000000000000000000000000000000000000000000000000000000000000000000000
5206*000000000000000000000000000000000000000000000000000000000000000000000000000000
5207*000000000000000000000000000000000000000000000000000000000000000000000000000000
5208*000000000000000000000000000000000000000000000000000000000000000000000000000000
5209*000000000000000000000000000000000000000000000000000000000000000000000000000000
5210*000000000000000000000000000000000000000000000000000000000000000000000000000000
5211*000000000000000000000000000000000000000000000000000000000000000000000000000000
5212*000000000000000000000000000000000000000000000000000000000000000000000000000000
5213*000000000000000000000000000000000000000000000000000000000000000000000000000000
5214*000000000000000000000000000000000000000000000000000000000000000000000000000000
5215*000000000000000000000000000000000000000000000000000000000000000000000000000000
5216*000000000000000000000000000000000000000000000000000000000000000000000000000000
5217*000000000000000000000000000000000000000000000000000000000000000000000000000000
5218*000000000000000000000000000000000000000000000000000000000000000000000000000000
5219*000000000000000000000000000000000000000000000000000000000000000000000000000000
5220*000000000000000000000000000000000000000000000000000000000000000000000000000000
5221*000000000000000000000000000000000000000000000000000000000000000000000000000000
5222*000000000000000000000000000000000000000000000000000000000000000000000000000000
5223*000000000000000000000000000000000000000000000000000000000000000000000000000000
5224*000000000000000000000000000000000000000000000000000000000000000000000000000000
5225*000000000000000000000000000000000000000000000000000000000000000000000000000000
5226*000000000000000000000000000000000000000000000000000000000000000000000000000000
5227*000000000000000000000000000000000000000000000000000000000000000000000000000000
5228*000000000000000000000000000000000000000000000000000000000000000000000000000000
5229*000000000000000000000000000000000000000000000000000000000000000000000000000000
5230*000000000000000000000000000000000000000000000000000000000000000000000000000000
5231*00518db4ff3870acff285883ff122741ff000000ff000000000000000000000000000000000000
5232*000000000000000000000000000000000000000000000000000000000000000000000000000000
5233*000000000000000000000000000000000000000000000000000000000000000000000000000000
5234*000000000000000000000000000000000000000000000000000000000000000000000000000000
5235*0000000000000000000000000000000000000000000000000000000000000000003870acff6aad
5236*deff5195d6ff4185bcff30689bff20487aff122f49ff000000ff000000ff000000000000000000
5237*000000000000000000000000000000000000000000000000000000000000000000000000000000
5238*000000000000000000000000000000000000000000000000000000000000000000000000000000
5239*000000000000000000000000000000000000000000000000000000000000000000000000000000
5240*0000000000000000000000000000000000000000000038689bff3870a4ff5195ceff72b5deff51
5241*95d6ff498dc5ff4185bcff3870acff306093ff20487aff122741ff000000ff000000ff00000000
5242*000000000000000000000000000000000000000000000000000000000000000000000000000000
5243*000000000000000000000000000000000000000000000000000000000000000000000000000000
5244*000000000000000000000000000000000000000000000000000000000000000000000000000000
5245*00000000000000000000000000000030608bff3868a4ff498dc5ff5195ceff72b5deff5195d6ff
5246*498dc5ff4185bcff4178acff3870a4ff30689bff28588bff174072ff122741ff000000ff000000
5247*000000000000000000000000000000000000000000000000000000000000000000000000000000
5248*000000000000000000000000000000000000000000000000000000000000000000000000000000
5249*000000000000000000000000000000000000000000000000000000000000000000000000000000
5250*0000000000000000285083ff38689bff4985b4ff498dc5ff5195ceff72b5deff5195d6ff498dc5
5251*ff4178b4ff4170acff3868a4ff38689bff306093ff285893ff20507aff17406aff122741ff0000
5252*000000000000000000000000000000000000000000000000000000000000000000000000000000
5253*000000000000000000000000000000000000000000000000000000000000000000000000000000
5254*000000000000000000000000000000000000000000000000000000000000000000000000000000
5255*0020486aff30608bff4170acff4985b4ff498dc5ff5195ceff72b5deff5195d6ff498dc5ff4178
5256*b4ff72a5ceff4178acff306093ff30608bff28588bff28588bff285083ff20487aff17406aff00
5257*000000000000000000000000000000000000000000000000000000000000000000000000000000
5258*000000000000000000000000000000000000000000000000000000000000000000000000000000
5259*000000000000000000000000000000000000000000000000000000000000000000173762ff3050
5260*7aff38689bff4170acff4985b4ff498dc5ff5195ceff72b5deff5195d6ff498dc5ff6aa5ceffb4
5261*e7f7ffacdfefff7aadceff38689bff285883ff285083ff285083ff285083ff17406aff00000000
5262*000000000000000000000000000000000000000000000000000000000000000000000000000000
5263*000000000000000000000000000000000000000000000000000000000000000000000000000000
5264*0000000000000000000000000000000000000000000000000000122f49ff28486aff305883ff38
5265*689bff4170acff4985b4ff498dc5ff5195ceff72b5deff5195d6ff5195ceffacdfefffbceff7ff
5266*b4e7f7ffacdfefffa4d7e7ff72a5bcff30608bff20507aff20507aff173762ff00000000000000
5267*000000000000000000000000000000000000000000000000000000000000000000000000000000
5268*000000000000000000000000000000000000000000000000000000000000000000000000000000
5269*0000000000000000000000000000000000000000000000122f49ff285072ff305883ff6295bcff
5270*83b5d6ff5185bcff498dc5ff5195ceff72b5deff5195d6ff83bde7ffbceff7ffbceff7ffb4e7f7
5271*ffb4e7f7ffacdfefffa4d7e7ff93cfdeff6295bcff305883ff173762ff00000000000000000000
5272*000000000000000000000000000000000000000000000000000000000000000000000000000000
5273*000000000000000000000000000000000000000000000000000000000000000000000000000000
5274*0000000000000000000000000000000000000000122f49ff285072ff72a5bcffb4e7f7ffb4e7f7
5275*ffa4dfefff72add6ff5195ceff72b5deff629dd2ffb4e7f7ffbceff7ffbceff7ffbceff7ffb4e7
5276*f7ffb4e7f7ffa4dfefff9bd7efff9bc7e7ff8bbddeff416893ff00000000000000000000000000
5277*000000000000000000000000000000000000000000000000000000000000000000000000000000
5278*000000000000000000000000000000000000000000000000000000000000000000000000000000
5279*0000000000000000000000000000000000172f51ff7aadceffacdff7ffb4e7f7ffb4e7f7ffbcef
5280*f7ffbceff7ff9bcfefff83b5e7ff9bd7efffbceff7ffbceff7ffbceff7ffbceff7ffb4e7f7ffb4
5281*e7f7ffacdff7ffa4d7efff9bcfefff93c7e7ff83bde7ff5185b4ff49709bff0000000000000000
5282*000000000000000000000000000000000000000000000000000000000000000000000000000000
5283*000000000000000000000000000000000000000000000000000000000000000000000000000000
5284*0000000000000000000000000000628db4ffa4d7efffacdff7ffb4e7f7ffb4e7f7ffbceff7ffbc
5285*eff7ffb9eef4ffa2e4e1ff9bc7d6ffbceff7ffbceff7ffbceff7ffbceff7ffb4e7f7ffb4e7f7ff
5286*acdff7ffa4dfefff9bd7efff93cfefff8bbde7ff7ab5deff6295c5ff3870a4ff00000000000000
5287*000000000000000000000000000000000000000000000000000000000000000000000000000000
5288*000000000000000000000000000000000000000000000000000000000000000000000000000000
5289*000000000000006a9dc5ff9bcfefffa4d7efffacdff7ffb4e7f7ffb4e7f7ffbceff7ffb5edeeff
5290*a4cfd6ff01c71cff06b31dff308441ff627883ffbceff7ffbceff7ffb4e7f7ffb4e7f7ffacdff7
5291*ffa4dfefff9bd7efff93cfefff8bc7e7ff83b5e7ff5995c5ff4178acff00000000000000000000
5292*000000000000000000000000000000000000000000000000000000000000000000000000000000
5293*00000000000000000000000000000000000000000000000000000000000000000000005995bcff
5294*629dc5ff93c7e7ff9bcfefffa4d7efffacdff7ffb4e7f7ffb4e7f7ffb9eef4ff84bd7eff01c71c
5295*ff04c21aff247308ff225503ff149b10ff005e0eff5d7c7effa4cfdeffb4e7f7ffacdff7ffa4df
5296*efff9bd7efff93cfefff8bc7e7ff72add6ff4985b4ff0000000000000000000000000000000000
5297*000000000000000000000000000000000000000000000000000000000000000000000000000000
5298*00000000000000000000000000000000000000000000000000000000518dbcff629dd2ff83bde7
5299*ff93c7e7ff9bcfefffa4d7efffacdff7ffb4e7f7ffaadfedff76a864ff06c921ff02c91fff04c2
5300*1aff194802ff071000ff149b10ff00c91dff08c120ff137c1cff3b534dff7aa5bcffa4dfefff9b
5301*d7efff93cfefff8bc7e7ff5995bcff000000000000000000000000000000000000000000000000
5302*000000000000000000000000000000000000000000000000000000000000000000000000000000
5303*0000000000000000000000000000000000000000004178b4ff5995c5ff72add6ff83b5e7ff93c7
5304*e7ff9bcfefffa4d7efffacdff7ff93c7deff57ad45ff15cc2fff12cb2bff0ccc28ff0cc722ff19
5305*4802ff071000ff149b10ff00c91dff01c71cff01c71cff01c71cff137c1cff284062ff628db4ff
5306*8bbde7ff72add6ff598dbcff000000000000000000000000000000000000000000000000000000
5307*000000000000000000000000000000000000000000000000000000000000000000000000000000
5308*000000000000000000000000000000000000000000004985b4ff5185acff6a9dc5ff8bc7e7ff9b
5309*cfefffa4d7efff7aadceff379924ff23d23dff22ce38ff1cce34ff17cf33ff1abf25ff194802ff
5310*071000ff20960dff06c921ff02c91fff01c71cff00c91dff0eb715ff172738ff204872ff38689b
5311*ff7aa5ceff7aa5ceff000000000000000000000000000000000000000000000000000000000000
5312*000000000000000000000000000000000000000000000000000000000000000000000000000000
5313*0000000000000000000000000000000000000000000000000000006295bcff72a5ceff9bcfe7ff
5314*518db4ff28588bff429c25ff31d44aff27d03fff27d03fff22ce38ff247308ff071000ff000000
5315*ff153400ff1daf19ff0ccc28ff06c921ff00c91dff0eb715ff172738ff497093ff9bcfe7ffa4cf
5316*efff8bb5d6ff7aadceff0000000000000000000000000000000000000000000000000000000000
5317*000000000000000000000000000000000000000000000000000000000000000000000000000000
5318*000000000000000000000000000000000000000000000000000000000000000072a5c5ff518db4
5319*ff306093ff58a134ff66e07aff47d75bff31d44aff2cc839ff153400ff000000ff000000ff0000
5320*00ff24880dff11d130ff18cd31ff31d44aff4cc54dff303741ff729db4ff9bcfe7ffa4cfefffa4
5321*d7f7ff93c7deff7aadceff00000000000000000000000000000000000000000000000000000000
5322*000000000000000000000000000000000000000000000000000000000000000000000000000000
5323*000000000000000000000000000000000000000000000000007aa5ceff93c7e7ff93c7efff83bd
5324*e7ff5fa73aff87e897ff81e48fff7ae38aff6ad975ff225503ff000000ff000000ff071000ff4b
5325*a737ff70e585ff7ae38aff85e896ff74cf71ff384041ff72a5bcff93c7efffa4cfefffa4d7f7ff
5326*acdff7ff9bc7deff72a5c5ff000000000000000000000000000000000000000000000000000000
5327*000000000000000000000000000000000000000000000000000000000000000000000000000000
5328*00000000000000000000000000000000000083adceff8bbddeff93cfefff93c7efff83bde7ff62
5329*a940ff91eba0ff8ee79bff90e89dff91eba0ff71c767ff2a5d10ff224a0cff478f2aff89e190ff
5330*90e89dff8fe79cff91eba0ff78d175ff515862ff83adceff9bcfe7ffa4cfefffa4d7f7ffa4d7f7
5331*ffa4cfefff8bb5ceff729db4ff0000000000000000000000000000000000000000000000000000
5332*000000000000000000000000000000000000000000000000000000000000000000000000000000
5333*00000000000000000000000000000083adceff9bcfefff93cfefff93c7efff83bde7ff64aa4aff
5334*9eedabff9ae9a5ff9ae9a5ff9aeaa6ff9ceca9ff93e299ff8edd91ff99e8a4ff9ceba8ff9ae9a5
5335*ff9ae9a5ff9eedabff82d27eff628593ff8bbddeff93c7e7ff9bcfefffa4cfefff8bb5d6ff729d
5336*b4ff729db4ff000000000000000000000000000000000000000000000000000000000000000000
5337*000000000000000000000000000000000000000000000000000000000000000000000000000000
5338*0000000000000000000000007295b4ff6295b4ff72a5c5ff7aadd6ff83bde7ff64ad52ffacf2ba
5339*ffa5ecb0ffa5ecb0ffa7edb2ffa7edb3ffa9efb6ffa9efb6ffa8eeb4ffa7edb2ffa7edb2ffa5ec
5340*b0ffacf2baff8dd689ff72a5c5ff8bbddeff8bb5d6ff8bb5ceff729db4ff729db4ff0000000000
5341*000000000000000000000000000000000000000000000000000000000000000000000000000000
5342*000000000000000000000000000000000000000000000000000000000000000000000000000000
5343*0000000000000000000000000000000000628dacff628db4ff598dbcff519957ff9adb96ffb4f1
5344*bdffb0edb8ffa9e8aeffa7e6abffa7e6abffa7e6abffa7e6abffa7e6abffadebb3ffb2efbbffb0
5345*edb8ff6cb258ff7ab5deff83adceff6a8dacff6a8dacff00000000000000000000000000000000
5346*000000000000000000000000000000000000000000000000000000000000000000000000000000
5347*000000000000000000000000000000000000000000000000000000000000000000000000000000
5348*000000000000000000000000000000000000000000000000000000000000539c43ffbcefc2ffa6
5349*dfa2ff509042ff4f8c5bff4f8c5bff4f8c5bff508d5fff4b8955ff71b15dffc5f6d2ff8dcb7dff
5350*5c9f8eff6a9dc5ff628dacff000000000000000000000000000000000000000000000000000000
5351*000000000000000000000000000000000000000000000000000000000000000000000000000000
5352*000000000000000000000000000000000000000000000000000000000000000000000000000000
5353*0000000000000000000000000000000000000000000000000000007db561ffcaf3d0ffacdea5ff
5354*0000000000000000000000000000000000000000000000008abe70ffd4faddff97cf88ff5a99a3
5355*ff6a95bcff00000000000000000000000000000000000000000000000000000000000000000000
5356*000000000000000000000000000000000000000000000000000000000000000000000000000000
5357*000000000000000000000000000000000000000000000000000000000000000000000000000000
5358*00000000000000000000000000000000000000000000000079b25affd5f5d8ffb7e1afffb3d29e
5359*ff00000000000000000000000000000000000000008abe70ffe2fbe8ff97cb84ff000000000000
5360*000000000000000000000000000000000000000000000000000000000000000000000000000000
5361*000000000000000000000000000000000000000000000000000000000000000000000000000000
5362*000000000000000000000000000000000000000000000000000000000000000000000000000000
5363*00000000000000000000000000000000000000000083b664ffd1edceffe2fbe8ff80b45eff0000
5364*0000000000000000000000000000b9d6abffabd59bfffeffffff66a946ff000000000000000000
5365*000000000000000000000000000000000000000000000000000000000000000000000000000000
5366*000000000000000000000000000000000000000000000000000000000000000000000000000000
5367*000000000000000000000000000000000000000000000000000000000000000000000000000000
5368*000000000000000000000000000000000000000000009cc884fffeffffffc5e1b9ff85b667ff00
5369*00000000000000b3d3a3ff8abb6cfff1fcf2ffe7f4e3ff79b25aff000000000000000000000000
5370*000000000000000000000000000000000000000000000000000000000000000000000000000000
5371*000000000000000000000000000000000000000000000000000000000000000000000000000000
5372*000000000000000000000000000000000000000000000000000000000000000000000000000000
5373*000000000000000000000000000000000000006fab4effa8cd94fff7fbf5ffe7f4e3ffadd099ff
5374*accf98ffcae1bbfffefffffffeffffff88b868ff00000000000000000000000000000000000000
5375*000000000000000000000000000000000000000000000000000000000000000000000000000000
5376*000000000000000000000000000000000000000000000000000000000000000000000000000000
5377*000000000000000000000000000000000000000000000000000000000000000000000000000000
5378*000000000000000000000000000000000000000072ad52ffaccf98ffeef5ebfffefffffffeffff
5379*fffeffffffe3eedbff88b868ff0000000000000000000000000000000000000000000000000000
5380*000000000000000000000000000000000000000000000000000000000000000000000000000000
5381*000000000000000000000000000000000000000000000000000000000000000000000000000000
5382*000000000000000000000000000000000000000000000000000000000000000000000000000000
5383*000000000000000000000000000000000000000000bdd8acffa4cc92ff58a134ff5ba139ff88b8
5384*68ffa2c889ff000000000000000000000000000000000000000000000000000000000000000000
5385*000000000000000000000000000000000000000000000000000000000000000000000000000000
5386*000000000000000000000000000000000000000000000000000000000000000000000000000000
5387*000000000000000000000000000000000000000000000000000000000000000000000000000000
5388*000000000000000000000000000000000000000000000000000000000000000000000000000000
5389*000000000000000000000000000000000000000000000000000000000000000000000000000000
5390*000000000000000000000000000000000000000000000000000000000000000000000000000000
5391*000000000000000000000000000000000000000000000000000000000000000000000000000000
5392*000000000000000000000000000000000000000000000000000000000000000000000000000000
5393*000000000000000000000000000000000000000000000000000000000000000000000000000000
5394*000000000000000000000000000000000000000000000000000000000000000000000000000000
5395*000000000000000000000000000000000000000000000000000000000000000000000000000000
5396*000000000000000000000000000000000000000000000000000000000000000000000000000000
5397*000000000000000000000000000000000000000000000000000000000000000000000000000000
5398*000000000000000000000000000000000000000000000000000000000000000000000000000000
5399*000000000000000000000000000000000000000000000000000000000000000000000000000000
5400*000000000000000000000000000000000000000000000000000000000000000000000000000000
5401*000000000000000000000000000000000000000000000000000000000000000000000000000000
5402*000000000000000000000000000000000000000000000000000000000000000000000000000000
5403*000000000000000000000000000000000000000000000000000000000000000000000000000000
5404*000000000000000000000000000000000000000000000000000000000000000000000000000000
5405*000000000000000000000000000000000000000000000000000000000000000000000000000000
5406*000000000000000000000000000000000000000000000000000000000000000000000000000000
5407*000000000000000000000000000000000000000000000000000000000000000000000000000000
5408*000000000000000000000000000000000000000000000000000000000000000000000000000000
5409*000000000000000000000000000000000000000000000000000000000000000000000000000000
5410*000000000000000000000000000000000000000000000000000000000000000000000000000000
5411*000000000000000000000000000000000000000000000000000000000000000000000000000000
5412*000000000000000000000000000000000000000000000000000000000000000000000000000000
5413*000000000000000000000000000000000000000000000000000000000000000000000000000000
5414*000000000000000000000000000000000000000000000000000000000000000000000000000000
5415*000000000000000000000000000000000000000000000000000000000000000000000000000000
5416*000000000000000000000000000000000000000000000000000000000000000000000000000000
5417*000000000000000000000000000000000000000000000000000000000000000000000000000000
5418*000000000000000000000000000000000000000000000000000000000000000000000000000000
5419*000000000000000000000000000000000000000000000000000000000000000000000000000000
5420*000000000000000000000000000000000000000000000000000000000000000000000000000000
5421*000000000000000000000000000000000000000000000000000000000000000000000000000000
5422*000000000000000000000000000000000000000000000000000000000000000000000000000000
5423*000000000000000000000000000000000000000000000000000000000000000000000000000000
5424*000000000000000000000000000000000000000000000000000000000000000000000000000000
5425*000000000000000000000000000000000000000000000000000000ffffffffffff0000ffffffff
5426*ffff0000ffffffffffff0000ffffffffffff0000ffffffffffff0000ffffffffffff0000ffffff
5427*ffffff0000ffffffffffff0000fffffc1fffff0000fffff803ffff0000ffffe000ffff0000ffff
5428*c0007fff0000ffff80003fff0000ffff00001fff0000fffe00001fff0000fffc00001fff0000ff
5429*fc00001fff0000fffc00001fff0000fffc000007ff0000fffc000003ff0000fff8000003ff0000
5430*ffe0000007ff0000ffc000000fff0000ff8000000fff0000ffc000000fff0000fff0000007ff00
5431*00fffc000003ff0000fff8000001ff0000fff0000000ff0000fff0000001ff0000fff0000007ff
5432*0000fffc00001fff0000ffffc0007fff0000ffffc7e0ffff0000ffffc3e3ffff0000ffffc3c3ff
5433*ff0000ffffe183ffff0000ffffe007ffff0000fffff00fffff0000fffff81fffff0000ffffffff
5434*ffff0000ffffffffffff0000ffffffffffff0000ffffffffffff0000ffffffffffff0000ffffff
5435*ffffff0000ffffffffffff0000ffffffffffff0000280000002000000040000000010020000000
5436*000080100000000000000000000000000000000000000000000000000000000000000000000000
5437*000000000000000000000000000000000000000000000000000000000000000000000000000000
5438*518db4ff3870acff285883ff122741ff000000ff00000000000000000000000000000000000000
5439*000000000000000000000000000000000000000000000000000000000000000000000000000000
5440*000000000000000000000000000000000000000000000000000000000000000000000000000000
5441*000000000000003870acff6aaddeff5195d6ff4185bcff30689bff20487aff122f49ff000000ff
5442*000000ff0000000000000000000000000000000000000000000000000000000000000000000000
5443*000000000000000000000000000000000000000000000000000000000000000000000000000000
5444*0000000000000000000038689bff3870a4ff5195ceff72b5deff5195d6ff498dc5ff4185bcff38
5445*70acff306093ff20487aff122741ff000000ff000000ff00000000000000000000000000000000
5446*000000000000000000000000000000000000000000000000000000000000000000000000000000
5447*000000000000000000000000000000000030608bff3868a4ff498dc5ff5195ceff72b5deff5195
5448*d6ff498dc5ff4185bcff4178acff3870a4ff30689bff28588bff174072ff122741ff000000ff00
5449*000000000000000000000000000000000000000000000000000000000000000000000000000000
5450*000000000000000000000000000000000000000000000000285083ff38689bff4985b4ff498dc5
5451*ff5195ceff72b5deff5195d6ff498dc5ff4178b4ff4170acff3868a4ff38689bff306093ff2858
5452*93ff20507aff17406aff122741ff00000000000000000000000000000000000000000000000000
5453*0000000000000000000000000000000000000000000000000000000000000020486aff30608bff
5454*4170acff4985b4ff498dc5ff5195ceff72b5deff5195d6ff498dc5ff4178b4ff72a5ceff4178ac
5455*ff306093ff30608bff28588bff28588bff285083ff20487aff17406aff00000000000000000000
5456*000000000000000000000000000000000000000000000000000000000000000000000000000017
5457*3762ff30507aff38689bff4170acff4985b4ff498dc5ff5195ceff72b5deff5195d6ff498dc5ff
5458*6aa5ceffb4e7f7ffacdfefff7aadceff38689bff285883ff285083ff285083ff285083ff17406a
5459*ff0000000000000000000000000000000000000000000000000000000000000000000000000000
5460*000000000000122f49ff28486aff305883ff38689bff4170acff4985b4ff498dc5ff5195ceff72
5461*b5deff5195d6ff5195ceffacdfefffbceff7ffb4e7f7ffacdfefffa4d7e7ff72a5bcff30608bff
5462*20507aff20507aff173762ff000000000000000000000000000000000000000000000000000000
5463*0000000000000000000000000000000000122f49ff285072ff305883ff6295bcff83b5d6ff5185
5464*bcff498dc5ff5195ceff72b5deff5195d6ff83bde7ffbceff7ffbceff7ffb4e7f7ffb4e7f7ffac
5465*dfefffa4d7e7ff93cfdeff6295bcff305883ff173762ff00000000000000000000000000000000
5466*00000000000000000000000000000000000000000000000000000000122f49ff285072ff72a5bc
5467*ffb4e7f7ffb4e7f7ffa4dfefff72add6ff5195ceff72b5deff629dd2ffb4e7f7ffbceff7ffbcef
5468*f7ffbceff7ffb4e7f7ffb4e7f7ffa4dfefff9bd7efff9bc7e7ff8bbddeff416893ff0000000000
5469*000000000000000000000000000000000000000000000000000000000000000000000000000000
5470*172f51ff7aadceffacdff7ffb4e7f7ffb4e7f7ffbceff7ffbceff7ff9bcfefff83b5e7ff9bd7ef
5471*ffbceff7ffbceff7ffbceff7ffbceff7ffb4e7f7ffb4e7f7ffacdff7ffa4d7efff9bcfefff93c7
5472*e7ff83bde7ff5185b4ff49709bff00000000000000000000000000000000000000000000000000
5473*0000000000000000000000628db4ffa4d7efffacdff7ffb4e7f7ffb4e7f7ffbceff7ffbceff7ff
5474*b9eef4ffa2e4e1ff9bc7d6ffbceff7ffbceff7ffbceff7ffbceff7ffb4e7f7ffb4e7f7ffacdff7
5475*ffa4dfefff9bd7efff93cfefff8bbde7ff7ab5deff6295c5ff3870a4ff00000000000000000000
5476*0000000000000000000000000000000000006a9dc5ff9bcfefffa4d7efffacdff7ffb4e7f7ffb4
5477*e7f7ffbceff7ffb5edeeffa4cfd6ff01c71cff06b31dff308441ff627883ffbceff7ffbceff7ff
5478*b4e7f7ffb4e7f7ffacdff7ffa4dfefff9bd7efff93cfefff8bc7e7ff83b5e7ff5995c5ff4178ac
5479*ff00000000000000000000000000000000000000005995bcff629dc5ff93c7e7ff9bcfefffa4d7
5480*efffacdff7ffb4e7f7ffb4e7f7ffb9eef4ff84bd7eff01c71cff04c21aff247308ff225503ff14
5481*9b10ff005e0eff5d7c7effa4cfdeffb4e7f7ffacdff7ffa4dfefff9bd7efff93cfefff8bc7e7ff
5482*72add6ff4985b4ff0000000000000000000000000000000000000000518dbcff629dd2ff83bde7
5483*ff93c7e7ff9bcfefffa4d7efffacdff7ffb4e7f7ffaadfedff76a864ff06c921ff02c91fff04c2
5484*1aff194802ff071000ff149b10ff00c91dff08c120ff137c1cff3b534dff7aa5bcffa4dfefff9b
5485*d7efff93cfefff8bc7e7ff5995bcff00000000000000000000000000000000000000004178b4ff
5486*5995c5ff72add6ff83b5e7ff93c7e7ff9bcfefffa4d7efffacdff7ff93c7deff57ad45ff15cc2f
5487*ff12cb2bff0ccc28ff0cc722ff194802ff071000ff149b10ff00c91dff01c71cff01c71cff01c7
5488*1cff137c1cff284062ff628db4ff8bbde7ff72add6ff598dbcff00000000000000000000000000
5489*00000000000000000000004985b4ff5185acff6a9dc5ff8bc7e7ff9bcfefffa4d7efff7aadceff
5490*379924ff23d23dff22ce38ff1cce34ff17cf33ff1abf25ff194802ff071000ff20960dff06c921
5491*ff02c91fff01c71cff00c91dff0eb715ff172738ff204872ff38689bff7aa5ceff7aa5ceff0000
5492*0000000000000000000000000000000000000000000000000000000000006295bcff72a5ceff9b
5493*cfe7ff518db4ff28588bff429c25ff31d44aff27d03fff27d03fff22ce38ff247308ff071000ff
5494*000000ff153400ff1daf19ff0ccc28ff06c921ff00c91dff0eb715ff172738ff497093ff9bcfe7
5495*ffa4cfefff8bb5d6ff7aadceff0000000000000000000000000000000000000000000000000000
5496*0000000000000000000072a5c5ff518db4ff306093ff58a134ff66e07aff47d75bff31d44aff2c
5497*c839ff153400ff000000ff000000ff000000ff24880dff11d130ff18cd31ff31d44aff4cc54dff
5498*303741ff729db4ff9bcfe7ffa4cfefffa4d7f7ff93c7deff7aadceff0000000000000000000000
5499*00000000000000000000000000000000007aa5ceff93c7e7ff93c7efff83bde7ff5fa73aff87e8
5500*97ff81e48fff7ae38aff6ad975ff225503ff000000ff000000ff071000ff4ba737ff70e585ff7a
5501*e38aff85e896ff74cf71ff384041ff72a5bcff93c7efffa4cfefffa4d7f7ffacdff7ff9bc7deff
5502*72a5c5ff000000000000000000000000000000000000000083adceff8bbddeff93cfefff93c7ef
5503*ff83bde7ff62a940ff91eba0ff8ee79bff90e89dff91eba0ff71c767ff2a5d10ff224a0cff478f
5504*2aff89e190ff90e89dff8fe79cff91eba0ff78d175ff515862ff83adceff9bcfe7ffa4cfefffa4
5505*d7f7ffa4d7f7ffa4cfefff8bb5ceff729db4ff0000000000000000000000000000000083adceff
5506*9bcfefff93cfefff93c7efff83bde7ff64aa4aff9eedabff9ae9a5ff9ae9a5ff9aeaa6ff9ceca9
5507*ff93e299ff8edd91ff99e8a4ff9ceba8ff9ae9a5ff9ae9a5ff9eedabff82d27eff628593ff8bbd
5508*deff93c7e7ff9bcfefffa4cfefff8bb5d6ff729db4ff729db4ff00000000000000000000000000
5509*000000000000007295b4ff6295b4ff72a5c5ff7aadd6ff83bde7ff64ad52ffacf2baffa5ecb0ff
5510*a5ecb0ffa7edb2ffa7edb3ffa9efb6ffa9efb6ffa8eeb4ffa7edb2ffa7edb2ffa5ecb0ffacf2ba
5511*ff8dd689ff72a5c5ff8bbddeff8bb5d6ff8bb5ceff729db4ff729db4ff00000000000000000000
5512*0000000000000000000000000000000000000000000000000000628dacff628db4ff598dbcff51
5513*9957ff9adb96ffb4f1bdffb0edb8ffa9e8aeffa7e6abffa7e6abffa7e6abffa7e6abffa7e6abff
5514*adebb3ffb2efbbffb0edb8ff6cb258ff7ab5deff83adceff6a8dacff6a8dacff00000000000000
5515*000000000000000000000000000000000000000000000000000000000000000000000000000000
5516*0000000000000000000000000000539c43ffbcefc2ffa6dfa2ff509042ff4f8c5bff4f8c5bff4f
5517*8c5bff508d5fff4b8955ff71b15dffc5f6d2ff8dcb7dff5c9f8eff6a9dc5ff628dacff00000000
5518*000000000000000000000000000000000000000000000000000000000000000000000000000000
5519*000000000000000000000000000000000000000000000000007db561ffcaf3d0ffacdea5ff0000
5520*000000000000000000000000000000000000000000008abe70ffd4faddff97cf88ff5a99a3ff6a
5521*95bcff000000000000000000000000000000000000000000000000000000000000000000000000
5522*00000000000000000000000000000000000000000000000000000000000000000000000079b25a
5523*ffd5f5d8ffb7e1afffb3d29eff00000000000000000000000000000000000000008abe70ffe2fb
5524*e8ff97cb84ff000000000000000000000000000000000000000000000000000000000000000000
5525*000000000000000000000000000000000000000000000000000000000000000000000000000000
5526*000000000000000083b664ffd1edceffe2fbe8ff80b45eff000000000000000000000000000000
5527*00b9d6abffabd59bfffeffffff66a946ff00000000000000000000000000000000000000000000
5528*000000000000000000000000000000000000000000000000000000000000000000000000000000
5529*00000000000000000000000000000000000000000000009cc884fffeffffffc5e1b9ff85b667ff
5530*0000000000000000b3d3a3ff8abb6cfff1fcf2ffe7f4e3ff79b25aff0000000000000000000000
5531*000000000000000000000000000000000000000000000000000000000000000000000000000000
5532*000000000000000000000000000000000000000000000000000000000000000000006fab4effa8
5533*cd94fff7fbf5ffe7f4e3ffadd099ffaccf98ffcae1bbfffefffffffeffffff88b868ff00000000
5534*000000000000000000000000000000000000000000000000000000000000000000000000000000
5535*000000000000000000000000000000000000000000000000000000000000000000000000000000
5536*0000000000000000000072ad52ffaccf98ffeef5ebfffefffffffefffffffeffffffe3eedbff88
5537*b868ff000000000000000000000000000000000000000000000000000000000000000000000000
5538*000000000000000000000000000000000000000000000000000000000000000000000000000000
5539*00000000000000000000000000000000000000000000000000bdd8acffa4cc92ff58a134ff5ba1
5540*39ff88b868ffa2c889ff0000000000000000000000000000000000000000000000000000000000
5541*0000000000000000000000000000000000000000000000fffc1ffffff803ffffe000ffffc0007f
5542*ff80003fff00001ffe00001ffc00001ffc00001ffc00001ffc000007fc000003f8000003e00000
5543*07c000000f8000000fc000000ff0000007fc000003f8000001f0000000f0000001f0000007fc00
5544*001fffc0007fffc7e0ffffc3e3ffffc3c3ffffe183ffffe007fffff00ffffff81fff2800000010
5545*000000200000000100200000000000400400000000000000000000000000000000000000000000
5546*0000000028508300225077005497cb0981c7d5006da4ab104989bfee204770fc01050b9c000000
5547*3f2137660000000000000000010000000017406a0000000000000000003e6698002d5b8a042344
5548*6a002f5f9774417eb9e760a5dcfd4286c2fd2f6296ff173353ff162849b5000000110000000000
5549*00000117426b0000000000ecffff0021497d014575b6001a3757733b6ea0ff5397cbff5fa4d8fe
5550*4381bcff4175abfd2a5f97fb1a436eff142d4bce123f66191752870119446e016a9dc500395d8e
5551*022a4770002d527f742c5586ff3d73adfa5094c8fc589ed5ff64a1d0fea6d8eafe6798b9fe3160
5552*8ef61c487bff143c675613396402143a6405f5f2ff006db0eb02316393030b2944e05885a6fd83
5553*b8d9fc5497c8ff5fa0d9fea4daeeffbff2f7ffb5e9f6fe93cce0fa4e79a0fc1b3a66501c3b6600
5554*26467004abb4d204ebf5fc00dfe8ef00537c9ed1aadef2febff4fbfdb0e0fafe8fcbe0ffbdedf9
5555*ffc4f5ffffb1e8f7ffa6dcf1fe99d0f0fb689ac7ea416e9e7f416b9a005f98c2006e9fc31e7dac
5556*d0959bceecf8afe3f8fcc0e7fffe80dba4ff1aab27ff3c8245ff7ebaacffb1d5f2ffade4fcff9a
5557*d9f2fb77b1dbff4882b39a3d7aad00447eb7514d8bbcec7fb7ddffa3d7f2ffacdef4ff6cc183ff
5558*06d21dff0a7d0aff095700ff00c315ff229939ff5e9497fa7fb4dcfe659fc7ca96d4f6006ba4cc
5559*0a5b8cb71c5d94c0685d94c8c886bae4f64b8b7bfd21c628fe1ad736ff14570eff0f3106ff08c7
5560*1cff00d40dff095523fc6385b7fc87b7d8e57aadd32a76a8cc008ab7e1004f86b500487ac93778
5561*abdbea5a9689f96ddb6efd59da69ff0e2800fe000000ff42ba46ff5be66dfe4c7c59ff8eb7dafc
5562*aaddf9fe8cbed9eb6b9fbe4b91cde70697d2e9038ab7cade94caf6ff86c7b9ff91e18fffa1f2b1
5563*fe7cc67cfb71b56bfb9dedaafd9deea4ff72a38dfc8fbde3ffa0d1eeff8ab6d0f26c97ad8f589d
5564*b7015b90be00668bd94e6a97c1c54a7c79d998dd95f7a2e3abff95daa1ff98dda5ff9ddea7ffa3
5565*e6a2fe6dada6ff7da1d0ec6a90ac886389a51c6a91ac005ca1ba003ae2370088e60000c3eed300
5566*89858a0096cb8ceda6d7a2ca94c1915b8ebb85568dc17eada1d5a1fa87b3c4be2a7f4c1d6186b3
5567*00628bac0067c0a0035295b400ff00ff000000ff03c2e0b40100000000b7dca7cec5e4bcfa4b6e
5568*3507afd09e00bddcafd5bae0abf2a19d9f00adb0d7006085b1026089a900000000000000000000
5569*0000000000000089bb6e03628c4b00639a4b4ebad7abfabbd6afd7bed8b0d9d5e7cdff7a9b6674
5570*354b270199c18003658cb800628dac000000000000000000000000000000000060a23d00090c08
5571*01134c130093c07ac6ecf6e8ffedf5e8ffafcf99c10c16080035402e0088b86900000000000000
5572*000000000000fe3f0000f80f0000f0070000e0030000e0030000e0010000c00100000003000080
5573*030000e0010000c0000000e0030000f80f0000f99f0000fc1f0000fc3f00002800000010000000
5574*200000000100180000000000400300000000000000000000000000000000000000000000000000
5575*00000000000000000000000000004989bf20477001050b00000000000000000000000000000000
5576*00000000000000000000000000000000002f5f97417eb960a5dc4286c22f629617335316284900
5577*00000000000000000000000000000000000000000000001a37573b6ea05397cb5fa4d84381bc41
5578*75ab2a5f971a436e142d4b0000000000000000000000000000000000002d527f2c55863d73ad50
5579*94c8589ed564a1d0a6d8ea6798b931608e1c487b143c670000000000000000000000000000000b
5580*29445885a683b8d95497c85fa0d9a4daeebff2f7b5e9f693cce04e79a01b3a6600000000000000
5581*0000000000000000537c9eaadef2bff4fbb0e0fa8fcbe0bdedf9c4f5ffb1e8f7a6dcf199d0f068
5582*9ac7416e9e0000000000000000007dacd09bceecafe3f8c0e7ff80dba41aab273c82457ebaacb1
5583*d5f2ade4fc9ad9f277b1db4882b3000000447eb74d8bbc7fb7dda3d7f2acdef46cc18306d21d0a
5584*7d0a09570000c3152299395e94977fb4dc659fc70000000000000000005d94c05d94c886bae44b
5585*8b7b21c6281ad73614570e0f310608c71c00d40d0955236385b787b7d800000000000000000000
5586*000000000078abdb5a96896ddb6e59da690e280000000042ba465be66d4c7c598eb7daaaddf98c
5587*bed90000000000000000008ab7ca94caf686c7b991e18fa1f2b17cc67c71b56b9dedaa9deea472
5588*a38d8fbde3a0d1ee8ab6d06c97ad0000000000000000006a97c14a7c7998dd95a2e3ab95daa198
5589*dda59ddea7a3e6a26dada67da1d06a90ac00000000000000000000000000000000000000000096
5590*cb8ca6d7a294c1918ebb858dc17ea1d5a187b3c400000000000000000000000000000000000000
5591*0000000000000000b7dca7c5e4bc000000000000bddcafbae0ab00000000000000000000000000
5592*0000000000000000000000000000000000000000bad7abbbd6afbed8b0d5e7cd7a9b6600000000
5593*000000000000000000000000000000000000000000000000000000000093c07aecf6e8edf5e8af
5594*cf99000000000000000000000000000000000000fe3f0000f80f0000f0070000e0030000e00300
5595*00e0010000c00100000003000080030000e0010000c0000000e0030000f80f0000f99f0000fc1f
5596*0000fc3f00002800000020000000400000000100180000000000800c0000000000000000000000
5597*000000000000000000000000000000000000000000000000000000000000000000000000000000
5598*00000000000000000000518db43870ac2858831227410000000000000000000000000000000000
5599*000000000000000000000000000000000000000000000000000000000000000000000000000000
5600*000000000000000000000000000000000000000000000000003870ac6aadde5195d64185bc3068
5601*9b20487a122f490000000000000000000000000000000000000000000000000000000000000000
5602*000000000000000000000000000000000000000000000000000000000000000000000000003868
5603*9b3870a45195ce72b5de5195d6498dc54185bc3870ac30609320487a1227410000000000000000
5604*000000000000000000000000000000000000000000000000000000000000000000000000000000
5605*0000000000000000000000000030608b3868a4498dc55195ce72b5de5195d6498dc54185bc4178
5606*ac3870a430689b28588b1740721227410000000000000000000000000000000000000000000000
5607*0000000000000000000000000000000000000000000000000000000028508338689b4985b4498d
5608*c55195ce72b5de5195d6498dc54178b44170ac3868a438689b30609328589320507a17406a1227
5609*410000000000000000000000000000000000000000000000000000000000000000000000000000
5610*0000000020486a30608b4170ac4985b4498dc55195ce72b5de5195d6498dc54178b472a5ce4178
5611*ac30609330608b28588b28588b28508320487a17406a0000000000000000000000000000000000
5612*0000000000000000000000000000000000000017376230507a38689b4170ac4985b4498dc55195
5613*ce72b5de5195d6498dc56aa5ceb4e7f7acdfef7aadce38689b2858832850832850832850831740
5614*6a000000000000000000000000000000000000000000000000000000000000000000122f492848
5615*6a30588338689b4170ac4985b4498dc55195ce72b5de5195d65195ceacdfefbceff7b4e7f7acdf
5616*efa4d7e772a5bc30608b20507a20507a1737620000000000000000000000000000000000000000
5617*00000000000000000000000000122f492850723058836295bc83b5d65185bc498dc55195ce72b5
5618*de5195d683bde7bceff7bceff7b4e7f7b4e7f7acdfefa4d7e793cfde6295bc3058831737620000
5619*00000000000000000000000000000000000000000000000000000000000000122f4928507272a5
5620*bcb4e7f7b4e7f7a4dfef72add65195ce72b5de629dd2b4e7f7bceff7bceff7bceff7b4e7f7b4e7
5621*f7a4dfef9bd7ef9bc7e78bbdde4168930000000000000000000000000000000000000000000000
5622*00000000000000000000172f517aadceacdff7b4e7f7b4e7f7bceff7bceff79bcfef83b5e79bd7
5623*efbceff7bceff7bceff7bceff7b4e7f7b4e7f7acdff7a4d7ef9bcfef93c7e783bde75185b44970
5624*9b000000000000000000000000000000000000000000000000000000628db4a4d7efacdff7b4e7
5625*f7b4e7f7bceff7bceff7b9eef4a2e4e19bc7d6bceff7bceff7bceff7bceff7b4e7f7b4e7f7acdf
5626*f7a4dfef9bd7ef93cfef8bbde77ab5de6295c53870a40000000000000000000000000000000000
5627*000000006a9dc59bcfefa4d7efacdff7b4e7f7b4e7f7bceff7b5edeea4cfd601c71c06b31d3084
5628*41627883bceff7bceff7b4e7f7b4e7f7acdff7a4dfef9bd7ef93cfef8bc7e783b5e75995c54178
5629*ac0000000000000000000000000000005995bc629dc593c7e79bcfefa4d7efacdff7b4e7f7b4e7
5630*f7b9eef484bd7e01c71c04c21a247308225503149b10005e0e5d7c7ea4cfdeb4e7f7acdff7a4df
5631*ef9bd7ef93cfef8bc7e772add64985b4000000000000000000000000000000518dbc629dd283bd
5632*e793c7e79bcfefa4d7efacdff7b4e7f7aadfed76a86406c92102c91f04c21a194802071000149b
5633*1000c91d08c120137c1c3b534d7aa5bca4dfef9bd7ef93cfef8bc7e75995bc0000000000000000
5634*000000000000004178b45995c572add683b5e793c7e79bcfefa4d7efacdff793c7de57ad4515cc
5635*2f12cb2b0ccc280cc722194802071000149b1000c91d01c71c01c71c01c71c137c1c284062628d
5636*b48bbde772add6598dbc0000000000000000000000000000000000004985b45185ac6a9dc58bc7
5637*e79bcfefa4d7ef7aadce37992423d23d22ce381cce3417cf331abf2519480207100020960d06c9
5638*2102c91f01c71c00c91d0eb71517273820487238689b7aa5ce7aa5ce0000000000000000000000
5639*000000000000000000000000006295bc72a5ce9bcfe7518db428588b429c2531d44a27d03f27d0
5640*3f22ce382473080710000000001534001daf190ccc2806c92100c91d0eb7151727384970939bcf
5641*e7a4cfef8bb5d67aadce00000000000000000000000000000000000000000000000000000072a5
5642*c5518db430609358a13466e07a47d75b31d44a2cc83915340000000000000000000024880d11d1
5643*3018cd3131d44a4cc54d303741729db49bcfe7a4cfefa4d7f793c7de7aadce0000000000000000
5644*000000000000000000000000007aa5ce93c7e793c7ef83bde75fa73a87e89781e48f7ae38a6ad9
5645*752255030000000000000710004ba73770e5857ae38a85e89674cf7138404172a5bc93c7efa4cf
5646*efa4d7f7acdff79bc7de72a5c500000000000000000000000000000083adce8bbdde93cfef93c7
5647*ef83bde762a94091eba08ee79b90e89d91eba071c7672a5d10224a0c478f2a89e19090e89d8fe7
5648*9c91eba078d17551586283adce9bcfe7a4cfefa4d7f7a4d7f7a4cfef8bb5ce729db40000000000
5649*0000000000000083adce9bcfef93cfef93c7ef83bde764aa4a9eedab9ae9a59ae9a59aeaa69cec
5650*a993e2998edd9199e8a49ceba89ae9a59ae9a59eedab82d27e6285938bbdde93c7e79bcfefa4cf
5651*ef8bb5d6729db4729db40000000000000000000000000000007295b46295b472a5c57aadd683bd
5652*e764ad52acf2baa5ecb0a5ecb0a7edb2a7edb3a9efb6a9efb6a8eeb4a7edb2a7edb2a5ecb0acf2
5653*ba8dd68972a5c58bbdde8bb5d68bb5ce729db4729db40000000000000000000000000000000000
5654*00000000000000000000628dac628db4598dbc5199579adb96b4f1bdb0edb8a9e8aea7e6aba7e6
5655*aba7e6aba7e6aba7e6abadebb3b2efbbb0edb86cb2587ab5de83adce6a8dac6a8dac0000000000
5656*000000000000000000000000000000000000000000000000000000000000000000000000000000
5657*00539c43bcefc2a6dfa25090424f8c5b4f8c5b4f8c5b508d5f4b895571b15dc5f6d28dcb7d5c9f
5658*8e6a9dc5628dac0000000000000000000000000000000000000000000000000000000000000000
5659*000000000000000000000000000000000000007db561caf3d0acdea50000000000000000000000
5660*000000000000008abe70d4fadd97cf885a99a36a95bc0000000000000000000000000000000000
5661*0000000000000000000000000000000000000000000000000000000000000000000000000079b2
5662*5ad5f5d8b7e1afb3d29e0000000000000000000000000000008abe70e2fbe897cb840000000000
5663*000000000000000000000000000000000000000000000000000000000000000000000000000000
5664*0000000000000000000000000000000083b664d1edcee2fbe880b45e0000000000000000000000
5665*00b9d6ababd59bfeffff66a9460000000000000000000000000000000000000000000000000000
5666*000000000000000000000000000000000000000000000000000000000000000000000000009cc8
5667*84feffffc5e1b985b667000000000000b3d3a38abb6cf1fcf2e7f4e379b25a0000000000000000
5668*000000000000000000000000000000000000000000000000000000000000000000000000000000
5669*000000000000000000000000000000006fab4ea8cd94f7fbf5e7f4e3add099accf98cae1bbfeff
5670*fffeffff88b8680000000000000000000000000000000000000000000000000000000000000000
5671*0000000000000000000000000000000000000000000000000000000000000000000000000072ad
5672*52accf98eef5ebfefffffefffffeffffe3eedb88b8680000000000000000000000000000000000
5673*000000000000000000000000000000000000000000000000000000000000000000000000000000
5674*00000000000000000000000000000000000000bdd8aca4cc9258a1345ba13988b868a2c8890000
5675*00000000000000000000000000000000000000000000000000000000000000000000000000fffc
5676*1ffffff803ffffe000ffffc0007fff80003fff00001ffe00001ffc00001ffc00001ffc00001ffc
5677*000007fc000003f8000003e0000007c000000f8000000fc000000ff0000007fc000003f8000001
5678*f0000000f0000001f0000007fc00001fffc0007fffc7e0ffffc3e3ffffc3c3ffffe183ffffe007
5679*fffff00ffffff81fff2800000030000000600000000100180000000000801c0000000000000000
5680*000000000000000000000000000000000000000000000000000000000000000000000000000000
5681*000000000000000000000000000000000000000000000000000000000000000000000000000000
5682*000000000000000000000000000000000000000000000000000000000000000000000000000000
5683*000000000000000000000000000000000000000000000000000000000000000000000000000000
5684*000000000000000000000000000000000000000000000000000000000000000000000000000000
5685*000000000000000000000000000000000000000000000000000000000000000000000000000000
5686*000000000000000000000000000000000000000000000000000000000000000000000000000000
5687*000000000000000000000000000000000000000000000000000000000000000000000000000000
5688*000000000000000000000000000000000000000000000000000000000000000000000000000000
5689*000000000000000000000000000000000000000000000000000000000000000000000000000000
5690*000000000000000000000000000000000000000000000000000000000000000000000000000000
5691*000000000000000000000000000000000000000000000000000000000000000000000000000000
5692*000000000000000000000000000000000000000000000000000000000000000000000000000000
5693*000000000000000000000000000000000000000000000000000000000000000000000000000000
5694*000000000000000000000000000000000000000000000000000000000000000000000000000000
5695*000000000000000000000000000000000000000000000000000000000000000000000000000000
5696*000000000000000000000000000000000000000000000000000000000000000000000000000000
5697*000000000000000000000000000000000000000000000000000000000000000000000000000000
5698*000000000000000000000000000000000000000000000000000000000000000000000000000000
5699*000000000000000000000000000000000000000000000000000000000000000000000000000000
5700*000000000000000000000000000000000000000000000000000000000000000000000000000000
5701*000000000000000000000000000000000000000000000000000000000000000000000000000000
5702*000000000000000000000000000000000000000000000000000000000000000000000000000000
5703*000000000000000000000000000000000000000000000000000000000000000000000000000000
5704*000000000000000000000000000000000000000000000000000000000000000000000000000000
5705*000000000000000000000000000000000000000000000000000000000000000000000000000000
5706*000000000000000000000000000000000000000000000000000000000000000000000000000000
5707*000000000000000000000000000000000000000000000000000000000000000000000000000000
5708*000000000000000000000000000000000000000000000000000000000000000000000000000000
5709*000000000000000000000000000000000000000000000000000000000000000000000000000000
5710*000000000000000000000000000000000000000000000000000000000000000000000000000000
5711*00000000000000000000000000000000000000518db43870ac2858831227410000000000000000
5712*000000000000000000000000000000000000000000000000000000000000000000000000000000
5713*000000000000000000000000000000000000000000000000000000000000000000000000000000
5714*000000000000000000000000000000000000000000000000000000000000000000000000000000
5715*000000003870ac6aadde5195d64185bc30689b20487a122f490000000000000000000000000000
5716*000000000000000000000000000000000000000000000000000000000000000000000000000000
5717*000000000000000000000000000000000000000000000000000000000000000000000000000000
5718*0000000000000000000000000000000000000000000000000038689b3870a45195ce72b5de5195
5719*d6498dc54185bc3870ac30609320487a1227410000000000000000000000000000000000000000
5720*000000000000000000000000000000000000000000000000000000000000000000000000000000
5721*000000000000000000000000000000000000000000000000000000000000000000000000000000
5722*0000000000000000000030608b3868a4498dc55195ce72b5de5195d6498dc54185bc4178ac3870
5723*a430689b28588b1740721227410000000000000000000000000000000000000000000000000000
5724*000000000000000000000000000000000000000000000000000000000000000000000000000000
5725*000000000000000000000000000000000000000000000000000000000000000000002850833868
5726*9b4985b4498dc55195ce72b5de5195d6498dc54178b44170ac3868a438689b3060932858932050
5727*7a17406a1227410000000000000000000000000000000000000000000000000000000000000000
5728*000000000000000000000000000000000000000000000000000000000000000000000000000000
5729*0000000000000000000000000000000000000020486a30608b4170ac4985b4498dc55195ce72b5
5730*de5195d6498dc54178b472a5ce4178ac30609330608b28588b28588b28508320487a17406a0000
5731*000000000000000000000000000000000000000000000000000000000000000000000000000000
5732*000000000000000000000000000000000000000000000000000000000000000000000000000000
5733*0000000017376230507a38689b4170ac4985b4498dc55195ce72b5de5195d6498dc56aa5ceb4e7
5734*f7acdfef7aadce38689b28588328508328508328508317406a0000000000000000000000000000
5735*000000000000000000000000000000000000000000000000000000000000000000000000000000
5736*00000000000000000000000000000000000000000000000000000000122f4928486a3058833868
5737*9b4170ac4985b4498dc55195ce72b5de5195d65195ceacdfefbceff7b4e7f7acdfefa4d7e772a5
5738*bc30608b20507a20507a1737620000000000000000000000000000000000000000000000000000
5739*000000000000000000000000000000000000000000000000000000000000000000000000000000
5740*00000000000000000000000000000000122f492850723058836295bc83b5d65185bc498dc55195
5741*ce72b5de5195d683bde7bceff7bceff7b4e7f7b4e7f7acdfefa4d7e793cfde6295bc3058831737
5742*620000000000000000000000000000000000000000000000000000000000000000000000000000
5743*000000000000000000000000000000000000000000000000000000000000000000000000000000
5744*00000000122f4928507272a5bcb4e7f7b4e7f7a4dfef72add65195ce72b5de629dd2b4e7f7bcef
5745*f7bceff7bceff7b4e7f7b4e7f7a4dfef9bd7ef9bc7e78bbdde4168930000000000000000000000
5746*000000000000000000000000000000000000000000000000000000000000000000000000000000
5747*00000000000000000000000000000000000000000000000000000000000000172f517aadceacdf
5748*f7b4e7f7b4e7f7bceff7bceff79bcfef83b5e79bd7efbceff7bceff7bceff7bceff7b4e7f7b4e7
5749*f7acdff7a4d7ef9bcfef93c7e783bde75185b449709b0000000000000000000000000000000000
5750*000000000000000000000000000000000000000000000000000000000000000000000000000000
5751*00000000000000000000000000000000000000628db4a4d7efacdff7b4e7f7b4e7f7bceff7bcef
5752*f7b9eef4a2e4e19bc7d6bceff7bceff7bceff7bceff7b4e7f7b4e7f7acdff7a4dfef9bd7ef93cf
5753*ef8bbde77ab5de6295c53870a40000000000000000000000000000000000000000000000000000
5754*000000000000000000000000000000000000000000000000000000000000000000000000000000
5755*000000006a9dc59bcfefa4d7efacdff7b4e7f7b4e7f7bceff7b5edeea4cfd601c71c06b31d3084
5756*41627883bceff7bceff7b4e7f7b4e7f7acdff7a4dfef9bd7ef93cfef8bc7e783b5e75995c54178
5757*ac0000000000000000000000000000000000000000000000000000000000000000000000000000
5758*000000000000000000000000000000000000000000000000005995bc629dc593c7e79bcfefa4d7
5759*efacdff7b4e7f7b4e7f7b9eef484bd7e01c71c04c21a247308225503149b10005e0e5d7c7ea4cf
5760*deb4e7f7acdff7a4dfef9bd7ef93cfef8bc7e772add64985b40000000000000000000000000000
5761*000000000000000000000000000000000000000000000000000000000000000000000000000000
5762*00000000000000000000518dbc629dd283bde793c7e79bcfefa4d7efacdff7b4e7f7aadfed76a8
5763*6406c92102c91f04c21a194802071000149b1000c91d08c120137c1c3b534d7aa5bca4dfef9bd7
5764*ef93cfef8bc7e75995bc0000000000000000000000000000000000000000000000000000000000
5765*000000000000000000000000000000000000000000000000000000000000000000004178b45995
5766*c572add683b5e793c7e79bcfefa4d7efacdff793c7de57ad4515cc2f12cb2b0ccc280cc7221948
5767*02071000149b1000c91d01c71c01c71c01c71c137c1c284062628db48bbde772add6598dbc0000
5768*000000000000000000000000000000000000000000000000000000000000000000000000000000
5769*000000000000000000000000000000000000000000000000004985b45185ac6a9dc58bc7e79bcf
5770*efa4d7ef7aadce37992423d23d22ce381cce3417cf331abf2519480207100020960d06c92102c9
5771*1f01c71c00c91d0eb71517273820487238689b7aa5ce7aa5ce0000000000000000000000000000
5772*000000000000000000000000000000000000000000000000000000000000000000000000000000
5773*000000000000000000000000000000000000006295bc72a5ce9bcfe7518db428588b429c2531d4
5774*4a27d03f27d03f22ce382473080710000000001534001daf190ccc2806c92100c91d0eb7151727
5775*384970939bcfe7a4cfef8bb5d67aadce0000000000000000000000000000000000000000000000
5776*000000000000000000000000000000000000000000000000000000000000000000000000000000
5777*0000000000000000000000000072a5c5518db430609358a13466e07a47d75b31d44a2cc8391534
5778*0000000000000000000024880d11d13018cd3131d44a4cc54d303741729db49bcfe7a4cfefa4d7
5779*f793c7de7aadce0000000000000000000000000000000000000000000000000000000000000000
5780*000000000000000000000000000000000000000000000000000000000000000000000000007aa5
5781*ce93c7e793c7ef83bde75fa73a87e89781e48f7ae38a6ad9752255030000000000000710004ba7
5782*3770e5857ae38a85e89674cf7138404172a5bc93c7efa4cfefa4d7f7acdff79bc7de72a5c50000
5783*000000000000000000000000000000000000000000000000000000000000000000000000000000
5784*0000000000000000000000000000000000000000000083adce8bbdde93cfef93c7ef83bde762a9
5785*4091eba08ee79b90e89d91eba071c7672a5d10224a0c478f2a89e19090e89d8fe79c91eba078d1
5786*7551586283adce9bcfe7a4cfefa4d7f7a4d7f7a4cfef8bb5ce729db40000000000000000000000
5787*000000000000000000000000000000000000000000000000000000000000000000000000000000
5788*0000000000000000000083adce9bcfef93cfef93c7ef83bde764aa4a9eedab9ae9a59ae9a59aea
5789*a69ceca993e2998edd9199e8a49ceba89ae9a59ae9a59eedab82d27e6285938bbdde93c7e79bcf
5790*efa4cfef8bb5d6729db4729db40000000000000000000000000000000000000000000000000000
5791*000000000000000000000000000000000000000000000000000000000000000000000000007295
5792*b46295b472a5c57aadd683bde764ad52acf2baa5ecb0a5ecb0a7edb2a7edb3a9efb6a9efb6a8ee
5793*b4a7edb2a7edb2a5ecb0acf2ba8dd68972a5c58bbdde8bb5d68bb5ce729db4729db40000000000
5794*000000000000000000000000000000000000000000000000000000000000000000000000000000
5795*00000000000000000000000000000000000000000000000000000000000000628dac628db4598d
5796*bc5199579adb96b4f1bdb0edb8a9e8aea7e6aba7e6aba7e6aba7e6aba7e6abadebb3b2efbbb0ed
5797*b86cb2587ab5de83adce6a8dac6a8dac0000000000000000000000000000000000000000000000
5798*000000000000000000000000000000000000000000000000000000000000000000000000000000
5799*00000000000000000000000000000000000000000000000000000000000000539c43bcefc2a6df
5800*a25090424f8c5b4f8c5b4f8c5b508d5f4b895571b15dc5f6d28dcb7d5c9f8e6a9dc5628dac0000
5801*000000000000000000000000000000000000000000000000000000000000000000000000000000
5802*000000000000000000000000000000000000000000000000000000000000000000000000000000
5803*000000000000000000000000000000000000007db561caf3d0acdea50000000000000000000000
5804*000000000000008abe70d4fadd97cf885a99a36a95bc0000000000000000000000000000000000
5805*000000000000000000000000000000000000000000000000000000000000000000000000000000
5806*000000000000000000000000000000000000000000000000000000000000000000000000000000
5807*0000000000000079b25ad5f5d8b7e1afb3d29e0000000000000000000000000000008abe70e2fb
5808*e897cb840000000000000000000000000000000000000000000000000000000000000000000000
5809*000000000000000000000000000000000000000000000000000000000000000000000000000000
5810*0000000000000000000000000000000000000000000000000000000000000000000083b664d1ed
5811*cee2fbe880b45e000000000000000000000000b9d6ababd59bfeffff66a9460000000000000000
5812*000000000000000000000000000000000000000000000000000000000000000000000000000000
5813*000000000000000000000000000000000000000000000000000000000000000000000000000000
5814*000000000000000000000000000000000000000000000000009cc884feffffc5e1b985b6670000
5815*00000000b3d3a38abb6cf1fcf2e7f4e379b25a0000000000000000000000000000000000000000
5816*000000000000000000000000000000000000000000000000000000000000000000000000000000
5817*000000000000000000000000000000000000000000000000000000000000000000000000000000
5818*000000000000000000000000006fab4ea8cd94f7fbf5e7f4e3add099accf98cae1bbfefffffeff
5819*ff88b8680000000000000000000000000000000000000000000000000000000000000000000000
5820*000000000000000000000000000000000000000000000000000000000000000000000000000000
5821*000000000000000000000000000000000000000000000000000000000000000000000000000000
5822*0000000072ad52accf98eef5ebfefffffefffffeffffe3eedb88b8680000000000000000000000
5823*000000000000000000000000000000000000000000000000000000000000000000000000000000
5824*000000000000000000000000000000000000000000000000000000000000000000000000000000
5825*00000000000000000000000000000000000000000000000000000000000000000000bdd8aca4cc
5826*9258a1345ba13988b868a2c8890000000000000000000000000000000000000000000000000000
5827*000000000000000000000000000000000000000000000000000000000000000000000000000000
5828*000000000000000000000000000000000000000000000000000000000000000000000000000000
5829*000000000000000000000000000000000000000000000000000000000000000000000000000000
5830*000000000000000000000000000000000000000000000000000000000000000000000000000000
5831*000000000000000000000000000000000000000000000000000000000000000000000000000000
5832*000000000000000000000000000000000000000000000000000000000000000000000000000000
5833*000000000000000000000000000000000000000000000000000000000000000000000000000000
5834*000000000000000000000000000000000000000000000000000000000000000000000000000000
5835*000000000000000000000000000000000000000000000000000000000000000000000000000000
5836*000000000000000000000000000000000000000000000000000000000000000000000000000000
5837*000000000000000000000000000000000000000000000000000000000000000000000000000000
5838*000000000000000000000000000000000000000000000000000000000000000000000000000000
5839*000000000000000000000000000000000000000000000000000000000000000000000000000000
5840*000000000000000000000000000000000000000000000000000000000000000000000000000000
5841*000000000000000000000000000000000000000000000000000000000000000000000000000000
5842*000000000000000000000000000000000000000000000000000000000000000000000000000000
5843*000000000000000000000000000000000000000000000000000000000000000000000000000000
5844*000000000000000000000000000000000000000000000000000000000000000000000000000000
5845*000000000000000000000000000000000000000000000000000000000000000000000000000000
5846*000000000000000000000000000000000000000000000000000000000000000000000000000000
5847*000000000000000000000000000000000000000000000000000000000000000000000000000000
5848*000000000000000000000000000000000000000000000000000000000000000000000000000000
5849*000000000000000000000000000000000000000000000000000000000000000000000000000000
5850*000000000000000000000000000000000000000000000000000000000000000000000000000000
5851*000000000000000000000000000000000000000000000000000000000000000000000000000000
5852*000000000000000000000000000000000000000000000000000000000000000000000000000000
5853*000000000000000000000000000000000000000000000000000000000000000000000000000000
5854*000000000000000000000000000000000000000000000000000000000000000000000000000000
5855*000000000000000000000000000000000000000000000000000000000000000000000000000000
5856*000000000000000000000000000000000000000000000000000000000000000000000000000000
5857*00000000000000000000000000000000000000ffffffffffff0000ffffffffffff0000ffffffff
5858*ffff0000ffffffffffff0000ffffffffffff0000ffffffffffff0000ffffffffffff0000ffffff
5859*ffffff0000fffffc1fffff0000fffff803ffff0000ffffe000ffff0000ffffc0007fff0000ffff
5860*80003fff0000ffff00001fff0000fffe00001fff0000fffc00001fff0000fffc00001fff0000ff
5861*fc00001fff0000fffc000007ff0000fffc000003ff0000fff8000003ff0000ffe0000007ff0000
5862*ffc000000fff0000ff8000000fff0000ffc000000fff0000fff0000007ff0000fffc000003ff00
5863*00fff8000001ff0000fff0000000ff0000fff0000001ff0000fff0000007ff0000fffc00001fff
5864*0000ffffc0007fff0000ffffc7e0ffff0000ffffc3e3ffff0000ffffc3c3ffff0000ffffe183ff
5865*ff0000ffffe007ffff0000fffff00fffff0000fffff81fffff0000ffffffffffff0000ffffffff
5866*ffff0000ffffffffffff0000ffffffffffff0000ffffffffffff0000ffffffffffff0000ffffff
5867*ffffff0000ffffffffffff0000
5868newhex
5869*
5870rmfile ./windows/installer.ico
5871hunk ./windows/installer.tmpl 1
5872-[Setup]
5873-AppName=Allmydata 3.0.4
5874-; AppVerName=Allmydata 3.0.4 (build %(major)d.%(minor)d.%(point)d-r%(revision)d)
5875-AppVerName=Allmydata 3.0.4
5876-AppVersion=%(major)d.%(minor)d.%(point)d-r%(revision)d
5877-VersionInfoVersion=%(major)d.%(minor)d.%(point)d.%(revision)d
5878-AppPublisher=Allmydata Inc.
5879-AppCopyright=Copyright (c) 2004-2008 Allmydata, Inc.
5880-AppPublisherURL=http://www.allmydata.com/
5881-AppSupportURL=http://support.allmydata.com/
5882-WizardSmallImageFile=../installer.bmp
5883-DefaultDirName={pf}\Allmydata 3.0
5884-DefaultGroupName=Allmydata 3.0
5885-; minumum version NT 4, no classic windows
5886-MinVersion=0,4.0
5887-Compression=lzma/max
5888-SolidCompression=yes
5889-OutputDir=./installer/
5890-SourceDir=dist
5891-SetupIconFile=../installer.ico
5892-UninstallDisplayIcon=../amdicon.ico
5893-; license file needs to be build/all dir
5894-;LicenseFile=../license.txt
5895-OutputBaseFilename=Allmydata_Tahoe_Setup_v%(major)d_%(minor)d_%(point)d_r%(revision)d
5896-
5897-[Files]
5898-; contents of 'binaries' dir. (consolidated build target)
5899-Source: "*.*"; DestDir: "{app}\Install"; Flags: restartreplace replacesameversion uninsrestartdelete
5900-Source: ".\pkg_resources\*.*"; DestDir: "{app}\Install\pkg_resources"; Flags: recursesubdirs
5901-Source: ".\winfuse\*.*"; DestDir: "{app}\Install\winfuse"; Flags: recursesubdirs
5902-
5903-[Dirs]
5904-Name: "{app}\noderoot"
5905-
5906-[Icons]
5907-; Program files entries
5908-Name: "{group}\Allmydata"; Filename: "{app}\Install\winfuse\AllmydataTray.exe"
5909-Name: "{commonstartup}\Allmydata"; Filename: "{app}\Install\winfuse\AllmydataTray.exe"
5910-;Name: "{group}\Tahoe root dir (web)"; Filename: "{app}\Install\tahoe.exe"; Parameters: "webopen"
5911-Name: "{group}\Allmydata Help"; Filename: "http://www.allmydata.com/help"
5912-
5913-[Run]
5914-; Things performed before the final page of the installer
5915-Filename: "{sys}\net.exe"; Parameters: "stop ""Allmydata SMB"""; Flags: runhidden
5916-Filename: "{sys}\net.exe"; Parameters: "stop Tahoe"; Flags: runhidden
5917-Filename: "{sys}\net.exe"; Parameters: "stop Allmydata Manager"; Flags: runhidden
5918-Filename: "{app}\Install\tahoesvc.exe"; Parameters: "-install -auto"; Flags: runhidden
5919-Filename: "{app}\Install\tahoe.exe"; Parameters: "create-node ""{app}\noderoot"""; Flags: runhidden
5920-Filename: "{app}\Install\winfuse\AllmydataManager.exe"; Parameters: "-install -auto"; Flags: runhidden
5921-Filename: "{app}\Install\winfuse\InstallUtil.exe"; Parameters: """{app}\Install\winfuse\WinFUSE.exe"""; Flags: runhidden
5922-Filename: "{app}\Install\confwiz.exe"; Flags: hidewizard
5923-;Filename: "{app}\Install\ReadMe.txt"; Description: "View the ReadMe file"; Flags: unchecked postinstall nowait shellexec skipifdoesntexist
5924-Filename: "{sys}\rundll32.exe"; Parameters: "{app}\Install\winfuse\loopback_install.dll doLoopBackEntry"; Flags: runhidden
5925-Filename: "{app}\Install\winfuse\AllmydataTray.exe"; Description: "Run Allmydata"; Flags: postinstall nowait
5926-Filename: "http://www.allmydata.com/welcome_install?v=%(major)d.%(minor)d.%(point)d.%(revision)d"; Description: "View the Welcome Page"; Flags: postinstall shellexec
5927-Filename: "{sys}\net.exe"; Parameters: "start ""Allmydata Manager"""; Flags: runhidden
5928-
5929-[UninstallRun]
5930-; Performed before the uninstaller runs to undo things
5931-; xFilename: "{app}\Install\winfuse\AllmydataTray.exe"; Parameters: "-Q"; Flags: runhidden
5932-Filename: "{sys}\net.exe"; Parameters: "stop ""Allmydata SMB"""; Flags: runhidden
5933-Filename: "{sys}\net.exe"; Parameters: "stop Tahoe"; Flags: runhidden
5934-Filename: "{sys}\net.exe"; Parameters: "stop ""Allmydata Manager"""; Flags: runhidden
5935-Filename: "{app}\Install\winfuse\InstallUtil.exe"; Parameters: "/uninstall ""{app}\Install\winfuse\WinFUSE.exe"""; Flags: runhidden
5936-Filename: "{app}\Install\tahoesvc.exe"; Parameters: "-remove"; Flags: runhidden
5937-Filename: "{app}\Install\winfuse\AllmydataManager.exe"; Parameters: "-U"; Flags: runhidden
5938-;Filename: "{app}\Install\confwiz.exe"; Parameters: "--uninstall"; Flags: runhidden
5939-;Filename: "http://www.allmydata.com/redirect/uninstallsurvey.php?build=%(build)s"; Flags: shellexec
5940-
5941-[Registry]
5942-Root: HKLM; Subkey: "Software\Allmydata"; Flags: uninsdeletekeyifempty
5943-Root: HKLM; Subkey: "Software\Allmydata"; ValueType: string; ValueName: "Base Dir Path"; ValueData: "{app}\noderoot"; Flags: uninsdeletekey
5944rmfile ./windows/installer.tmpl
5945hunk ./windows/setup.py 1
5946-from distutils.core import setup
5947-import py2exe
5948-
5949-import glob
5950-
5951-lnf_manifest = """
5952-<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
5953-<assembly xmlns="urn:schemas-microsoft-com:asm.v1"
5954-manifestVersion="1.0">
5955-<assemblyIdentity
5956-    version="0.64.1.0"
5957-    processorArchitecture="x86"
5958-    name="Controls"
5959-    type="win32"
5960-/>
5961-<description>%s</description>
5962-<dependency>
5963-    <dependentAssembly>
5964-        <assemblyIdentity
5965-            type="win32"
5966-            name="Microsoft.Windows.Common-Controls"
5967-            version="6.0.0.0"
5968-            processorArchitecture="X86"
5969-            publicKeyToken="6595b64144ccf1df"
5970-            language="*"
5971-        />
5972-    </dependentAssembly>
5973-</dependency>
5974-</assembly>
5975-"""
5976-
5977-packages = ['encodings']
5978-
5979-try:
5980-    import _xmlplus
5981-except ImportError:
5982-    pass
5983-else:
5984-    packages.append('_xmlplus')
5985-
5986-setup_args = {
5987-    'name': 'Tahoe',
5988-    'description': 'Allmydata Tahoe distributated storage',
5989-    'author': 'Allmydata, Inc.',
5990-    'windows': [
5991-        {
5992-            'script': 'confwiz.py',
5993-            'icon_resources': [(1, 'amdicon.ico')],
5994-            'other_resources': [(24,1,lnf_manifest%'Allmydata Tahoe Config Wizard')],
5995-        },
5996-    ],
5997-    'console': [
5998-        'tahoe.py',
5999-    ],
6000-    'service': [
6001-        'tahoesvc',
6002-    ],
6003-    'data_files': [
6004-        ('.', [
6005-        ],),
6006-        ('pkg_resources/allmydata/web', glob.glob('../src/allmydata/web/*')),
6007-        ('winfuse', glob.glob('./winfuse/*')),
6008-    ],
6009-    'zipfile' : 'library.zip',
6010-    'options': {
6011-        "py2exe": {
6012-            "excludes": [
6013-            ],
6014-            "includes": [
6015-            ],
6016-            "packages": packages,
6017-            #"optimize" : 2,
6018-        },
6019-    },
6020-}
6021-
6022-if __name__ == '__main__':
6023-    setup(**setup_args)
6024-
6025-
6026-_junk = py2exe # appease pyflakes
6027-del _junk
6028rmfile ./windows/setup.py
6029hunk ./windows/tahoe.py 1
6030-from allmydata.util import pkgresutil # override the pkg_resources zip provider for py2exe deployment
6031-pkgresutil.install() # this is done before nevow is imported by depends
6032-import depends # import dependencies so that py2exe finds them
6033-_junk = depends # appease pyflakes
6034 
6035hunk ./windows/tahoe.py 2
6036-import sys
6037-from allmydata.scripts import runner
6038-
6039-sys.exit(runner(install_node_control=False))
6040rmfile ./windows/tahoe.py
6041rmdir ./windows
6042hunk ./Makefile 420
6043 EXPERIMENTAL-deb: is-known-debian-arch
6044        $(PYTHON) misc/build_helpers/build-deb.py $(ARCH)
6045 
6046-
6047-# These targets provide for windows native builds
6048-.PHONY: windows-exe windows-installer windows-installer-upload
6049-
6050-windows-exe: .built
6051-       $(RUNPP) -c "$(MAKE) -C windows windows-exe"
6052-
6053-windows-installer:
6054-       $(RUNPP) -c "$(MAKE) -C windows windows-installer"
6055-
6056-windows-installer-upload:
6057-       $(RUNPP) -c "$(MAKE) -C windows windows-installer-upload"
6058-
6059}
6060[Move dependency imports from windows/depends.py (which has gone away) into src/allmydata/windows/tahoesvc.py. Also fix a pyflakes warning, and change the service display name from 'Allmydata Tahoe Node' to 'Tahoe-LAFS node'. refs #1282
6061david-sarah@jacaranda.org**20101226042100
6062 Ignore-this: ee45f324934e1251380206dbee6346d0
6063] {
6064hunk ./src/allmydata/windows/tahoesvc.py 46
6065 
6066 class Tahoe(win32serviceutil.ServiceFramework):
6067     _svc_name_ = "Tahoe"
6068-    _svc_display_name_ = "Allmydata Tahoe Node"
6069+    _svc_display_name_ = "Tahoe-LAFS Node"
6070     def __init__(self, args):
6071         logmsg("init")
6072         try:
6073hunk ./src/allmydata/windows/tahoesvc.py 134
6074         try:
6075             logmsg("main thread startup")
6076 
6077-            import depends # import dependencies so that py2exe finds them
6078-            _junk = depends # appease pyflakes
6079+            # import dependencies so that py2exe finds them
6080+            # nevow requires all these for its voodoo module import time adaptor registrations
6081+            from nevow import accessors, appserver, static, rend, url, util, query, i18n, flat
6082+            from nevow import guard, stan, testutil, context
6083+            from nevow.flat import flatmdom, flatstan, twist
6084+            from formless import webform, processors, annotate, iformless
6085+            from decimal import Decimal
6086+
6087+            import allmydata.web
6088+
6089+            # junk to appease pyflakes's outrage at py2exe's needs
6090+            [
6091+                accessors, appserver, static, rend, url, util, query, i18n, flat, guard, stan, testutil,
6092+                context, flatmdom, flatstan, twist, webform, processors, annotate, iformless, Decimal,
6093+                allmydata,
6094+            ]
6095 
6096             from twisted.internet import reactor
6097             from twisted.python import log, logfile
6098}
6099[NEWS: update entry for removal of Mac and Windows apps. refs #1282
6100david-sarah@jacaranda.org**20101226042245
6101 Ignore-this: c8099bc6e8235718d042c9a13c1e2425
6102] hunk ./NEWS 7
6103 
6104 ** Removals
6105 
6106- - The unmaintained GUI application for Mac OS X has been removed. (#1282)
6107+ - The unmaintained GUI applications for Mac OS X and Windows have been
6108+   removed. (#1282)
6109 
6110 
6111 * Release 1.8.1 (2010-10-28)
6112
6113Context:
6114
6115[docs/architecture.rst: correct rst syntax.
6116david-sarah@jacaranda.org**20101212202003
6117 Ignore-this: 3fbe12feb28bec6f1c63aedbc79aad21
6118]
6119[docs/architecture.rst: formatting.
6120david-sarah@jacaranda.org**20101212201719
6121 Ignore-this: 305fa5dfc2939355eaf6d0d2161eb1ff
6122]
6123[docs: linkification, wording improvements.
6124david-sarah@jacaranda.org**20101212201234
6125 Ignore-this: 4e67287f527a8bc728cfbd93255d2aae
6126]
6127[docs: formatting.
6128david-sarah@jacaranda.org**20101212201115
6129 Ignore-this: 2e0ed394ac7726651d3a4f2c4b0d3798
6130]
6131[docs/configuration.rst: more formatting tweaks; which -> that.
6132david-sarah@jacaranda.org**20101212195522
6133 Ignore-this: a7becb7021854ca5a90edd892b36fdd7
6134]
6135[docs/configuration.rst: more changes to formatting.
6136david-sarah@jacaranda.org**20101212194511
6137 Ignore-this: 491aac33e5f5268d224359f1447d10be
6138]
6139[docs/configuration.rst: changes to formatting (mainly putting commands and filenames in monospace).
6140david-sarah@jacaranda.org**20101212181828
6141 Ignore-this: 8a1480e2d5f43bee678476424615b50f
6142]
6143[scripts/backupdb.py: more accurate comment about path field.
6144david-sarah@jacaranda.org**20101212170320
6145 Ignore-this: 50e47a2228a85207bbcd188a78a0d4e6
6146]
6147[scripts/cli.py: fix missing 'put' in usage example for 'tahoe put'.
6148david-sarah@jacaranda.org**20101212170207
6149 Ignore-this: 2cbadf066fff611fc03d3c0ff97ce6ec
6150]
6151[docs/frontends/CLI.rst: changes to formatting (mainly putting commands and filenames in monospace), and to command syntax to reflect that DIRCAP/... is accepted. Clarify the syntax of 'tahoe put' and other minor corrections. Tahoe -> Tahoe-LAFS.
6152david-sarah@jacaranda.org**20101212165800
6153 Ignore-this: a123ef6b564aa8624d1e79c97068ea12
6154]
6155[docs/frontends/CLI.rst: Unicode arguments to 'tahoe' work on Windows as of v1.7.1.
6156david-sarah@jacaranda.org**20101212063740
6157 Ignore-this: 3977a99dfa86ac33a44171deaf43aaab
6158]
6159[docs/known_issues.rst: fix title and linkify another URL. refs #1225
6160david-sarah@jacaranda.org**20101212062817
6161 Ignore-this: cc91287f7fb51c23440b3d2fe79c449c
6162]
6163[docs/known_issues.rst: fix an external link. refs #1225
6164david-sarah@jacaranda.org**20101212062435
6165 Ignore-this: b8cbf12f353131756c358965c48060ec
6166]
6167[Fix a link from uri.rst to dirnodes.rst. refs #1225
6168david-sarah@jacaranda.org**20101212054502
6169 Ignore-this: af6205299f5c9a33229cab259c00f9d5
6170]
6171[Fix a link from webapi.rst to FTP-and-SFTP.rst. refs #1225
6172david-sarah@jacaranda.org**20101212053435
6173 Ignore-this: 2b9f88678c3447ea860d6b61e8799858
6174]
6175[More specific hyperlink to architecture.rst from helper.rst. refs #1225
6176david-sarah@jacaranda.org**20101212052607
6177 Ignore-this: 50424c768fca481252fabf58424852dc
6178]
6179[Update hyperlinks between docs, and linkify some external references. refs #1225
6180david-sarah@jacaranda.org**20101212051459
6181 Ignore-this: cd43a4c3d3de1f832abfa88d5fc4ace1
6182]
6183[docs/specifications/dirnodes.rst: fix references to mutable.rst. refs #1225
6184david-sarah@jacaranda.org**20101212012720
6185 Ignore-this: 6819b4b4e06e947ee48b365e840db37d
6186]
6187[docs/specifications/mutable.rst: correct the magic string for v1 mutable containers. refs #1225
6188david-sarah@jacaranda.org**20101212011400
6189 Ignore-this: 99a5fcdd40cef83dbb08f323f6cdaaca
6190]
6191[Move .txt files in docs/frontends and docs/specifications to .rst. refs #1225
6192david-sarah@jacaranda.org**20101212010251
6193 Ignore-this: 8796d35d928370f7dc6ad2dafdc1c0fe
6194]
6195[Convert docs/frontends and docs/specifications to reStructuredText format (not including file moves).
6196david-sarah@jacaranda.org**20101212004632
6197 Ignore-this: e3ceb2d832d73875abe48624ddbb5622
6198]
6199[scripts/cli.py: remove the disclaimer in the help for 'tahoe cp' that it does not handle non-ASCII filenames well. (At least, we intend to handle them.)
6200david-sarah@jacaranda.org**20101130002145
6201 Ignore-this: 94c003efaa20b9eb4a83503d79844ca
6202]
6203[relnotes.txt: fifth -> sixth labor-of-love release
6204zooko@zooko.com**20101129045647
6205 Ignore-this: 21c245015268b38916e3a138d256c09d
6206]
6207[Makefile: BB_BRANCH is set to the empty string for trunk, not the string 'trunk'.
6208david-sarah@jacaranda.org**20101128233512
6209 Ignore-this: 5a7ef8eb10475636d21b91e25b56c369
6210]
6211[relnotes.txt: eleventh -> twelfth release.
6212david-sarah@jacaranda.org**20101128223321
6213 Ignore-this: 1e26410156a665271c1170803dea2c0d
6214]
6215[relnotes.tst: point to known_issues.rst, not known_issues.txt.
6216david-sarah@jacaranda.org**20101128222918
6217 Ignore-this: 60194eb4544cac446fe4f60b3e34b887
6218]
6219[quickstart.html: fix link to point to allmydata-tahoe-1.8.1.zip.
6220david-sarah@jacaranda.org**20101128221728
6221 Ignore-this: 7b3ee86f8256aa12f5d862f689f3ee29
6222]
6223[TAG allmydata-tahoe-1.8.1
6224david-sarah@jacaranda.org**20101128212336
6225 Ignore-this: 9c18bdeaef4822f590d2a0d879e00621
6226]
6227Patch bundle hash:
622838d7c5a19fb006708ca28d29419f08104e5af89d