aboutsummaryrefslogtreecommitdiffstats
path: root/phpBB/viewtopic.php
blob: 59ef7bbc80d265a54d69d6542dd8b00f1e914547 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
<?php
/**
*
* @package phpBB3
* @copyright (c) 2005 phpBB Group
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/

/**
* @ignore
*/
define('IN_PHPBB', true);
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . 'common.' . $phpEx);
include($phpbb_root_path . 'includes/functions_display.' . $phpEx);
include($phpbb_root_path . 'includes/bbcode.' . $phpEx);

// Start session management
$user->session_begin();
$auth->acl($user->data);

// Initial var setup
$forum_id	= request_var('f', 0);
$topic_id	= request_var('t', 0);
$post_id	= request_var('p', 0);
$voted_id	= request_var('vote_id', array('' => 0));

$voted_id = (sizeof($voted_id) > 1) ? array_unique($voted_id) : $voted_id;


$start		= request_var('start', 0);
$view		= request_var('view', '');

$default_sort_days	= (!empty($user->data['user_post_show_days'])) ? $user->data['user_post_show_days'] : 0;
$default_sort_key	= (!empty($user->data['user_post_sortby_type'])) ? $user->data['user_post_sortby_type'] : 't';
$default_sort_dir	= (!empty($user->data['user_post_sortby_dir'])) ? $user->data['user_post_sortby_dir'] : 'a';

$sort_days	= request_var('st', $default_sort_days);
$sort_key	= request_var('sk', $default_sort_key);
$sort_dir	= request_var('sd', $default_sort_dir);

$update		= request_var('update', false);

$s_can_vote = false;
/**
* @todo normalize?
*/
$hilit_words	= request_var('hilit', '', true);

// Do we have a topic or post id?
if (!$topic_id && !$post_id)
{
	trigger_error('NO_TOPIC');
}

// Find topic id if user requested a newer or older topic
if ($view && !$post_id)
{
	if (!$forum_id)
	{
		$sql = 'SELECT forum_id
			FROM ' . TOPICS_TABLE . "
			WHERE topic_id = $topic_id";
		$result = $db->sql_query($sql);
		$forum_id = (int) $db->sql_fetchfield('forum_id');
		$db->sql_freeresult($result);

		if (!$forum_id)
		{
			trigger_error('NO_TOPIC');
		}
	}

	if ($view == 'unread')
	{
		// Get topic tracking info
		$topic_tracking_info = get_complete_topic_tracking($forum_id, $topic_id);

		$topic_last_read = (isset($topic_tracking_info[$topic_id])) ? $topic_tracking_info[$topic_id] : 0;

		$sql = 'SELECT post_id, topic_id, forum_id
			FROM ' . POSTS_TABLE . "
			WHERE topic_id = $topic_id
				" . (($auth->acl_get('m_approve', $forum_id)) ? '' : 'AND post_approved = 1') . "
				AND post_time > $topic_last_read
				AND forum_id = $forum_id
			ORDER BY post_time ASC";
		$result = $db->sql_query_limit($sql, 1);
		$row = $db->sql_fetchrow($result);
		$db->sql_freeresult($result);

		if (!$row)
		{
			$sql = 'SELECT topic_last_post_id as post_id, topic_id, forum_id
				FROM ' . TOPICS_TABLE . '
				WHERE topic_id = ' . $topic_id;
			$result = $db->sql_query($sql);
			$row = $db->sql_fetchrow($result);
			$db->sql_freeresult($result);
		}

		if (!$row)
		{
			// Setup user environment so we can process lang string
			$user->setup('viewtopic');

			trigger_error('NO_TOPIC');
		}

		$post_id = $row['post_id'];
		$topic_id = $row['topic_id'];
	}
	else if ($view == 'next' || $view == 'previous')
	{
		$sql_condition = ($view == 'next') ? '>' : '<';
		$sql_ordering = ($view == 'next') ? 'ASC' : 'DESC';

		$sql = 'SELECT forum_id, topic_last_post_time
			FROM ' . TOPICS_TABLE . '
			WHERE topic_id = ' . $topic_id;
		$result = $db->sql_query($sql);
		$row = $db->sql_fetchrow($result);
		$db->sql_freeresult($result);

		if (!$row)
		{
			$user->setup('viewtopic');
			// OK, the topic doesn't exist. This error message is not helpful, but technically correct.
			trigger_error(($view == 'next') ? 'NO_NEWER_TOPICS' : 'NO_OLDER_TOPICS');
		}
		else
		{
			$sql = 'SELECT topic_id, forum_id
				FROM ' . TOPICS_TABLE . '
				WHERE forum_id = ' . $row['forum_id'] . "
					AND topic_moved_id = 0
					AND topic_last_post_time $sql_condition {$row['topic_last_post_time']}
					" . (($auth->acl_get('m_approve', $row['forum_id'])) ? '' : 'AND topic_approved = 1') . "
				ORDER BY topic_last_post_time $sql_ordering";
			$result = $db->sql_query_limit($sql, 1);
			$row = $db->sql_fetchrow($result);
			$db->sql_freeresult($result);

			if (!$row)
			{
				$user->setup('viewtopic');
				trigger_error(($view == 'next') ? 'NO_NEWER_TOPICS' : 'NO_OLDER_TOPICS');
			}
			else
			{
				$topic_id = $row['topic_id'];
				$forum_id = $row['forum_id'];
			}
		}
	}

	if (isset($row) && $row['forum_id'])
	{
		$forum_id = $row['forum_id'];
	}
}

// This rather complex gaggle of code handles querying for topics but
// also allows for direct linking to a post (and the calculation of which
// page the post is on and the correct display of viewtopic)
$sql_array = array(
	'SELECT'	=> 't.*, f.*',

	'FROM'		=> array(FORUMS_TABLE => 'f'),
);

// The FROM-Order is quite important here, else t.* columns can not be correctly bound.
if ($post_id)
{
	$sql_array['SELECT'] .= ', p.post_approved, p.post_time, p.post_id';
	$sql_array['FROM'][POSTS_TABLE] = 'p';
}

// Topics table need to be the last in the chain
$sql_array['FROM'][TOPICS_TABLE] = 't';

if ($user->data['is_registered'])
{
	$sql_array['SELECT'] .= ', tw.notify_status';
	$sql_array['LEFT_JOIN'] = array();

	$sql_array['LEFT_JOIN'][] = array(
		'FROM'	=> array(TOPICS_WATCH_TABLE => 'tw'),
		'ON'	=> 'tw.user_id = ' . $user->data['user_id'] . ' AND t.topic_id = tw.topic_id'
	);

	if ($config['allow_bookmarks'])
	{
		$sql_array['SELECT'] .= ', bm.topic_id as bookmarked';
		$sql_array['LEFT_JOIN'][] = array(
			'FROM'	=> array(BOOKMARKS_TABLE => 'bm'),
			'ON'	=> 'bm.user_id = ' . $user->data['user_id'] . ' AND t.topic_id = bm.topic_id'
		);
	}

	if ($config['load_db_lastread'])
	{
		$sql_array['SELECT'] .= ', tt.mark_time, ft.mark_time as forum_mark_time';

		$sql_array['LEFT_JOIN'][] = array(
			'FROM'	=> array(TOPICS_TRACK_TABLE => 'tt'),
			'ON'	=> 'tt.user_id = ' . $user->data['user_id'] . ' AND t.topic_id = tt.topic_id'
		);

		$sql_array['LEFT_JOIN'][] = array(
			'FROM'	=> array(FORUMS_TRACK_TABLE => 'ft'),
			'ON'	=> 'ft.user_id = ' . $user->data['user_id'] . ' AND t.forum_id = ft.forum_id'
		);
	}
}

if (!$post_id)
{
	$sql_array['WHERE'] = "t.topic_id = $topic_id";
}
else
{
	$sql_array['WHERE'] = "p.post_id = $post_id AND t.topic_id = p.topic_id";
}

$sql_array['WHERE'] .= ' AND f.forum_id = t.forum_id';

$sql = $db->sql_build_query('SELECT', $sql_array);
$result = $db->sql_query($sql);
$topic_data = $db->sql_fetchrow($result);
$db->sql_freeresult($result);

// link to unapproved post or incorrect link
if (!$topic_data)
{
	// If post_id was submitted, we try at least to display the topic as a last resort...
	if ($post_id && $topic_id)
	{
		redirect(append_sid("{$phpbb_root_path}viewtopic.$phpEx", "t=$topic_id" . (($forum_id) ? "&amp;f=$forum_id" : '')));
	}

	trigger_error('NO_TOPIC');
}

$forum_id = (int) $topic_data['forum_id'];
// This is for determining where we are (page)
if ($post_id)
{
	// are we where we are supposed to be?
	if (!$topic_data['post_approved'] && !$auth->acl_get('m_approve', $topic_data['forum_id']))
	{
		// If post_id was submitted, we try at least to display the topic as a last resort...
		if ($topic_id)
		{
			redirect(append_sid("{$phpbb_root_path}viewtopic.$phpEx", "t=$topic_id" . (($forum_id) ? "&amp;f=$forum_id" : '')));
		}

		trigger_error('NO_TOPIC');
	}
	if ($post_id == $topic_data['topic_first_post_id'] || $post_id == $topic_data['topic_last_post_id'])
	{
		$check_sort = ($post_id == $topic_data['topic_first_post_id']) ? 'd' : 'a';

		if ($sort_dir == $check_sort)
		{
			$topic_data['prev_posts'] = ($auth->acl_get('m_approve', $forum_id)) ? $topic_data['topic_replies_real'] : $topic_data['topic_replies'];
		}
		else
		{
			$topic_data['prev_posts'] = 0;
		}
	}
	else
	{
		$sql = 'SELECT COUNT(p.post_id) AS prev_posts
			FROM ' . POSTS_TABLE . " p
			WHERE p.topic_id = {$topic_data['topic_id']}
				" . ((!$auth->acl_get('m_approve', $forum_id)) ? 'AND p.post_approved = 1' : '');

		if ($sort_dir == 'd')
		{
			$sql .= " AND (p.post_time > {$topic_data['post_time']} OR (p.post_time = {$topic_data['post_time']} AND p.post_id >= {$topic_data['post_id']}))";
		}
		else
		{
			$sql .= " AND (p.post_time < {$topic_data['post_time']} OR (p.post_time = {$topic_data['post_time']} AND p.post_id <= {$topic_data['post_id']}))";
		}

		$result = $db->sql_query($sql);
		$row = $db->sql_fetchrow($result);
		$db->sql_freeresult($result);

		$topic_data['prev_posts'] = $row['prev_posts'] - 1;
	}
}

$topic_id = (int) $topic_data['topic_id'];
//
$topic_replies = ($auth->acl_get('m_approve', $forum_id)) ? $topic_data['topic_replies_real'] : $topic_data['topic_replies'];

// Check sticky/announcement time limit
if (($topic_data['topic_type'] == POST_STICKY || $topic_data['topic_type'] == POST_ANNOUNCE) && $topic_data['topic_time_limit'] && ($topic_data['topic_time'] + $topic_data['topic_time_limit']) < time())
{
	$sql = 'UPDATE ' . TOPICS_TABLE . '
		SET topic_type = ' . POST_NORMAL . ', topic_time_limit = 0
		WHERE topic_id = ' . $topic_id;
	$db->sql_query($sql);

	$topic_data['topic_type'] = POST_NORMAL;
	$topic_data['topic_time_limit'] = 0;
}

// Setup look and feel
$user->setup('viewtopic', $topic_data['forum_style']);

if (!$topic_data['topic_approved'] && !$auth->acl_get('m_approve', $forum_id))
{
	trigger_error('NO_TOPIC');
}

// Start auth check
if (!$auth->acl_get('f_read', $forum_id))
{
	if ($user->data['user_id'] != ANONYMOUS)
	{
		trigger_error('SORRY_AUTH_READ');
	}

	login_box('', $user->lang['LOGIN_VIEWFORUM']);
}

// Forum is passworded ... check whether access has been granted to this
// user this session, if not show login box
if ($topic_data['forum_password'])
{
	login_forum_box($topic_data);
}

// Redirect to login or to the correct post upon emailed notification links
if (isset($_GET['e']))
{
	$jump_to = request_var('e', 0);

	$redirect_url = append_sid("{$phpbb_root_path}viewtopic.$phpEx", "f=$forum_id&amp;t=$topic_id");

	if ($user->data['user_id'] == ANONYMOUS)
	{
		login_box($redirect_url . "&amp;p=$post_id&amp;e=$jump_to", $user->lang['LOGIN_NOTIFY_TOPIC']);
	}

	if ($jump_to > 0)
	{
		// We direct the already logged in user to the correct post...
		redirect($redirect_url . ((!$post_id) ? "&amp;p=$jump_to" : "&amp;p=$post_id") . "#p$jump_to");
	}
}

// What is start equal to?
if ($post_id)
{
	$start = floor(($topic_data['prev_posts']) / $config['posts_per_page']) * $config['posts_per_page'];
}

// Get topic tracking info
if (!isset($topic_tracking_info))
{
	$topic_tracking_info = array();

	// Get topic tracking info
	if ($config['load_db_lastread'] && $user->data['is_registered'])
	{
		$tmp_topic_data = array($topic_id => $topic_data);
		$topic_tracking_info = get_topic_tracking($forum_id, $topic_id, $tmp_topic_data, array($forum_id => $topic_data['forum_mark_time']));
		unset($tmp_topic_data);
	}
	else if ($config['load_anon_lastread'] || $user->data['is_registered'])
	{
		$topic_tracking_info = get_complete_topic_tracking($forum_id, $topic_id);
	}
}

// Post ordering options
$limit_days = array(0 => $user->lang['ALL_POSTS'], 1 => $user->lang['1_DAY'], 7 => $user->lang['7_DAYS'], 14 => $user->lang['2_WEEKS'], 30 => $user->lang['1_MONTH'], 90 => $user->lang['3_MONTHS'], 180 => $user->lang['6_MONTHS'], 365 => $user->lang['1_YEAR']);

$sort_by_text = array('a' => $user->lang['AUTHOR'], 't' => $user->lang['POST_TIME'], 's' => $user->lang['SUBJECT']);
$sort_by_sql = array('a' => array('u.username_clean', 'p.post_id'), 't' => 'p.post_time', 's' => array('p.post_subject', 'p.post_id'));
$join_user_sql = array('a' => true, 't' => false, 's' => false);

$s_limit_days = $s_sort_key = 7nfnvԧMR{ۈO]}^ڴ8w׸=։WkU6jwo0(ȄUQT"@*&PEH|w8*
;/X@zn@|}=m>KmD[iOw1y"l
B`xQ;̧vob8]}t7{^]ۈtl(n#\Ri5u}}֍mQmcedrU١{U<ަ
y0Qv}Qw
;j|ح}u[7X<=D_wޙK;k}=nmsB#uux|mG|j7.J+Vs:teͯn>RmRUWU}}[wxu}K;ؾ^/Zov;-^^ێ}mOw.;^w׽y^=uw9\iZܷ8sws_O(}޶ю7|,w(J:9>]L+[9y_zQGvoA׻uJٻ<^[n]wFwz[oGݑZIr}w_Ǿ־[>!yb˻yU^M|U.\ݼnݷ:wu{ʝ^h4e/{mvn5RnK;nUlwwzQ{Ty}/}Jρ}z/^ٹ\ךwno}z<{ks}eJnOvòw9UUZ/JtRkS]hkY;[nE=/A7*-ԛܤg{x`=t=JN:l[eY.o]hy{7'n{i\k$yaw۽{vA^ڞmG{
z4y]{۷.i}\|ô7nfG{ekΦiݷ{}}_oϷnﷳ>5}{
z׳n}4;ZMvgucSH @Mh	h##@4Ƨ?CICz#*aA`MAMDMDpADG 9Pn#EـBU=ׂ!l]G39EB#GDXjozePm5ZѮ-JܭTmEUV뻕LŚwmlmhչV\E])ݷ-5sQQh֮Di0QʸCɰ`ܢ))#b0jr&j$tdFZ)T1d#])a	 65smDf)V-%&ەfR-0r7+\`ۚ́jESl6TV*AR+sX։7.C5n\W6jwjTPlM!S36ͪ鶋sVWZ[)%%ΠCFjiTK#RbmQ\ؒB1UnX&ܻQF̤jR&,6DlIcQRUEBwZs%4"Z+Elm3Xj9ب\IcnmEnTw[]DQ0I=@+%d[jW	zDE$@ZIUMsDS!ݞs#q>;K`s媶f/n].:xݤ;:?G =	!KL/
w߶=?Gc:¥#2t9 gH1E(#J067=dZׄTk+}.~{4Wz׍@5"Tsֈ|^vJ͝tnVSL=l
zzhPC|xan%0*y씢Ȱhg|9sNx?ڼ#%]O+[CEDq|'>Խ{]'zׁ?OgVè_u{yL?ƴ̃#"*,Gq=Uyo̡?\gMBo9;<R:Tt%e=/ա|OTED|B@PBڡ^fF0D:F?Gog
}՞>νrу1ѫX0zv4FlS a4 pa?mOËX2CYfRWm_k&)V4j[-W[6Q//dқz'~<8o,yWGBY05,SN7;UG_璌ORvFG\|*Zd8;ޚME-Ϻ鬏ɱam-lܵrAL_A;|ؼj
J0eПC5M/)dSp̋ZrF=2?oz[z|Rؘb>Ҏᆆ]d([U,4 e
2Ee~N!×bCݷīKZN|O}S9fٻoC7S̠bjKqҔL+{dϼX}״Ϩ!iy_`Dӳ-$!$PP45eq|7CxֺىΧq{nI$%G==[o"K	cSjF6f,k6a.3F:ww1-	9*Ϯ'3HS||.|HN|Q<M!`JhH(ϜǼ}ú[G~ܳJ)]DW0ߜL6E]/G
Dۣ>`ƃy:gYƢKFg`{H/ӳ*6*GH=2Ld0)2lUfV!p<~[pq\nSjgJzF-6?zbv~ɇ}ٴ>5srƖ9pEa3+zv'yy-(?
!H-S
~ICj),
{~}_\fc䧷m_`nQ?u5YIǽEYV,cs_ڻ!Y}_]50dWJ3(*Z^2+lyU=\n7|83RU2o]Ab#CG$+y bx
JRd#㳷xw(- 9WLw/7FtJ189	DAOCx,4ѣ3SDⳋC(-{0ӝ|z>9YmMm~H"RT GKp9ȜYe66Fe>gmm	3vUtb͑O=ߡ8緎VruǪvS
חJ9ю֮/{)Gwkhw&a'P;sg/Fq,nw*K9>kv[oTyV(ZRV4a|%:LG*-s37HTv[C0wHVf}{"UUf0XU
 " @T[
0L˹*#0o"5ŗA2MxBqD1~Hytr=QxAS@_0;sʹ>{ĸiA[裪-e6j>'jښa'ѡyt~m˓(bzYW3o9SX[
} ,
5`<wD=R<^ޯOΆiE]5ٴ]L*t"Iڋ:
-`Fq6Eg/DӜw$@KOO(
Xq~e1g˷=_Sof<|>EU`*ayprhJMwPc{yFzR)Td	yS}ajdVkO^ǩQd
qDa_'aEE 0<?]ЭYjFPw1䮽Mݳ?nf)0r4G[g?ɾBxǦyB;|AwM+v]>]4SSN~.fc,tT31Bf#/M^dVQ4TɞϷMIA_{(w@mue`1WҋW
Fpr8ҿ<SsD-HPw[^+se~۶	1PYWCEF;Bk{yL
q4+81c8v.(qg
ԃNoH2_?7k?F/hWT9B|ۑT`P6*E*[͒|>";5ݫW:%w?5R)bQ}ScoB,e?u=ʙ@]Rn7oT.zuBtػr6Qӑ`> G
"
p@"=0,\xD61>}cŜ17R|6t+wf`KuOKCkaZqcǛtZ^p_!9\rщ\ӻQˀ00dda0:$;>={xzT5RzEM_xʀGm^(p޳{oGI]z˫29/`tJ
Wr>;0[JƵ(1$x9R?a:|ƯeTF߫@5.iٹya8[SI==ܘRۑ}Q_cCTHX'WsQ٘J7n}4S
/[rI,}-nTG=:q
(rL-En	r-Aq쇽q͙;V;K|G~|'(cߚbU[J8LzlzHh>_p
h
=l$MzG88	Gv:,g}$86D.: :w)(|8{\goӌG#N=XQύ&m}U8t&Ͽ$q?NCQ]Jhw$jvEj#T´:;
GhwvEX޿vW`LM>`!ŕG^/]hP]>4(߂X4=þ?FjUz6
'ҥ
;#BT4"jT§)sMvJE3a,mg_.kav.W讫۩U9GTA#&>džQ-&Z$Ü\ Nq>*Sw81/C`(lR۪qW*BgVȌ0h]#(`@"$DbxITx:>yi
ܣT9ۇ%L&ʘA	9fG9(oKɟg[_pyFc;ȿΫ(zč[e^JWi8t&iy!4^N/TNc-ca]r_.KʲcqfH>`yQ(9rv8Z!a+Ѱ|oMl蹂HPa{ǙDkm~v7ܵnP9̒O33T3KH0׵>`,O܃`n:^9o'&yͭ[YRx)Q'.jK&.*,S\Aq6 hnm5FO%&\oc.%rO84%,҂VGG͠'~1YM(#kb0	iܧ)^3qYX|5"xVY5~U;ɲ`|Oٺlo_ۊdzC}KW|,g$l<рH{lzd읕]֑:vQ=5SGY{u҂QRqEy%_?sːQaY'6[l}9xGGD@w,V&K7;tf-X[*yxcI*B2DmءjuFGjmF`"+$BFqF!-+l
Xģ	bDԱn㮍[uȣF;mn8XFs߫em݄V&;EReC_=A_>$n鰋vqYנNcaS|:^[Tàs12&:~La6cUSPKŘL1q2[1/6Be9RΏ$Zzo.GM{VYe-R'+`C!HT!6w.?M4hj+?%hqe
}ƈ$$, B1"IW+FMtDr6GE_/h€[-]⣿"
Fa!LrW(6+/A	Nl#l.X>f(q!cBsCgP%QޯU $]6f8p@#Rm/,yY<~M{Cs3K5@}4f
YϴOn~^WMS'W;Sp0dnsquyx]vwvH@BBibCN_<mW٦><}<og('mb/H
%1I09r<ͦ6݊,!6־kۤhOgĩ4ֵsѼ';o
k!+&{"C'5J!FAmm&4P;Z8ȶ7+Lxw@#DڞgYsRdGMu[
p'y(7-3#b>/N)Pqoӧ1Ƨz[l;i(jF*4_.4|1=}Wv9|ZV,D)P0$w;cr1]`b3p22`g~[e!5C?3욼D.c>۞}#nI-7 x"j'PZJz[
[1+rngweIVk9	z~H},N(t[5S}[Lw}B^,bڕ83f\
Bn446XMw\~s
vr@دSPFkժUnOoܽtg2M,7pٿz^ۻ2+EQAI(jgpD˜q.ܚݪGb;l,zbY\PN<},#Q|Zo2bIf4If35g\#T8ar}R=x0ȑ7s>U#b[|jY~	:q~R/dTŹAiujQˈ<͐=ut4نCU:1phhjā/gfJbG,?
Z>g?&
ښפ]=nOC*ZS^l9dX)Y,԰35÷\4=."F>OI?Ǘ'Cy:y
;Dy7j)$̐!T$`H&I.l^nܹ}ztzVHJPI"2L=ɾˈOJO_r<]IkΪN!B`=U}mbm:}"ͺvߎJN
{߲-.|h{5^_K;<8h(LmD}*MO
,Zh;dA[ᤍU!ϪQMAD>w[oTĔx
Kmx?\fҫdl;oAsj=h=gA=s&fmB/atZ\<]~pȍ9%[ߥp/#y[Ʀ\o@	])#WTx3I$%o98욪b7s5Y`x:G}7"sbny6iLxZiYMŧ"w"L9/n-tag'%
ӵphMe[QGmcduS%*,zɬZ@3E$Q,k`a
eV8Gβ=W> mOLX#{†]1gNDfcVfkn>jάO^5f>DR@vYYc?80*,&`s|T9qݱR-%c>sf?ck:bsݘb/A!awnwMc'1dZ_aSznDańp
=eg$9S0q4cEV|"Қ<lOԱTt_#~(n~
sh@)[]橨͜\Z%GkB#xr]*xUK`GzhK1oK-+	:Cs͇vhTK3+aܳb@Um+ܹՊB8:V"bKǽL0y؈x6&Ø兔fG|v-IN,(Ajaj8
{Y5w	c=k	^SD.*.*;Ӫ*?{EB'pM	*o.
TCsԜ=H6y似vnxrx0dRbwrSX6Djd+L_dsn"(OM#7o;S5H76]
}nr:I\p,y1>/׍wQ+sk8*smcXt^߫eַ1BIHHFP
AN7vnVzx^cO<{]ax)9'j.^;q1ۻ|_OÑF;Fzت@`a9^4F}oU1ٸTl棻4$rGvu[6k*MQqgM螪ӣg1v~IOt.Ũ&Yru>:=ԃ\'ayB9uUY
r3pϖ/+&Dg0J3qz|ER̮䞖8N
GT%H·!FHj& chscl5ZVA6%`~KJzVe]&ᅐ
quǑh盙K|Xs.NKv~$1-7~щ46461
P+U~oշ(K%,@Gjq?I7BR3Cc/Ma2_.<54m&⻟=^ǹ_R%2/{̀fbc:y牶Q.zWEg&
o@
K5FJPz==Z-Ey
{y'@XWqHyo`#("BMJ4UnOjc&5"zPbB7rҞ}F	Ni_02@14QC瓟qJ
slqT@_xhUN%
lz2D>
M=6)(ӌ}7}hyX,loJ:r8D`B)rdbG^lt'su'{mC*n~
ss+p{.ĪP|Jv4
uUSJ6.[_mֿ2skD8x[Hf\z"2촳mU[먰=mw+
=J`<]#x;7M>8+\t7_نTW~o0
kx*(ϓZVU}p=@*јW÷pfDPT	a89*wڢt
s
gR
RQW+qȾ}ԸJiQo0Ii,om^Y_xN")ɴh0DJ}47ܦ?yu/,U鳾CrTbO:JƆ`0
`^~nݓʂ
ᚊsQ=l6UMRղ'WJfrLL,Kz]?/knyX:)m_Z[TA@zѐIaEԅra5?Pځ54БVM>Tb}X86EʕcK0*<go{b+̸i$#ߊW<\*T'ۛJa}\ٌkΛƛf8)ɴea9F
Gbma:al&{ˣ;+‚PWQ=W;M0P䓧ߝy,Z$Ȳlt^>ʧB!?G:m?-@/9
< #$rykדeb($3͎
7{C/,U2.!cǡo
#9Rߵ`xa;`~`Tc|#	r_շy5w/}	Sg;eۧ7k9(tϦBM~o&TO%¸w`R@WV`2-p*@	䢟\9dFƉD
TH[9goLc(8\[bޫ1HN9F*+;^hAnfZkQ߄^w>)?C7ը
w FvrUQԚOrrO1k6)ge3oMֽ<)ww09^~sc:vm)|ƒS8D3")jbƸ[]ve\U2 y:'ovޜY]E7_/[tzvRx9F1DT 9ۖ}ކ޽	Gm6ziuʭ{5!٪u9R<T[
ȥzpIk)ˎdsr{ITbSL_GAE?oSD)T_G+M^G˷䵳{(绨hɑ9{/[?֤??S*!F9
wr3ÅzPIPI޹CuOJusK*ҁxyR'1Ɦ/>	?{,k)cx®.{OLYd씒!~zXǩE~=߶!ёP]R_;{TYR={Fȡ&Kžͯ8f0pO>?ْg%R<>vs/x]w=q{{2zh~G.zxq\&QID~;Q^U}htT;Bu-,~Š/̠M{)%*%aZһ[deP#p(*;&]5ygm{QʳQIb9R@`n,J"ӤT&D[BUY" Teцg^xAo7y9Ќwqߙd& N[gK͏KXsf9dH!qb;:QM`JYiNYtX-
T"eP@plowE\(G:NecH%B"cAb36_[*cAԼͥz'(9VzRqmQYuzr4%]d*gjWN>:yy|38o7ic^;4u2~y3L==~™T;KXNMe̺'].,6'+]Sŗo(	AVƄş6o_V-fؕSeC$S>_bk"/mU=1;$k-9!\hRQc1s}.^Ozh|Qr{p	h_gnBuMzX_Wd>x置`#G?Yq4~l}Wn>Ȥһrz(_ge[d!?Y퍽_H͍|ݹ3{1ӽj7_$;j9Ia/ĢkVLImܱDzd><~{1S?zg~:+ҺGYl~,tFg-T(	Xe4htBQ҄FRxhS"=#knDkۥe
'3$V^Pdq $tv_YjXQS?<owgַ[xbɵЛ/뵔xc!kkTýlf4@KlMӫٸHxc}hӯ\[DCɋ,xɐ\9w,vF]g#[喇WWLS'^~ߋay8&/"wC&!ϵJ3댼4UY,W_,V4ikuӒ=hßegCZX\$\DC,i-Ϫ˃LM)<
DžT!،9d;BeJkKgsѓSpC>JCUKvorwʹG.cڪ<؈%2jin;\@D0R֮˩ho_fW4g}W٠VM~GwNgusHuxw2"P/Օ;h7XɁ!23K|ՏK"AѨ%n=S:^RwQӄM菕|
[㍘?y^OQKo:DEܪ]M(Ӥ-vnO
ZXW׎V'grŌ?e#j.]>Ayůݝ}HTuW/|e,.|Rݕ3YÛ:TuEf"ۏp㗎Og|ʣM9e9S+.oߏXԎϾy)[}T7n~N~ΟG>uc5eH|mngҵc.ji{i~;
ײzd6'z#
kVpW>%GٲB;?#\byNĿb!$
qc(즴]"{8!|GN	D
b^EВ?fep˷/Cb4aWrPQp(6"2̎׼$o%vmktvQz[oWʱQTQex?45gŁ}I'ąY Om-w.5˄5G%yWvKnC:fg4:v|.N~ex#}ڻk}ڲLבy`Z:ٿ駛#xZg;n7rY..o=9'=-Z~ |iR5WG(_
tW?w#|z	$g׵"pp9Q~h[0e?U9MnU*?6yr&$e_>{}v}[9zf/L`kRz>by|^sXwh:j:^aV3}w08Baߊ!Ye
_c>ځ#._@8GYBN[hrp~HK22$
7$0$$gV\Zzݿw7~\ӆuhi)ѣ>*m.-D+Ѓzz5k׍/[aO~6eˏx%9k
"Sr
;ո/;mYKVUcO
3!\3ECBw|6bT< 9QAv$$v"yRo6kiu9p[ٖC!~OBDI+mm%}e/gv/c_J%[]Kz(os
Pă
` :՟/ؗYYoߺL:ctT9(mmP|ý7sBL	2I
{u[(-
QSGw>ϋ=ϣMXݚ4+h;H=04AvD~I2Ni[({z2$>*W0*aDݰ۰<%P%(أR`;pںW?ۏ8扣;BB^1<o%f\!ӒMERal眦O]]|\C5$2L$	&2臯M!;#(|j6{wõft0@0j5EXZU?KsCi0ߎz;q1ŕګuerBdu}tSglej-^'*(7BD$~@f04|IĄTkWD[ҵ/ԂXXrť.t~.'T_nfbs's~+9(:c{M
-^(̏F
i/$4qr0leyw<60;`·I$.]5lGJ }?GoV=xﯹe}wОN_o=J#OҺvU_TvLU~lGDٛL1I!$p˽Tx)ꦟ1g?'WݺG艮֗y>ů}^oi%;Qz:>/^Z|1Ӛ+)FMmo
/g>_q
i̶6r{ͿoTe].M:KCo{ܵ?뜣ïRC7K$}<>DB",~4I^_T2_qݻm]C+xG=TáEC(y;GWp*>._y}m~ߊ؟~a_GFĝp>CuڷJ
Or|۟uȴ+VXCHHi+!$|j_1owx0='|t<-s7hWew!Gޗۍ^2*v-\W>wILɭ&!_oKd>)үֱ3ŗڇٵ{iߗ~6(y|L}ک	$Ϭǫ]ْg*"v('P(:~z_]y͇:ǵPMtQZYǒ8x{-]yǗ}kTNǓN	9c\TT"?67vg1D4~8Fjy<]ݶ_媬,Qgw{l~˝7yy>oպZMobZ_#mˌb(HHycߣ3rQYO>=!E~Ϳ3zqxy<8#Is杩<<ݚ+rte
aeQwtk?ΜL[+d(GiR=\y4Mq=E܋Ұ
<馆J-'b|޿MpL$Xs]G-
xOT'm?kY0RUaE";5n>9j{N}}<=]{4	#blS5;45y6ql/:?ϫ#@n7Qmw](0kl2,k[m4][[ڬ	іm}ګs[[םqmof%ON[m92g"ܑ$-k]4D̑
DHu8bw;ou~ʵP""Ȣ`-ZSPmRI5La4 )6HJvMkSN7CY$Ɗ MvakMTRlmSN5S]FȬ&,ZͨJVD	U-j-F+S 	6S2RhaCmfLJ/{T໲Wy\0S)ui^qIIRM%f#.['v^ovڧ DY6
F=5	4iu%mD"d^O^r-QV]\Eȹd[&FM!RRw4F!Bb;e,9vqqrfG]`k]κ)A	Fc:rwuDH_w~d[~ɯgKĜ-?f:l9uKR	b
3MI$I2
M5dmhp=sN^1t˜N:nm6#zXَO`:RD!39j9JV0Όە?Kb $֪b!qktT3+[TTggUAHbJ!EZъE:,2VćXDiC|ӇHIx]oݢv̱B.$y7έr|gnlJf4uj-ר:{r! mnnݠ;l.Uk=vTQVmargœJ^\	5͎pkChbc	ЍiӾ d!2A($=q>"9iM	.	!"͟	,U} <PՎeYwO$(qac}gz;D5Qw{ܚ~]^ӐslyY[]47M6mUmM~uPZ7+hW%0qEakV6vOiwfk]8+h:!9):Mj<*RfUۧeGy
gz6xnjVEӯ}۶X{W}vU>V"9lN)Tu8~:ڹ3m_/y#xvcwcf *f
B%ȼ-"*j XT@]O
M3)q^>K(?9uZ

V-UnJVx6m2fc3SGOI&n*%ev/Em地
:F2Zf#'e6̮UwB#S|6*)R'MyiL[qFpo6R|`1b
Hm˫廳m	(973SYCC$q	6!cv}>q2
Dc5
^y^t[_-=-:̹l~NťWS30!a
9C\,66Qu'6^皜Ϻmn;M^7^\Nnߚf
l/_/k	m'Ԍԅ(ЉNuO:s/<;~BZ`Il},Z($Q5bsp
٢7s;.Co*TTT^O1C3{7S5f͋gv_}nݥ0Ko#S?-s#dBEFDAv6֍6U@` Te1L-E56(hDQM$PkFbXV5X!TPIQhJTQEcXlkZm	Y(@jAmTkbք$	L M+tb_]ꉳjNSۥ$cd6L
('wSMl6䯮T^.aWTm	Z8_
jTl9w1kl+wNCI:stU9Qs4fbLxwu/q7~@m
6"2XUo[h*Gn
7
BY=>aܲDԽ	}*ӄ+8]5Ƨ;Ur?n *nz5>g"l'o-^4_gSuktxx~-9r1F7yC@PisYxe ^j/Rjynzȱ cs&+@V"#Mch]ؑJ-9ҵm7ҷ
G;Z|jWz[UkenjP|rVK
\uF~/ܟ0?kX%r>[WyYw$g6|~餁 	#
'P~#Ȇ@}pSPGύ(eޯS|E2tbQ◳P	?)Ե=-gGnݜpOՉ-ƒAڜMu夬Qf/fb4{K\'@	d"c8TaD#7N Gv&ب>h`cwaۊHaPv-\ةB,`F$"vF8'";u$q2FBa`aq3(͛1+jxZ
`1h:
S_6<>ogਅ>oG}͟Hh!RS{c;"^>:-lS$%JR=QOI7&j|QFҵΟy{Y?K2WYIMܛfĕzeyzY052X{U+t؊X&mm=so9
:ZTOyk4F^~o9ٷcO7=r`7'}vZ>wyFj1}gs9!	n22Wm:-4ɉ
ME2L$unjU{{y>PDz߽
]i'3-pw_Iτ^;eώJPb
2G֤?6(~~c,WYC?acE}6}g_-qģTxz\ikǴi}R<(~vsrL<ҔE(xlٟ~6;/e˜
j(ʘGՁЯCtأ%JIJom_Ӥ5[+=C858Js'7eUҸWU7=߻EwWryݯŇq]Ttn˻	!,
r;wOe?Q!v/P]c^Xׅ\L%ޛ٥]n5x8hrK;/Yn8ߩ05}G(Rez
+r|?G/ Oƻ*Uq:h
jP08:5N-ƇU~	_*"GJn+M
DDצkzq)fuWeR5U{&1M=?;_op>_``*_\V^ڷ10W炙}Vzn߱=r!"gբb,xo7_m`a!d`6}Ek:‘MFY\)%rȬnIehC-&CK7kꦐ͍BIqvimP-]nHI	 &$
6FsދY!9
iuX/YOs{v7tg●<	Kk6amV/`0BuDEȐ{6uiU8f3MfOq\(4w܍F˧Vy;QO~ӆ	C-rTY
rzNn!PIj!cIe+y5lOAoA
mp0Lo{x2k5CbCqO8>QD
)R*Qo3"\`D~aE/0G~WDO&.E?
Z\򩘁fYey
xA(Y|6QPgCԨC@|Nb[1Sc'Nx2Oqr^{]GOFDȼ6I"J(#DLjft"8IHA1Do̭D@+DPQ45vn3Q	2;M\"%E G=6"[`yoC1PN/$J]@"EVTBM:Bo!#u=PF%ZB^aaG`+df%s>Mr	@L=G$W3Iluݘ;Av
ڨPYeEP.Y9;Doλ32?%Cx\tni"9O+7''K@oz1ȩZ,]:%6lsrPhoo
<7Vi($^TR'Gz>rj-D			&P-sVXjܭ TFAVj:*"22qՑlVtV
7lLP0^,N=pF.Br'WpF
:L AQe[JtϦʆ[pxom#rD`#.@8@Fqܘl[{Xg2!LP#(A`uon6O#D0tNq*r5|ͮGPF`kA$iԎ yPJsKun
8T2Ud4$F}|KgPBWNA:TF- #QUp0/z}o7׭XS#JPb8F@DPOqH8n
>|+vC?*k!mf@&Dtq$}u+v:8Ԏ]vu0F&j`Gլ%Ojc	CHܐ\?.}>Zd2btnh2ԪJ(nCAn
I&Ks(l;<~#sckqI>D8
u
_(MP>?U}q'A玏>߾'o?s>oLK;FX3{9__U*W/8/FChw컎uk뾾ij5Ï(㵹`F_G=4Mv|9eWj|Y媣;~皅KweG跫wz7_wFlӔs~ߔ=fq~k.(C_U1ve(sESE*7NN57ЋJ=ӿO$#+mǒtbNk&-3026lUv"n[pU5xj7fP(UCX8َ:A޳!c{]7n<
2X#h.C5ܔo-/$ BMh*8.??lܾ5
;g#`qs;z%Aݕ~}
xPFbчzR\%^v:jҭh?4RsK^#b
\3oy/6zhH~1GZj=\qZyz5%W⊞x}Yh
_E~`Ԯd9cHĊI!.=[x#S+:?<:ro9%y(bl%:UZ^EİRjB'Ia,rZR*ct^-#îN̔P(tD=xD7֎˲
&uXSzB3}Ʒ8c:|Q'_j	!!2KClͿͻɗqi{U+N>#n>Q1ű6gn}1ՏuO-r9aJ0m"'(Aeg ."@Ff(hB-fփAcmTMR4&Zi#T![w;]5+iR;fFN_ƍa+rѶ5 v>wjj%Wfͣ)&Uq_ikҹ4RtAE* U~UEd(O;WHLߒje)hm5Zl5mZjUڢIXVkF-U[RZ̥Dfi}}+-}RZɥh5-굚晩h%\~WumK~;͚MUbEBXČ$ʹߺtWg`	3(w46ޔE=̖Ru.ҵjۯnּJ)Fci32@!(L3lު06#X@|qjRNQ"kk᭮mHXHC/QWURbQXPk+Rk	mMkƗOy^K$#!	2c7F=e'Y"ɦ3jDV}M]6)|mM榈I݊:3/w`KUo
$OyPLa?PM*2ckśV2)jwl'J
	m_F<ï}ZTXɠVVjYmUKk)-Գ[~}͵DcZhm["ԣE_e#FdJ| ^
qyŷqyJTWeZ`yYE@ik*5֍U}Z-UUKZ5FI*}ZY#P#Kwz"ВcF60mش-k+RI"eLF HAIߤkv3^KTD"Ъ]%i,yw5&+5iURmhSrɣM#b6]
mo4kߗE^|? =mvt/+>֛6
KբD_Mk.)JJu_	)<,%ҙfoj,YLʫEXkJsYThLUElm[E^]Bص~k-+R0AyP(:/W
F5I2#	"	!n܏*(ǷK	kO*>3JDţTkkAje[L~ڔ~c桫$7V]I$i,D#@Y)"0V>|uñ 7xnBokZ+Q}ܭU7,V
X6UvwvmytQm/i]Y52c!	&U֮mRZf2&A~']4_anAX1%KvK-l[
Y)I+k~p	FxSL@KeijkYm+YVkH7A$$
>BQrsSө'ON_oOI7runǧh\)׌?TKu_H38*s*TqG-uOxi?Q|M3t/\~7Gjjпd"G
NxHUsч`5랸mg&իn\Kջշ@0A~ "pAmj\[j&=?
׶HeBzL7C4;znxq#3ZJ:iGY(?V~PM'j;ZowC_IJ*!Gs'nNFf<߹6X׼5};-Loʬ̆R	oL>můWo˿,2t>w2ھ˨7&8ׅyeюG˯1_Wћ~n-=`yQ,.k{\j?oĘ=+
To*Z+̼ٛ؛!0\%l|C%pNH1z38r_Sk,Dc2Zm|cau&=MzwSEvU؃32a	"Ezb\4Sc_d+0-}l0cD(!:Bo"-\dÎQdɎVtr,SVE!I{[M~z5.j}#qs$%0	)\q}>q+OxONSشb6^ ҅[k;]U˪:`_㓹qP4\DձZ_/[q|q tui&ln*;Ncf>q}u8tx{*~VW7J0jnFvMskeP\b"<:UގݕnQgg+U(JAKE_?e?79Gh/
EA<p!SBW')DҚD*cSɳBKz_w&gRMA 53?/ YSՍى+X##.lV(ļxnۤ9Ibr-Yuˬֆލ1/97N&s-#]3S[#7!2<%@5P/<'3H(q/O6rr^@ƳP卍\ȹ[g]vѵ&f͌NZy k<]$'u}_="f1W
mŘc*Ccf%$E,zd$dcU
J
L1絆L|7}C|4hcP0ݳ#%oh;}H=*gOجxV(\rÃ
~?A#[kIgI޵џ1
v#Ql[k]ۃ`:l.	~4US1B;rgvͧ]1S}Di9ܝ==//۞۽S!\7ilP*A[HnVPôəp_~ t{)ե2SxzN6!𵎷ϭOߗbnB,J[]m9ϝ	09kAګ6-~;y-nx1^<9rq&6$ӎ\%IJk@]|ފiӤbX]:o65ZXwSĻO
\ %S*a]afeɫ.=yyקS߲0BD9Jve[UE95unx
_ṈM#Z͍PrsƳ܆F4O[Xkl5a1>V=9V"H&xbQaIoFǎR!nļ7f}۽a)jZj6-BnpsCd+V@4ˮ]ݼnx´osn͡yz;ɿ&;P"w	19
n[ruպj$wtNh	oVZՄTk0+kN?9F(.ͱO$DFFŖ0zxM2d_Xɹ_%J݆:c4:&o*Anѳ/gێ8\RFc?[,Zq~Yyai7qx=chXݎřAs
cw'y}hκ~mĝ#x+[߅=qV~'s0yU8訮rGY]'׫oE˚
uA)yH]q
S^oᲝV_ZBgOЫ䐠X.)X*

uN40,٩F/6q#D,8<-U,NTP.a;gfܤ.3𥯞yelG4^魙߁XgꏤKnr4v'\y.sכ$DDeM@
=,	-z?>0Acd2I%CmW
lbJHQ̼hQn/L
ni
sZ-֔[}Q0XdoJ=ŝ9d+k+_mU„O_*5R7y)슈#VM?n_;o&Gk1>f>ސ̝˾9f'ZÐ2MpAC7#wh6c1e)<Y0a]INkR[󄃗?$m-{ssa1]Eۜ
n~ef?;-T{sP;4O_fվؾ:6h:|%q.N_le`٠{圚Ǐ-K:m$e}f}z[26crfYbqz>q7hR
j}7j$L;@q譋pt$'5	"Sb08g^AHp>mr8.6R&-9/y~Wb#"P(Q	z#Bÿ>П-)h\9$qVATY)SdD톰yDBXڂB!>vk_EʧE*!DFCoaIGtk]
0TEab?[/I1wP@gUuOh|帠'@$a9LxF@@GUKR=Y$EE# {kG0b0ґG?Hc^EB:m,Q6	0]":MzB@1䫨q:GU)Dv%@y:=b8I%eon\o6.{c&mh|hXDd{t:mY\ΪC5'=^LQ9zz5,pT')նf1
>bF[5[Se+dC;MpFl.Ed(7ydk=geYs|#SY3N"ޒL]pPaw7bݣ.*rvq#sh.ܛo\szαw{v<~op=>h!?}
彳TW/:DSk|(E28"BYsl7܄Bۃ>97mc4kRsD6bֆƻ T6x9"7/x
&om6G/5O@Aj^~gEZ763õ)k+0XxTvSjY|t*}K*yUYAΥ,["hƾݻ|?GLFwҵٮ8@ٻL[C׮18SÇ|PXEHDHtPAYTCLvP߄ lYt
1@wKvx䉦:)VpZqD;
\w	@RDGVF{dfey6mǚnnRQq>B|f\wvu)8) Eoc:ZHrl5ۛbN2:f652+ʊ+PSx֞f\:;kݓEKt..S4Os$^nצӷ\o'RQI2b _Q~w
zڒXۤoWoY=	 B
PLղ;Az<s@@90abi7a,<0(iAE(4BK+#	$bT[A$2(hԋ#QV='Y׾ Ȭf:dzov)vB[=[Z5ޠMaoϝ_eUr09Z<mq坌V̰#[9|BI3ݜ\MjIxdp>57nF%"l]|R=쫸t;jԆ5ﯣ0JGJb_^;t}\fbF
wGi_)Fqj g1Jk}w]|J{oK붴"H*x{Kǭb70	2 
I=a=Kq=:
؀]Gm`EJV:'-% ϒ(bZ̲)ԈDtL`#|=]ZZJ(hѠ1)~I3	vڨ~עzf[=ElkGw2xXmni-}?>_c%dh&y';q)N93%i	dfUBnVʏxsPL[.! 	|AZ|S
IΈ&4Fe_9ظtqk7ipxWT0*T!9PNqs
{MdkT@ E H$C_7}a9t厏4v\++h6$هM7@oW]f`K֬Ÿ~82u.]>\Mb1Bbĝ$R.>S9[Ge%d>ry56a\
.n;.W
!{M{tuM+Cмtk|{[c@D}NfI+_Mж3qȠRrE5{;:(wBįyQ)7HmնLpj['F7.{̚FNvBo+)0@ۭNBZVѣBFDa]+jn;K(7-lA~?E?e?\X BOx A{cF뇺
{Δ(M`w'qzwP>cO/ɰ$oh!窱uG
='c&J}|:v9.Kn;ߙ_S\sdJvmT#K4ydHwl8:(D]Csy]쁃333ΎDj;h1/fXǴ#.kC"k'S.ל;wT-W@A䶭i:=;pGZ^`rW9|SHsY!^o-qmxVq祽X^w.m-ݣͩiǨ@"	PC@zYPP2"LXAD| #D(9̓oNtev&Ʊ&Ɗ@H 8e^"aΪDa5йؠd^D}AӇh!$w(
g/dK"
;oGH8tl@m4$0ͭ)UF+1*DMj/votkHxؖgaߩ~-7eYa>/35qMΓGdDw9H(Y/pCEYyژ7
gѶVK}xBDԲ|`EDeSI0TH@$u{4?oǏMV[eMYoI	oxG7Ic3n(w B*s
Rcy cyǫAͺ7j	JMfpd9oK&]U/VeIA%"y@F*'v(Pq1GO*~_3('؊-P	 %₇_ )H%YHcsQ=MSPi `.|9zy6ÿ!",DW0-tF*KPWi4K5FEwr@j굽׫ml^P* @'TMkALc'˫A*:LX2c#xvyUmuV)B-{Ձr:ގcUM|]mE-}h;5LC]؜r=AT
7Pǫ4f<7lmZݹiOEAH!k"0-G9SPwcZ$	-AS-fЀ\tۑzm.]멲yqX޺	Gj
V؏r*ndAQ:ј{vHl rbCk(L(%yoq/Kj=5&t?9X3jšl.$p#;ю&zN{Tv|e*$XB Q/Vm|ǒYf}j$Q4e	+[e
$Bm6C|S6a4g*A߿6ז81K/{i=\1E1#(2!!@qNM:˚kf6BƄ1;5@;MPoT2"թGC꫒C(Q>btH@z_F3<W]S(S*Z{n؋Xs(&Yҍ!Ȟ6]*B2Fҕ?vnt蟰qXҭ^f@,w-}h)7
1'
6@B^xgq4		hyZFg_C2
Q(Mu	2clP0M(.-jEDc@0@xѽdCC}b22GX
`$ A}B=p>bEd$(<9#!#	8K!bȜ_Gk91
nkB7 |#
FH+s{ջ2ʲBhvݡ{Z$U
(z("@hF	jMOH値"
@TcTFȡ"(%9&,ј\ sGTBk&HHaB{ZoBñU5rHBW🻄LɘDϕv,`QDj.}iaX0\	gT*ckWYMG7$wi6B@	"NT_=feFv;y"*R(ƣRJ!wKR$jDiS$IP/vtHM4$8ȒA%%#X1Hc\W0HpcEz~k=-J
m^N<.TƳV2XAE@ꊨCvŀhiJ!	A\ͼCx,#/g!峴Do%17E4qFhnB
O;lGђʰ9Jq:C~^
fCIF̫?kst9J&/ᜤve
M@@FD*M/E'lv)F@D\(.nQI5)f6C3m2#WDz	r|8陗#ށ_##@?߄<V*,`񀄂%[8	+3RpRK[g	-JEH^o8s!@&!UhEY\6Ǵ!AHrÖ!@zRr}Mog:LW,Q{ kǘ(ynpflh[*qb`X5#X^A]<ιVf؋$|^*[YIP\2)LE.~vXO(
[ofϓX&=9!iHÙμX.~VA>ukHcE`nIFƙ 6?	droHov661LB$eoylH#/x$NBH
&ٸq(1k!$ԎAcHÇX%9[a#)#C/7pͽ~f{l{fFF(S#Ǧdl,Aicx&v:t8	$|B0#
RPHn9-3c6pA.cCs['t?|\҅G]Vl`6
dL׊Cp{f.O	##ZFmj8#*Z6ɵfndaQ}qDfj
Fj
ja=$5)|J*~aZK0 GA]^濆v cԜo$%DB˯GUm
h~CGoi2W	l$	!$$
jZ=sZjۗܞJMSYFh@:n@;q[S/l&nr96[Ɗp䩣Iz1h.^,+22ݙf1Ѡ,1pguQv
%wmjl$/q I!^0T`hs>ҍ&zv[nӢZ
јk33Hstߜ|=}ً5KU\KX⁆fIi;#}CK| >M	Xa@DPfE9;t謡04 `K_/
-e+qߘ J5Ľ^prTt
xuC\Au7lkˢ-pF<-j7@!àY׿M,DW/wfcӳ1Cك('1ʫzBjՠK0c8uqIF83[5|{^q#Nvx8f,33f9l8/}5˜4oE";)+7I
kr;D1uZC=fϭBV$V-4X34Kk]b=__e[DzXuc9Jag#[Env~c3Kbʆ^p";k>eߞ+g"s%\_ENsl*.1z&0S0N,hF%y3rj|NXǷk)x":6eyv}^_E3QɆJzCm+SI{˅bׇ%P3U.ursq{B:èem\!;_왾#]g<&Μe8gIy^6r_˨D++(Tf[RDmzΚԭ<(܃9<Fx78dh tǴ@l{0"_Ji`FPb*EʍLxSd(݆(B9LZ0tiocy/
~	a1$j82D33C0B1LW5˳ݪ;/EݤvZ0`4
Mu~GaV/XjgבO³/ahIk:``aaǍԛ(B.oP>EG0	
ll|Q,\wLty=,V:sڪ
M5bF(.\TlT.N21MVUt_~9zWAq[cUҁ770Gʶ-XϟI1
18SVڗ_J'Lx9Š=Ѣkv:')_,_T8`Ca@kE(c3]tsNnme}6%1ozbYt49LdR'J
8-kff2ukh>\,cN9ﭱ[qMZpT$Uiľ^J91
3}rT€}Zb*HauW}b4jI?g3VA&QyOou]8WCsc}ym|n.9J<2 Ya^
='m1w+BE$_i9iG
ޏQGDJs޼E&sOOg
3M[DkJ
f-I?Nozf:g^mĘ7ޘx9ϸ#wĬGak1mD>{3wFwV~Zx̜泴7ۈv4J0zRܜ9u@>MZ&x.Ҷ"
'[Nh5i	D=+5]oM{ߙ6>$fz)&md؄WO\qMɌl͗LٍK7BP֕PCU]'[6i3S(jq^ֻ@miTҨyjŤUcR53Z#:$$Gv6بFÖlls."0'5k+O
%`Gj]݆k31MNeCVtgK0hS6(@8#S|՜Ok1V6Cicd1ŰĽ|Ǖeïi0[h!d6jVɪ[o	C@%0`ͳ6P#HD?9S{Ճa`$iqlQx}M&Y͘tݡH#Vq:m#
lz
0n߿㧭q'ڈH
		Zډ!$!t{f 4/QFK~r
3^l;kmY-UצbnjP]m`y{VcָՙBI$$I$Bvfo3/fh㲼N=KVTQdf$W)1)F(J[6(DdDRV
gKM+qz]Pf'@ʙkz!F(E	jx.h0L,{>"WG<7-Y9.S5:ź0@0]Dm@帋lf3gSעkăf>Ӗ0cQfcC0,ԬF$y"XDP&8xsC\XߥV-~ў^|h86?,lU/MDRFT@HDf*($lZI@`H".dvvdG}G>@+n|~
sM@
Po.$ ɦj^g	j9jUAΌ]`bk4#J4(#pF??ZVߎfSdiX!k70pQbT(j~/ƸZϝIϑc,Շ8&)
!6!uQ[D9mp3DT8׹{a.ƸGvGL*L*| fox!2USn6CuUm,  cm*V	$Bcfx_OV+BkI$8r`})@,\'|LQ2ٵ11Ј0;38"@#	խMʖ/O
e1"k4Lad?B*jG;cifmޝ`)A&#罯o<&jl9-fe f8E7AM?fb	{ǽ.vWe5Z0t$\QQ]C>hrlz!9;9~M"oo0V	I	SX <^!0{+cuae[dEI7Q6fxѿ9o,(͒{;KewBR	GUͲ-D,[&n"7ňĿ$[pM$-3ux?Sl "`}|lC#tM"ξbxe̯]V	$6FcF%C4e}R.l=%yHCyc"Iޙz\|iч;"0UrtȂGlukEG=mUxxP"HwgHM!i_vi˅/Т2R޾on[rۈ뀈7%PѶT_%/8E,Hm%HC/Q!"?OKTNgSf86LӤY#?E޽hsIr^{:3nީjϽ5֗n2Bu*:۬CQ졽QL༎ŏ]_E}&qpc!#v>ϱEN$BR/e̚u1dsS^gLL=
k|3Ϭ1/gNX-sN7r*s%/,9K]ցƩ&.KLT
s@zldpi~eRආ/gE Vso8zUjwEAʄ.\`r8ai
 B `@i
A$D}0d<ZC|;$OæK
,’sHhk8(DDo-d$kvje qT}'P36`o@I:}ArkFTpbhm@0Pq_,]2nozǞxfcIp=qhQ=ؽQL1?٘Igxsql紭zE:V![5Co*6鍼{wێSwGA0mG7Vz,gudmU| ?mW*w=nOV$B_dlmWgQqQҭG"0{ ;a-Ϣ|9{L7,Q:Xx?`.t[bCcU]3ala:egB8n rjp	PD-v^N85ѹ!Ľ̆k'ѽ6Sd&bf4e2zl#x_g]dO{60sB/3t9d/Ț"Iۖˉ2{CViSω丧
I[O#
B)4)ַCuUd,apn"&oM|l`\ձlϟ.Z=Ǻ֘7ʰb_k$I.GCF0%	ʴǦFO`6~J6E0ΘhF/@ DS@3o=%&ʂ`bn`]\Fz
|Bb;k)Ɇ,XG%G3|\dy$Tky!&͓dtqn{ܽmUw30aw`{rmWQ3v+B.veg1]4*vesq|oDH#7$JqQңĨl@P|5%|3PLa
LrC+%E,TL=5,7BEwKbr-8u; 
~:˙0`H@4vSpTې7oRG~Ӟi<vYbхr+BCgWX3Uࢉt*dyQ=]!!sh^[`sx{qn6mK4uE!\Z ɆY
NM[pnԘD=}raLI52Lߗ}JqOFxۿxVV3Mvo15+4
АXhP]OȐz"ńD|ki2mBbr(lǖK2y&sՑcL~{R?1U>8-ryv* o{\ҥ~.5xbڍkRdO<@^ku1ZIL&Dۄx]
h>o'$r5$}n!emr.wۄ,"#  ZتlLɤ٫bd 0`M #I
7
Q1&!{
ZYgJ&򊍬m\,UUQOc"_:̴@(P 
``eg|(_ֆӲjb	_[}	Wm'PFڨ'YDhsjw琵itr_/oɌk&k+ɟR)3ҳ^]8:HiFvs]ݮi*+BISJ!B2m:9SoL0zT	?3v)/a,I]|W3n
_F*1"Mw]TѤhOԭ4W*Mtcۓ

+oPh"?eBh}uE?&Br([i3ђb{ouo!zS=r,M
9I|PHD~Q̅Pdcg(~J
g
q-($C7HKJayΞN݆诫>fdU.AW,}/}6@H09oȲGm|nPM6*٤ӜW<B#kvGГmJ|vH7.lRKS_薻OwaCu[V>	btS	ռE*P#JeWz>0vL%_"]; :`E;tWoh!&ZB4YZ'8]\=[(.\CxپIK7aŖΪ<M_
4F/XAaMR|+05!}& `$Ō#5HAM}衘|f9$fTvݹiRn#6wޫmwön|_{kJجi,FM$0I2HF
3,ƽ]VGwD;ƯZ	TGO#,uJS{g
y3
AoJMʸڟZXp_k$:
}P*PxGl^i:w=8:O.'W(e#@ Qia傽+y1kq`E;(4Hb
Y|/ՎƊO57X7SROH||eSu1_CX皂e`=ui}pE/3wo1eiKV$]0ڣ*c-OJ`StY~ܹ{DۍpuQ{;PCߏM}[:aefv
8l"n~I8
K'ѭع3x:uCLK{[}&ֆqPH(1E[I؈@sׄ7t80#@v3sޕ1s:ȃRfMtlzTR/p)530ע"A-X'2[kPYt‹`l~QHa_76(DԀ|)t؝ 	TK\[NrFTe!f6{өg	C-?!921TKJD*H}4r!p BxmՑzgr
}ez@
|
rh5yၼG@1T*+ E@T\@}\ak
1=]r7cۜ#40Sy-[f֨ڪ:Y20(qL 45$R=VJ̷ۖcU0dUGKQgЮ
#ѽ
7i\yGhPDdQ'/3o:ܰ٩l>Fi0PZ!.dvZb}]NC2F-j(Bsffեl"A
$x8Н	DvB0?CM:;n;4dٞEo˖l<Z`%N_E~֓'FX&s'p&
֒sB܍w(RY5n+
匒Kt)n?KpQK01\d5HeO(}YyLINHVHxϔ
' *:V<тp՜3@<u=oB7u2EfaA݅-I%	IvhrK<,Qhu[3c,NM]Xr3Q>ͱ}\.;nZΐ"G3wc`rf#:E>g0Ǎka=lܐ04p3r;q{!#Х;;>\ȣh UQ})@!GuTIc(U)ZGDrF( Gnel8b`GރЈ쿊HxxT,D`GXy"I z!Br"1١Hȁ2	E[a1eH=
7P#n:j& T`
ADzؐHॊ\ ES먏s	Ǭ=m-n}DGvoW߹\ORܣ}!o{&>6@M7zcßw =u}艏m#B]x]◺ti<x',OY"f|40W6zt@Onchsَ.7c?òUYQ5ɖNʪա+|S¹׭FDj3&cnc5sqWs+ܝ.Bx8
/+NlcչL'Y}^GcN~LOFRC)n_Ȑk
jceqM[u*[ia}ݖ\CrxqHk0X
_TBLRniAG%"uë};nn>ibVmQu>2%}|hlUΧrLÊ(+U+FZ(w;cFZJe>>5t8؛3GJ>Tx~V'7E2lCEӡv="9qICq78oX~=]|9GuN˯r]Gi
n{"5sy#%ٴ.Y2q7nyygfM8ҼI{-D[Q`z˴sA,GgWKݾ(Y>j'mmVݬR*݋:oŠc"~)S!v`PZZQ`1I˿{wTSCBq "f}Şox[KnW¯Eb&.
"Oa$"fD.$V8t(a/YPWKb)驆cR
TYR"%y<{>!uȢ;P[z	v
 
jM<\c";ƅHu "QD B$Bk`E/Cbb(%Ђ"-W׊0-z,zKlsB@pC3!>^{[<S착N|Dw~-8VT#S[l_OC0|L**Q!3H 1jgdUwe@&+Uʭg}֘A32ۭy]ES]';ûɝ`vtK->6*5})6'KtI~mȢR
}THهP΢GoC-ii3$
m63w$yX9Qw
XC9+)I.Dо`b{$h%u)YGmQMw|uaWmՅ/{+<;dZ10~VطY/v1;n%%pVҪg_.qebDVA.`vL+N&s;Mt{ښΦQmElmoB(nᝅ u0k jQ	~
G=Qp;߻7isPb~I7r|\	%=b
oB_:g`)$J\C"Gc`3dZK,^*/)cE
HJX̶Mģ<76ϿS{S
3.b<Z,v{(fGA0st@݃x!OY4A򀇱{j>Q2M꧑n5WLrX
C7{}Ir^9P%kVőSҴEO1z
=pX9$&}җLmFȪffgBeM(p~Bp1W:-|
Blj5ҊA,igK7Gl~
|2#{;g߄8sG>^Vq-퍆`NPXK|Ŕ[:s2j"EKBF;t!$bm~U5>3Nae1Y'{8$(N?H^wܯujf$k_IVgpcymD]	
msǏkKf:mӿhdIMc˄Dp!m0L":j5E~^]L=HR2^y~`F-˷k/E&P ="-N0* +ֿ]-kZkfQmN-$Q`@SFG6׻}F#=QdFg;VmWj7IƨrG֔ށ,FU2ߋuá
iJr
, ES]p[ML6C`C0/iztڢ-6sNQli^%ח}Ym	Dxɿ!ok|RC@"EKS7}{}f0"_q}h>,񲧤^5=W|>/fX>13 lhp}~#7ԴYzCd>$5Ym0=;x%x0~tnrvk(}J M÷fBbF9Jr=\""/Yڏ^>>H<\'{,oiY)-1UHYegCOODw0q퐵_㴴]0`0̪͢m5rdE6T&%XcPu,m3㍬q~Gٓ~2pދ`FRCUy BBHfBh5QhQoV^8Zl#|$G5ͪERD:=$!hh`<2`?)=\ܵz&FU!=fǿ1kM:]'#3*^tvWL:z7X뭺Pi0·߼XX]Ec9ZM@
fl80ڬY[?>},422/SױӫIM`9<e직N"l闛${Z	878ܾkh}=v4(9鿌nvogS3[ulWZ|tyߍR{	C.sfj66#UC>=FFo>_e^#Ap_LQ4Ύ	Eϰ@//M-]S1tw6KHej3Y&x~#vV·R.֘zSIuUmkYȑGtXn݈okkM\GTcĉ!#= 68uZ	"v  HPTR-!YBJ0A
e$.-tb+PFa>?>b}*YVXhڋrX1n[#Fnn~8
9765J۾@IdFbTReA{" 4@+EjO^_MyKe˔he8hw>pbfouPyp锓<p ?/EmD{iOgsF	Eǟ; sF!l7lkoP)n3x6!tS#&04jɨ61qX7+g٦xCg1t}miir8sLqLY;1V-oX̎.#2M'N__Wv+
T(+іQm"lT0B+V{ىRx(770tE]3ZLH#K.$M+H76ڲ†&C&n%`[ųY?tnhɳ[G j9)$3̝Wbq%JYtB@T
il.W.{ɫeBa]6tMl)w黃яH.r;<ʙ'2Q58ݑpQC
@xTG,|%CrYڿÞcs'pq#|iЙzqD=Y;2lcd$	ٴ5:"["Aɽ	 HRDoK؂BhI_htő$	$a8f߻g_H!73Ә\FI.ˣAX&MŠ`+gd&;\=.JU ~VGrS6'ιgVYt)lt`2a@:OtBHm:۪Rȳ9ZS(ܟyv3O$!>&&o;W.N#KS噘3[i;+Sd#r^Rl~,`gmU͋R!ZJ̔:t?cyG5#"`B=9;e'5gf$a;%bwٻ?S~os򷫛c)Mzh1J…f~hMq]͐!
jV1GoB;[2lh@9=eMi>p~Fi:lXh	9_š7ضvtN~gye;&xhZ}$!dۡvE4V;E*nmT!E%7EPܼM4ohcrD=>f;鬒	DVR<!cϻRÅQ[%_[2}rc%̃H657@2.=Ѐ]U:F˿!Pep&ڑB>4@Rϰq&~Q}(.>i1aBQر¥A	C-C
Pvt.HGQه6gbpmLKCfE}9Md-	^dAƘyj]BBa*
,8]0[Rv`ϞZ>>xWEazo&M	o/Ϛ	;Τ>\o/\dou?{~j9,gA@#Ra@P
F~)]uiCEwFC/;E뗋nt[pbP͗=<kHwD,>,Lrza9+aQ	SlaKdB(?z0lDk
܈q3;QHPfz@É_.|Mmqp&&L2BR+ Wmul#| bƼjX%3Z$|b5ᢵ(FۃީjYC~Dٶt%&wshoWݛmv|hԋS7LZc?0p>7Q	_].05!"!
zϏ5X+F4^ʄ*d,H  Tu/0jUnw"rs/>"͌{ȧY	zBzg/;gX/|1/4H<)aTu{F黻ZO#\42ACZ{j{Pʪ]~=,՞g+ń݇]ndN?IaB`d5#GG'!}O\pIh\wy
hXZށ!q"cD;(ΰ `S#xwp}Ɨ;ȶWq,MxBsX~g?pb>mՇlL~aTQKsxkf4e* ^ O uEGGKnaTbv"8Nݖ$EҞ2	DD`|Q#'eBۡb=W]}I-j&"_#2a՘vY4Un]b\PltWlkh>#ivƔj@sFɵL&
R-kormnL:_8QʬYl~7ac9.=B=).1ZH8WL R!VEC9lBMb55vWџr[c?/&1^{h idСfS8CoK-~Zj35G`׊dzQ4`-$˽
պdvfٽ
#8V	ጁ!N*^;I8152a/a'B⓽	|ǿή948UW&EJ[[#kF*H@,fVu+%b~[rx "U	LhZ]R&`.uY֠Ş7߯LQFmٟe:r	tkQ}
}>;a6M7,Y=>tl}ƙ2
B$5ʟn`;}MȦ/Atk܆6x]M+
".TIM@JB@F}K",P@O
6+IƷ=ZT;m16V5	[	mlYJ*ƆKQ=7*#E$Hcr:A6L%Hphln4m)/B@dab"ؖڃИ٦~1z$O
E熿' tnwU8lԱk=#pxQ@qU}a`o|!sZk6pLoBgFDFEVAC^VqU`rg5_(hbN9Z6h$cِ:
`!ϴ1}:Č#0ۜPw	
=?;`AH ÕP@nYQ$Ѯ7HcFt$=C)
`pݼ|tŦ՞V<)a
M^E
-0IidjLU912PC2=}yj:޸p١aO4{=I<;SEчtD%6Pin0Ծe\ô
Z)E$lvߺ|fB
-/}~̂D+֬Zv7Uxa{gSX@5y
B9TXb-tw?\*L&9T:1Wmdy
&-@3LT7x6I7m5.{n("hה{Zp<-~H@162H$MԶl*Cm2$3ڊ|\iQiIЄ.	F"MB)"Ieo͈=5+3f|vS[13-Uu靆RJFA!g
3_Q)
8|B!iH@{	8ўz+>yVIH(D^&~4ubr߰Q唼.ߥN@=?hJ$/zTcyV*$m$!OZ9iMgmrާ|dG~/B<^lg}&
хC̞q1D^IHxDQvNAP84L?s3Pmxs57kg-2yYvvT:zTC[1>B*ws1lbVJᚁ!2ʱ0⠋z]aF	P_~=
ϋ:zҾ'd
dK3ߡL2~A")xh_ݭ)(y[[_Z(w9l*W啈SQ*ϛ*@k<pGa{KRDHfӉTl78QE@ xb	GdHE6-!)mv4c%ڞt!HءtDr@˚F@mn!ΗIcă\SlH
cm>~KQFK
>;N<.@ W*ln%3.%yDm@oBnBi\
mluٿ
]q1Y-eEhS?+mreҪآJS&3&F!H0Y뎄I*0Zsh@t\؆-DxeBo"JV(Кa5]E/|b
Ťx\r5)! 6\4\ЙbV
e4ԉ

r\-
4QSmpq4z]=Ecs;aA	u)g,@=1fH(0
E""1P@B0`#R"1B(0@TDA#"0@@X(1B0`# @1`#U #Hͥk-[+Yڥk+MH
jZ+MmQ-Um5%L5e*R(,ԔFdP!iE
S%6V1Qm	(JR4(ڈLLHDi("PQ̴Q$)T$ K	$FKFd1*"!1dєɨ0D &I,ECdJh2lim26-cD)
TD(4T[QlQFɨԔ%	5KY66`IFX,JehfcBͱ6Ba3(L͚ibʍ),1L&`mbhb!c)a*`cCS4͢aK%Z0M4$Ѥ(ةJ[mLl$YBPThJ4XTj&4b2L2I$5@L%H%01&%ةDf32fٴE,ٔSdfIhJQQر@JDL@jJ2"֌$CF)
DI%da&eFTlSQk&fHFشbɓQj-!%RM26$	QBQ"Bjڐfm)	b5h	$ƣF5PVbhTcb(FM`L5-h5$$;|Fkߢқ\_b1ֶ"|h~͙T{&P8.{h)GvBQEũY/>ׯN~<&ȜH6y s7=j#dG96n%Fi#ߖVM=k;~yN⹝.$$7S=`g)¸2PI}h@PFG%3Zwg
hῌ|bM Q֘vţTе*]b՛]p-"H53tkm&a2m"FJqVv!d$Mrf
l'ᖏ$mDۋ
*v|uLMv3A^IFs1p3|@ba[|F]yӼ'&ٲab˦Bd:D$!Q7܁B/T
2z}Zl1%)k6ĤD$$$	$w
iALȣb285K9޾n'kg$ 	Zlq
WNKk
!D	,8/%&1`ù(ćI#Z'HI>) D`fٔ4\B05nqs8oJqrf;520U%4y3婴	b.$"R@JYY v=z]r͚qS#fzxYUkӞĖ"UvFcdy"F&Fڬ1Xcaq°3fG țrBI0+Bi6\.H¼jAVُ^HB凮۽v.h˕ms-o&9Xuek\+
!Ȉb㌹.Qَ4JRjѬUbZ=w8!Z&Uv@`p|BfOV{LRODP*Dk|/B#UH1}< l?jBږ̮bbI)\bfFvm|]iOiqt*ЧчFPiR'9!z嵺Ƙm8YTN"(869	&a.#a0yCFpOQh&p0iuNxdaپ+_X1qSߨidXD0A;l
5%]o8KZz:m"U*Q9)`~+Fѓs!""=Dq`R>0BPbi12X#AzjAB@% $Jii?InOMۥrӮ!.ɷ@HkoA?JqJ$1X_SCKC@8NM@qC:3VgXĨR5Uhom,$VC$;4}`62.S7.-@Pms(αi(Ll5W"pU""#z	pU'tIhRi$!6>HxG5QEa>s;4`֔OvW4G9ڌra!"NҢIBɁyq1#X"$3[mH{HZW߬kFM,aT4 A""Q :iHV !?'$'/r"+c7lAf~6yeml!nq@ѳ׎/㔲=L["!Z8(aVĄKiX7ݓbToS;L?fDro\głdAp2
'9P-d>Hٙt,Rj!F5U
T!qP(HmztӠSHUhdV!6Nf(JKt@oRLHZBY_JJY;4؆f#
*.Pch/zXJd	bʥ2^HdR#0u_E
E_阞m$JJg0hR2ff};B1`"jUhћk-j-cJ4j[%jk3P34EʭƖZPX|45H8)HB}4b'2Fr I#6I=naCHs vDQRi}j=SVTQo&l#h6Tq^)xz$܍aU134fyY<^^Wf䖢` j&ZYC;*ydt"	`Aa^B%4rS;@#͗#3PF@!j;EB!4&aO2M6ٖD>F>S|CwApAxig-ϟ >2BB%*>n[RbL)/tkj21C$jUOuBj(@逭,"%[C%H!F$'Jޞfcvmhp;MD%]rumjN!mRPhpeeKsruPTcVJوF\
F$wZcѦAhoi #M(Յ.L+j]cVk&ު-=9f|ܜy9P.=ЎTS̸FPLqyh(TH}<*:3GF;3!Z|WQ^ &1ܙ;}7	ٚDEuNS+߀!eAbQ@n~UV]aܘ.0uf'ud:yVfigMfڌM;|8VQ.LW~6ܔnk@2Qz酽(&khFC-0{kf-~|od-\?yZY3=p/!3&DߐZN"Y?w^%qc9.WZ5wsp"Xi

nJ9Lj3b'3s1ӋS$Jg6xwq0C`Gt^13XzeT>zHJOt6>?)fjr
nץ	xfc
tϟ5̟f-"5=iHM8cN_CKWM2B%߮A=un촟	A+D#xz5#+jVEݽJ>a؜Û­+[R_Y'NSONf;
6Ma^BLxJugu0s~iu~
曞~f:cI_Z'QvfC5%>^
xb-Y=P1d޴>s l"uD.2cf`]eGl5,z:ʛmRm=upD|^MAP9pS		K2|}Á+CiY
 Q\$Y(~%;aU97#CܓAJ tw6LXxdDO4D=s/#άޔ}q=/fIR{~u/!yZ#V
#Mj [ 64GƆp̓D6!˙۳~Q<=0Y칸4ȻAR*	AD6>&gYF)PU׈:Np#j
m
MkQZjV6NQxg侀.bEdKjj}C}mǧCbG3
G=ьK{D ZpCxwY]Ltzjlb~s{#RS:6z$=pY;JM }S\e	v0HmWH$]Mo:ip=sA>%7zlebho
稉툠bP|p~ 74:q8p#3k1b
D7``}]YDo3V;M#I	;
Dzx{6sQ}Hf{{PABїF ZĒ
gk.Nsh<)$靣Re.*3砼3NͶa+L0Bf;sOh==N8LTb5/lv1
WBpfm+JUUYx(򱬐(J~ҀZCkVN6wup >o͋iBqIa~m8`3_.@2s$G¨C:ԐsT,֏o 4,M }d	*%Ay^kq;-WmS*6lbKU[ivmJ]WuCIm-L]Ǜxw\ijbE>BɆ3SLzt?޿p3$$%-}[c:Qa*S;Q'n+A;M8[Au=u~nv%m5Myӷ+P s@=XB%U) δTJ;w3M]mG?;pjUfǧ<}%I#t=e@붷VL'w^׶-\&E`m6Bƥ%TL	Y
0֜% 5q.6Pֲ
5e;N]>hCCr*oٻJc!&cGs6
KI	
LD#A!TsM9 &[ysݠQ@̍01eLEZH64+$H@Gv}trMg@keD)
 {V]!웽AWw>޵BZ, iD&;+WQME|AjhS/ޙHPJjו@˿@]V3D#Gwi~'v>ޮĻ|#37s8έEn~1n}t$"v%5'cl(^>}eB("b&B)C,d_CGn?״FD8qӗ5=|êG^8A @̻`6=cG.gOB:X.M̙7bɗo׈8Qx/-8lqB|ϨɿY%%NmK)xŤ'hҭn}fSKb75.䜱I~6'+0g/o[m}Q}p<Cb!КdIܻob'[cSz>sv'!#fdAatzs*Y@ANjL+@^e"w@z1ۖ!8dJ@8ЁPc=RDLHxXLC`ގ~ǯ)1v6꪿
']C]^Ӧj7E'b%܅uvQ{*9UUJ1Ϯp+VG6rhi#F94ĢAA
Kֶ4P6=k^'#frCi
4(AGFkҟ;	Pل*=#z@bQdRG=57֗nmhdƖ3|#)eE.)2=R SEv̬%3|Y1/T	AHp蓝P5Feų72QU@I܏ؾOuͭL&)5TimQ12ĵ5lV6e)$B 	ZJm@x#@!)[JK@iѲiZjԙG͕z!#ۦpG I$|Sm&@3 =pmKB(NR;VGB@" I _6Dh&=a4G#F.k@iXܔiՓ֙`$Bc#Xҷ=#gO9ݴFE9mt
mB
G#crjB~9zn0D9gV nʀ|ߢA.y723uE#d|bBp
q2R9 oq
Ϗ뷒*"d ^ˁD8AtXWm l$P?e~o^Q"|)_7bՔ!ݞnG(daʐh(Š3bM͓wGbxέrw4NL47"֩"#m9%IWםy<>Zھ-iN;W(%I!I5v#˝Ή[w{u
懆U!REGƸ:&E
2vl;ބ-2(='i v)"ةh>(
b(et1D;y!=p쎤`BHgϋm@ٺi9\^b6(KA܈E~ep}0nmh=*LJ$#zHLM)G_I]/	
	f=ۖe:+;-AuࡣR
4IjccpN?zH$q'%+%*HԨdHHpG2Q1bL۹f'Śz-W0>"4$#	Ԫdudf1@)YweeQg<U#ނ%|:F@Y)ܥeγlՆ)#@En8Y8`uް$19a['K|%qq?baP"s%
~\oV!ʁ7gvmm
QJ5kH@Ed0಍VV]dFsM׈\
lluH-qiFx/g
PTTHIɕj`&6Aa8ʡ764$Uqu#64c۵|q'V-h
mIki6
ldFZ-5ڛi!0$HqlD
hT	CS
ۑe$Nƙ`tpvH6F\(t#<캻8LA
J#2|hБ!6Lp[b7o6N?N Na(WT87!	lb%dMV҃kAr
YXeRZ%Nm_U1z[mэnMf-:*0 xKKC9x0G3	o=~S733*i|[m0$DllũDBY27J+7eWE<"ASq1?Lj$1AFa<RCUgT(i|dʈQH"fܵ`Su=O!ӇۙT!5G&IY!mzF,A tdAG<DNsרqA̕.-'AR|30x&aS잗e|r8^<)~k{-l:	%nY=+}t+!n?J@{Dn\¿T/<g㛋ϾP{mXՒ=WkhOC}0W}S[9?Qq9&x?)b'e pbqHZo8`@n
Ik@&T{|;hvh>)x7zn쭴.tk|G
L,'XGOĘ{=njA$y3"x[Wƚ E.Ě>$0ɼx'n\7)9>Ơj7.K;N^=3b*%e'*Պs뗆@}O=/"g>5 QN",6DCkQS3/YW_wnANlBH@(Ax[BĚyfS"W5^+3MH5̕hTGٯ9+*B9nUښY(o|73Іsv*uΈT 0tU:'An}?Q
34o{moLQ
¬|:)3>HHO~apZn8RG"*Ld-&1BL۳r TD&*
W%Qwn}E.Z^WnhJ2?v֦TUEDJQ0e!"549BK[ma,SJj6#ΆsT~}07|L30LIPD-"с%YZa|'QVȄ`$4$HDkcXD^0 7LfLIjbdE`@XRh^!>,UxoTlwlu'da1{}6E;0QJXlML0#!ȓB&Y|\HZ{ԑbh_ffn0ehI FE r!İo*{rzs醡n
v	H*9,3snF
>5M']!#~7^[ 8|5zu9S ;ceqt@w-$=Z0_4DY$S-~~W=-i$UN`Gvྀ6 ?bp.V!
D*Y
&[%‘I%aKK2؉M[޷eX0Rj"lcb1|2mTЄ:BG(	Ā@B.	'	ELX	l/u"mϲhPJlPFQsD)ˌ_ﺚ@wD
|4*EE*BFY+bǒ (w8(' 	6j&H'CIcpcf( QD!"i
݊5!On֓Z	S䟳6^H].WwOCB[@3;I3/8K0V7jm6ڣ}ɲ{4ȯ!J*Z(*ڞla}ܻ+@kP&`mMyTHn&VLн;0	cXٲu|/vmм$;(ieN^Ab2U&+7u5dPOa>n	tolC:R։h6.~(nlIxԁ$ySwR>u7㼳&v)u|sIng?>n2tb`0J;ݣCמ
nm>-8e)j3(K:;;5 H|a ,aKWHHm&+~GDt	tFs}%u'kk$ʚXi| y;l/g=;bU_yoc4n8ZJ-Ѭ4J}J[OPtHcO
rӧȬf)6݄
2K#^qGW:)KJoLY8P.|Dcax|2ev,WXXu>6bnj7a+N0!I\ycs4`Bwff4BE߃րj:-8lvp\*xލx}
pq㗹3Vgn$,?z&8džbnANBHLʼl;AU-W)voG3XKK϶-󃝣Ns{B-IFTlN=[
524dn
躴CK3Wn[YSB9k2Տyˠrݖ;$v&FAk!hUh!S@
CLR0ݏ)C,t=8ly`XF=3s<<
'Io8A͚P,{]c[w78|=$휵xa۔ܷ_|9k	}_o$DeHHB6Do[^"I=0\@aߌ*ĉG{}ƅ9#G/fXt5_c]	f}60PlY4iiN`|yz]chl^[@9^Twp:g/7"YJdBg_v)Vie˾k
DR2JƂI#BImcR]HQ=tY9 =kOG~9O,.mhZFS$+%EoԸ݆ojTQ;dm+£S&î85fU)bQ=B(
)A#2tv[f{rӯ*JeѷCۿ(]9;tFʴ:gKc6ipzA"fttA>I$
'3fe
.ƒ"dfXÁV-TX A%ѭ{b)C{yѥKTEqIT(c5pS,DlmR%Ui;1=[Uxo
>Q{Bmr@7DK.w^z//zX HFIIXlS흌qZ]dٚ x1\qIʂI	
6 kAVy;9cFu7B5p
/uA_dC0u4q-dX?kP+ZM>j_TT;@+Q "K$ZTzNpejȏn+rv@ (U7w:NyY58$%cۿ΀"#)DGo	 3;0`2
0>PNO9R xiZєEeg*P-R]V8*ͱBWbt̓/	^k7rYM}KM>h|5X'Ə_h9GQznHw8p˼Y@D9}K,84`@M93׌KcxAG0F6!$$aSJ/{+e| 錀"uF !;NA>S pg2	<f:	naW]΢}"н}>'^sR%
-QJh@x]w$Gx>\kH%EBBb*
7h;jZ0dB
hޞ[ǿ5ͪUCA)cw@-iڶ_s=)YT3bfe[KdC71Mm-6@	lg4ji2TPl_Ѽ_Olo7/9Y!u
׌*8A)6U
D! *(w@P5(ϤC:yBC)wEU
m-Վ@2\7ڽߧ3s2"T/
8
e&qtIf9:T0N¾ǹ>cd焐>85K ׊@qw;(FULe{NP6
8&_+#;y䶛FcCݼlǫK^<$u
.i*:-1 D
	Z"
LQt/@h"Ybma]
<΋GZ+D=.ƞ¦rɹ;^^:G5?kA~fRbީ֫u+\=N@qA%	c"`#XKImT$'!lc[is%KjaDp.Nl^o#l%Foa`aXQ+ GzV4;ula+\;w7;,#hC>gDH>kF9̏`R3NsQĻ]o'sl 吝\.#wlj7L(\(Cy*_dfUUV&1kݥcPPz]0PMj.VfoV{ƥ؈fշ-+TPLF1 zbb7B
[#0d>8i*lx{V`\y#Ro3{	j0mնc4 Bv}	!ÆcZo]n[$&!$&~^?30|8vW@EE$M%&TRVmZ9a2B`(Ƅrtho-@jDp/K
)=ԙw%O^=GY;ߧ9GvpΰpKbhI$4$؞e7}[#H8DHJw҃BpFl +hDlȓRfѪksS"O}'&َpI"RpPj=ëW_CM]\{N.f36h&/0<:дtMBbZH{WSl϶VKGP}|ƃ^c&F&|cL#{Ly>.~stgJ%׀3^'4	nXid
=P`lh7[X,̓YLs
j-f0X)cHT~0x ;@@'*[#c8KB SdT_$_9	yZWf似.q*us(mDis[31$eknz:6̤k+M_Kz5sH#_ͻO/Z<
zPz4w1P")$@V<4+%yp9-$5)R%;d˵T`O$
,(G:.?q+{NxrLBqCDb"lJGYN@x;l?"CE:-/sD1Jmx2f^CSDeKHeOSjkjM7yd8] lS~Mx)b\_DX~W3=i%5X|\A)S:"wrVǐzXMX׊<=r]IH[^/d#Wm{6_WlsH/[URRc+NW&$.?%WzuI5e$g6inO+zQLl{	H6άs1yQڹѵX~ɏ_<=Qg{#=n_33M
6e\)ןeJJʀ)kpDvd$$@LԵ&W0v%Wi'L'd§ï
rįiQuj+``(YUצvNnڽ^[ΐvk冏^NG.:@1P"+c|{u*JO6d6s܄f$>;QV*3}"H|]+[i20ۢupkkYvX-2A&ɭd믝7QJ>==U㭊Gfx׬۬ǭ-9--m5Amn5Jt8נbۜY*%{֊ԍecl5ynk
O rHd(&37N`Hu#w`B@xx4нz`q&t!mnP层1dg|ڥjVfG&
pikQQ[~AMJkOMGqTc녢}VC1ԆcMg?\:Nf:ۮ,Thb*6Xxܮ}Y`-c"_]\aOn,-e<68ڃpo\$Z;CYsl7lWW4X73$[vh
aM~	}D2>nZ?aV9١_7PuJ$BiG)Z`#N6,fx@nN|+PΦq'\z
9b!1SM*ٶOg:^w!5jfl\2EOt?oVi`iYqRoˢ`7`yX_n
r8!%Ň9Vd&
ZE1O_3$mDz??>8P|^A2Pdy!
QyBL]6&g˾	b)m{uR%<#,nǣcr{)uaPuQ2ˮ"#HLX͐Wj7C,P#Z\	HkA'8##T	?8y
^쟒iJ(nޝ
kn.JbS!1-.DS{/ĤNwz 	;;S4C]'voh'U>#&mH*,LjDeckQAq"j
[T.VAl
X{k;4M?rOa+lsa9ea|MlIZH$"HByCea+~~MNٿ	p#2Ԁ@t8GȀX2?}}m~LmTbzpnf|00.|$O|jq
t:bK3A7g
zTp^0-Z෦)@ld(M5^}0yO	Ek|ΎŽz7d{+sieu{Z[>dO
̽1t>=MA_.[&Jnr֪xGl'|Ѡ>$>@|^zr
ZN|9qa^z0{ɪK!-HkPm&nY}ܚ\%2"dvSD׀ ^ե~FU[
-E=s"|Qo"R1À5IF:R儑TEL蹛u4[ݛ]M Rwf%: i`9y#"D;>?s}_BMz=PgMt@LH0g\'^kl|
a{ѡ$\Z/8AWz9 fq,xj`zb=	mJ?j\HѦF	Zwo.T*@܆}oY5}&.
5[@.E?
+'xˮMU/[
ȴf`@:s?4̆?uTX띎Qm&

9*ӾuEmd Y!5PXIc鵤aDM$S2W1Lo׽r䣝s;n$/ui'EdP,uSB3rp(Xu\pg_	.pk}4z/llP;dҀw'&͑ߑ7=߻
"=M}9C-HR:{DGaAKY" 	ptP
!D=yMRDK!ŤXcEޚ&q{h7/y^q\P,I0eb)m,z݊;#/cIbJ
,2GI0GIFMwISh?Ra `k\wm.gGՇCHbv`yX2vl!I9]|>@/EJ%mBG4!08^[ѧu(SdByx}nHd(w?("	)HB\Uϼ_Ɉz<>YTli5\NDP[,7p+-K}L~Nc
mD/*0wES?Iת]tHBP:xR /YW-1416hg%=JA(y=Å 9?d	k75Xor c$BrքӡiD#/KQEB'b()&g6POn<ؾ!A )
A*V:n5[L	LS4n݆$wy||04jm1wumy{}xQSt5I%(X?>P>IpNP! 4Ch.E*"-ȵHLLf)hYHEC%j_5jq<aSjK!SөjC1B2oJ[G 9ݦOpŘn+CMk	
@ycLv;Ēa2S{y^5]C	O&k,LWZOgku+i6d/gCmlZ*5j%%_kl!4ɵe^V,]:_)ؠ_Ni@1.>hEd!COxԱot"cB
dEN#)ft<ل%-+oΏ:r%'IBP0'c-,
gFϷidJ_Ws!0N"H
~Z؍>5wP~~i-)Pzb+|U]h	Hcu6	1bJ`9>H)KA=M:;pVܵK&0
y9\?lqDZ	,!QXd)-\W.@?dPSYᡬE5)p˨ivz&knrfiP+]DR]\Ee(C? \$#Ҏ"m|<rBO8r__sLZk R*葁A48$O@U9ǯ>yoJ(e\B.
xs\<c&	G(_r@v`=ڠ#ةdQSyXxBVwTy= !"֞>IZqxصCp[""P2\B)F)-p+RHK1֢AFR69m6jFn/RH_B(S@(/0W֭|F--L٭ǀI!	Cߟ¾&-mm	A$B5}zMnHjVҚڳ-R	+$*+" B
(b"#ERb B:md[)UdHBT`HFbXP<ځzf>X!{vM;KhfiS*5<O"hzbH@z9ҽOL`Hw={ZcrI=x𖴅-5Cl(1b>׿uPX,z2hz@AwnPL3Ouw]E@r}VFE'}h
}|":N#Il[Gevn%+oz.hjDN⃲hV-U}5-ij"3l0QUM,
bO$#pۆ\ܛv90ff l n|ւv;zmaɔ+RVx6KzzjLcr&rIk^]}IP"K[Uo%h`BdNp`#7)hIf]R&R7@?'<	x>
w~npH|>\CAT7 unTQ_"xS>wD:a=*w!Vu)񚙆*(/Cp!j%0"ffh쉨*u
A)_$@PFOqi[K{T:E$d $gRx0Q"6:N$P,Z@H1M0$a>0:>T$IuLh@IcE< $"AcaMƒ* ,ʉGB`lP?J6NDz{Ò
rGφn
pGWD5_}A_BQ||vMPXP@/(A9
rDp')*@}q;Be?J}APNXd* "\(>(f⛪wA{5M5Tq77;<*P^H2
H
n/~uo"k{eyޗu^Τ-@-3#)r%@69Aj0t"`7<$qtP93V@ÂP<d3g]@/eVx
DDp*n>!p
թnjFEiVFF0 X{}oGO#PJMҺb"m.8@@m-#(E>CLGiNֲ7͖d6۶lH	˙Ap25U#R&@hC%Ih'%XBXCĖTs&48'3r%P($mUj*r5-حhJRU[<(J*VIdљm-'"*!U!!;
n9|Q?d;B]?	MaD
_y%~ߋG7[81R)&gC:/2\/x4ġlt!!!"H)$?Wqֵ]2?ѪԨ{?cQy),goR&̲ETg.L:HI0q˞T)&QdpW
Z0l3pNS$a%-7W4v']n·2BYkhtEIKd:UE=.Z{|x@;v3u%^QE_^EpH1beworo%Af0$Fb_cqm{TNn	=T#7:{_/+@>1w񓖽<Խ=;{U#	Ě1_ksnxι0MeFS
ؙx#'b9-Ki!v/oz\CW;SF	3[pP9?*WO$Yx1`66scG7UpF(eA$q:lv4tPNK)7%|>cmL4mCf|[k%0`6,ƞDg[cmAϹqzT>P2V
o]
ξ	Mi)?!d~;m'ZZϰAi%ά,ccHiJԸѲ{G2"oY{3n(}R둍N2 *v5SZ>7d$Re"ޕA͝vtɕjM]$)8!eurtc]REA2i
wM!vs9}v(]"Az&nubw̥y$_dG,|(+D&[~3,ys r6D-U˵K$=t#3wfWϫtCh^xJQ=;
^$|kEiVVJ-ə4{O['F~3b7̿N#E0H5WY"`ٶ/׃2þ4Á?|D
J}f$3ijoFYLܝӻx;ElY]6)\qQslŀτ)?J]553>lo8l?L}pt)t3wtkz
~̛xv[RnOϓSv^ӆZQQzfճՋj@̋r1yw2dTDZ&4CT^~&y] }&6Hw}1CZ,t5_WwST9]HIqPZɐ>Dun7SܨhEփ\8V7Ӈq	$d$ʀr&Yi%ٜ.hN(d&:S\h'4~9d#;&7Erk4Xƹ"IiR382b1d&+b+6|ౕy|8Pb$wHJh-on{t芝/!PT8 LQ=i”Z/mm,Q6]/&p2(?3rMaوvbC8rG}=/m2şs_{yNy2*|[ps1RÛ#Y<[|άPڒ)He骂4f\)&aWd6(0,nz=W0lbxNRQZu''zR$I$\*
]C	޹}c/vդ^(M*\iwIq|Zoܺiө/xޱvkbKNpBjѥ2C5LZ];q(
?vԂMaܬ#'Es3<3qp:׫4Ԗ<qK
JH|AURs~h)L{r&Iu$p5Sk;F9i GvWа0:x
ɏjЦwR-I3MsB(fP~
aYY>X̔9x/%dmvBL{
k]6{>'LtN@Wq6͎c@xϳfXIk9_uLFJRW+_!n~$a!vz24xoHtTߡ
5aǯ"hdžr7-G"{k60}M(B_i2/R8KĖHƇ$+, _3GPXɗ+߸}Ad
Q_\{iDe QEh5ZpsƣEc/]$e|CZ*--\}ͷ[DE׻6TZ(ֿYɐ	7=9Ln=b_H!e|WDy7PLf/bqgV7qecZgLdNlÛ7ëR'o&n}4Mu
PG5M+SC
Q_],[C7%g6[^9kg^cns7VM:gdlurکeI$o^:גTA!#
.:2p`㓱ѥF!4X+7yy1k&Eť['.旌k|w"VFn2y"TE
(ثƼ33PzJCfo|ZXZ$2Q}?ݼm~
ŎhуTd[(,0+СF^=H'_E^sW2y'7X72X圩~3C
韞B2F-Nдڨmq#ڞpt72'Gg
2W=v8M]ͬ%I>8tle}JOY^	|MrH
^b 1R(CK;~͛~#d	[=
"d3^M96sٕ
BC9'2d!=SzJ`:{P-j۫,_71gvJxKҎ_E%M|4؜2gtcNJ\6
;TQ)1f$6IpHJI3EBTwo7KWQ
C*Y@CȮ:Nq^W:VfLDj5/:Dqum+jHZZ.شW)L!$B8@OΒBp|0
1,$EBHJ|y+|V\ɨ^`؉dGs<-㉆]yK)>*!E5
zjBf#ISgfGg	]4p^Trn=F?vEY}Z)>u`LG=[7銵Y
٥DM$x4a
tZCnaE~ScE8hݢGB3^!wN'p:Zq$Lb!'?Y!mIq3ٛ4祩	#93-Q
^btɊ|~vo.׏yQQ= Ƿ2L=ߡ:o}Ap~90lqrAa&9IdB 8>c{{]G)ǧhil*Wq	d&jCA%bdKa\/z36-۩rM&&=IHDMʽ)O3.!.lkCc tYNw4n31Ŗ؅MlӉNg)~b뎛 LXE֕~U&O]BE>{3A>ץ
6Lݿ%v^t۸%P([¾ERHtQרzCLm;-qK[o~H/Kb[_kE"#t&[(\9Qh hsH'&T'"9x(+\'mlAnzҁX[v,FhpEٻaYH	ѠHw;6 L5
id}I	!ER[!Vy	k;B	i%խ)gFtŒd	HFd~uգPmDN8U;In8U(=>taO5Pd(8Xq4)2ڙmb3"VlpZX9$B0C4on>zCeP#C^`&va\'M
G	(M
(cxtמF.G~.F1*{QwpC}`̤HixBr4d_	$JYe
67O&>k㧺a,}ȫF*R_/pL!-IQPfDqYKDKÔqlk)R6&XeRtTBI7od
K$I%#Ɨ4cC`6ϗR2mDO=ڝboh0JqICv	~)
UrpФT
ZxsV/|Py1c##B-rͦl+
nq`@0·qR6A
))PF~ԴT0ɥ4iיV#˒Lxh&d!N4HhnYko8tWDvtVMJIiyhb{ի$.YHAx
ټ(=Q֪Sژsmm.l.ZT@D;CSUEM0`+\ٸk?ڲ3E^U|UEx'Hd=x^W(ddpGٳ-V-.wu-vqd~0w'c+d&
,$7ۀF[nFw}N}^z=c+dX
EQ:܏f]w$9rz0pBcYM>^~v̑*Oء&A7=lށp3e>գaM
`͐l`x3Hu=j}KGBQ4v;ؗ)9^\٣Xf ~hh=c:8kڵy5EV,IĴM@}kN-hbxAyt@"xB8O$Ktk:zT+$\E/҃OD%9EDNd-uCv'Y.28L[2C|r{dXcuf;ݚ7VL͓-H(0|Q|O&;ɦ%i>E`65YЍOHRf"CQ`Qk#.HM%vJ:g?Ej
ZtâVz恏
zT>.uO†6H4_bh}ZT2fEqN @rvG.pӣ|!_Fv~l2pWkvj[o䬽!r{1uĜQ6(n@.%|	9T9dnB81ʏlwps-&m氇9L;bpzՉk=i0/yئeMs_	$0A}v Ls4bW!Uy
0Xr
tKiDPAyqTG33vƻv_n6j4Fch{&eg?u`۷
tS=OHvMNNXq
Kk밯bn3JHiZ?[  .1oYRVn`gx9; 28;$ނ='ͺDL4$^pDo9@>CEu(@i,6d-M,:6G_cڑrsu񿸲}bXil*ҐIX='Lh.R}oe,#q1vsV(9i1#
v
gJ"ϡpɇ~% Y7,tMI|#]Sdpkrti8EJ$$#㆘{=8rˆDJe/BPի|mj-Y	!=wKѵ==OX>%,7yYzP_:Qa	1f*4̽n#ۢgLR^INt7I{%eq$DQ7>N7w'wYFG.~bVTr9(ΘBe/"*s=%z:ggHcA299\9羻w}5#F?FK'.z&]q
`kW' s=a5"3[2gBBm<ɑu3#"&A.W2O+ї̠kÑKe5|͟^ϓ(M*ڧєmZM*%qX(<} T(>rN˙/{d	s¤p2,{ DLN
*14cC^$A=#YbCj
I?uiCbMvmX	2B=	",cF 1*,9ߝ@n~-AUwڛޯ](JݝNE
v
;yyi
$,Pi2G]4ר=Y/ZWE12.}V_!Prrn.ȃRV$݀pNG2W) BTYP
`1H?o1kW<}A;xvPOPXj8hѲk$[16k"?hWZ:\۟6I?rM1`{dҬ9)+T1x$"Ӗ
2͌2
cQ>UtQ.qOqNiNJdIJiS
Ugg!$a2}u}.G\HOHAk"_޽j0	T ai*Qg_{4k#S™嗠T7ͶGH]ĻRmmk
x,r8է惂tē3w`7Qb+^ٴ|6Թ2
P
QT24 p
PEH]dt CdrYɫ&{=341$ИLH.sn#P(?7h	UP] d6NTd(BN_-3S^GئOʹ.ZyR,0zBTgJ=P)lӤ.
V`rbEA/.Q5!#"v=7vbFE-
}F=4L"&/HDaSea1d(vĩ\}:Dõ*ցc`ϏcM}nid9rhmC'l8pcWBdl9i7FbҢG"'[L8PתRG62A!7H$A2cGj6:us*mi֛ňL4kSneN(ZF^_M[_yxx6ز
>U;[QcF$[Cb՛BMO-);U:wcSٛc'nAX(`E;Jߩ-G3@>JV(i<ӳQb
dqdG=xM@9z{3-1L]͠M!ƒGk"Ё AA#ftBSx^) Ŷ>h~?c|ǹ[|ek7_L$k&,~???;S^WPZGaӯkMkEuΩ36<7|1xy"#۪k5drn־
T!4P,f<	UUBӾiU:˛㥞;q0U!vemv[e`Mbd!*ym|{uce1'GJ-
Ve6g@x)(R`~Dݥ6'-5kuh9bc6Vs9$k㳠fwqpz1Mf@*Mzk0P8xNE-ٳZ9\~3÷>(^}~
nӘwZ2)Ϙ9@=g7PIKC|p}a4Y
r ˺ML9BoN-kXu.噫9"jfH;V\m&>غ14qwUqS`Z6k"73jА1wu]po|4XT\b٘yE%6>QD	"+5iɕ;KF8Gp`L͗y7
b텷-i$R,KkCxSv- 7F*u&=-C﹣%PPvr>^㴵$XbS2@?H흳-јceuaYdҴlӱj]`ᘿ]>ǏoB$߀"	0! )-D
>x#UK:=v6Y0%0(l83t^	졧K=pL=!Fl[\t$-U썐'[oa[d\ʆ!!ZB--cpwBtx	BUjHe42N;.9rъxkxB03	IJp|wA3̔1E$ar7\w_t%FI#Wsnnww^:묕Nh7I+3hЏ/i0ER=ncv'
AIpIMනLrYvW:3!%pFvq7́gQ
ӏab%7ೢ7H!]}Eɵ)aY;$Ydng+fUػ#N6 "!S7WBCh!Zd;0Cah=QC
N7C<妭F!pnPڂ5Xp)3(,.UOƂm.ʑ.,FAg=T[NPġ1djEB{~8,xk[~6gWY(
ɘ烒B4tڭIBBN/h1]{0UۤM'6H^1X7L:a#l.$Jb&ٍZ=BS%;˧R+:PwQO0˓cd&IM{UC(3s'#p
ĸo]mloqY78vrćQ*{
H"x9kQ6
\PLθzx\fͨ)z43FlDpO
=J#iq2KcxHsg`”H'[9c^\+(W?=ذ_$!#?7=l\v7Fxmy9q8K?4*UDtՙqD$I˘MKjD$ax4J@Yb lrmPʩ#nDE/[dz- Q&XUE="ftz
bd_0qOPWn`e%
>k|LBLiow2Ϟo^U8'e	zAR^`bu;ۉ
0
ciLX͚clyS{kD]8m6VSYq1k2HBP`@w36Ҽu3ɛl7a	#*9	ikI;NVr/g$ꌶaeen@s	4;2Эu[5=.9I$A9ĉ?MOW(ZiR\jV41^fuvԢ&LKc&q"kG[(1(4	tkzZHcLk~xjz%C+b!짾t:_=ذ{ܛ9zfB{ʁX'9"swg<ΆXVA(6l1"D&^
#CSFS[ڻ@U=椺k&.Ġj{JbPHU<茋ZS͎3SS"'U	3t$!e~⳻k	ΝѳFD8v^S†p{t4d[La"Abc
 GxJ@BNӠpD}'40>T;F0~[vºp4K)zMءz`l	|*Nf	C :$veg>$7tS5'jܲ	5N&CpMɰPhRj3&$6R;@4=?'uaMp3ƱrLHH6;2@(!R)<fo~Ĝrkba
:Cojc7n(lI%dnp2.k!, X&lWAD2
#қw,Dc#S{3n܇88^ER'T҃d>'b(%BW+{K,"
O[,scyd]PWI8C'_FX<Mu#,U(RuṈtRU\Ȕ=&7V'
14*j`0Q[QNvS-Qd`+f"Vb
X9TX4.=$Gib
آ}yCXc/Ho&nCoAl|rkdR@՚CxJɪ
hYK_Gÿ
QUon)fE;Z3&
Ӥ$2FI6>uA()]!I8]iiMuي1SD=XgVwZzػdT>4׎mү2eݏӐ{bؓUn_E׽=LLSp>P&Jr%AI3犢#,
jN٦IFӼJt
(,^x1F됈j.w]r([Z~>R}j|9	{ko[/
%B"f3oD6rQ	Ŧ#-S
IqkbnAr7"6'}	#N[M8t0Q.P3##o(̓EC-2: =Y_glt%$d2ԗNBKs>qAbZ'.è|lEfoTj|66cN=W3wV*ZEP`
Zlj]@;15.@c]''uBdAcHS`/la*vcbObFM)bAϘ{i|O7*z!bS:%U߹dxG238qyfv}`3
_]>8bb߁eh3+6wj
Lɓn/cx/vRa/$OId/$隭Шh=,%(l,4ȜpqVdP6ٚI&9#)ĩ삉guB4GtxRJH>Nj4/kPj;~F5]ZkC!"Q]K80
chcDat**ڰVcUYܩg7)k0ao_v!P0E}s3䏤fXgԎVY%VB
P"bet&ȕŸa*Ԡ<2чe\$(a$9emս=`.ړTE'd19͛a8@$ъqQF.90`OOp<
Lܼ6[L
TZIn/ c%tboJlI_XvOˡ%BBKГ!$zp=@(mL0_[C;
(v'A+D"{mPٛF\&%q	iMQl?SO#(IF
^Z31XW4[%Ϳ3̘6;EQX&&HHdͧ<]O>?z~m>;&ۣa,3XFXy/ZΣC"cWN>fo~fvL݄p{B7gX!0}1Cwfljd^7whlߕ}f禾7~\oj0uOwzNܹ="0Vѕ|ɧv8nݳ[fN9JsRWi77jsy!%p{Sl~
W6xʔ}᩷k$s,B{^Sl}>jCϻ[\ۥ~acL/duwa07h}7\ۨ//;|aKu6_ז7.NzOwrܡbm<>_O0߻.6IGKL)&
;b*\ׁ_mO˻
{-]Y/V_=GG>'	r76q|wͷ&sHܩL];#_egۦ2
Xy[䃣pחi8'7U&R8'0UA	Q6uYuUC27Awo-_6k,gi4
d:a4ʷ<P!d@2F~4m87.
93Cn70&Qfl`GEZ4OC7IUe'QDa+U9%ί
*)b?%>-,2!&'GqD;YhG[ZHʅE"8]u
ը!^LOcG%89ykOnC8eNGe6chO{1N61Lx$hp:7]*=*}'{ߒF,8%j[l&i{ N
QKxM_}:9NA:KMA0z` ҈%tt 'B0盪{w/_P"|3b{O}~[9:Gfm^.\x,aVTRGE
IP&ʌmNF0욿V>呥B(VSҽU֑qrXj[%Wo}1$"DF!>.	_J[w|s7jUlӇ15	cy_J,m^FH1l՘ԡڣ+*%nɮdJ$y5{{J~[Km!
zC-hZ/H̶`ɦ>v8.QVC:Cl8{Zؖb&򭝀os392o-r::#dL/j[dwyD7Ucub#Q+
ãZ[
{[
2


f/P	q
Iah`9 Y8.`6ժ_-sZփ O@0(+L4`.]1Mb'\3A~h1pCarǮq4Zv41=[4D~+rL؋<aM|72#ﭖA;%v4Åy{~tHA>9xem(H((<`RPAa4OtݍUݡ!"	P|a C#3?z55%/jy]Y{73=QNBi7ڌPG)-" c0Ŗ,ldzxfvlR5CcϜV@5pf@zBՍf#M
93R4
}q<7$H?`OGg08y0sks%6qc=lM:nU"BSrhpz2p57[[z,C`={|ds
ȸdo!ɸyFytv9B[z6w|OFHNAvFUN*vh_ǪzŒCaLvcJQw)(#î
o
v]׽NwAyNs1ű."⮡p
ķͺ̖MkP.&5!t}\G,].\s-ozxTz+D`<P}"a7Ut/l&&髪h4",q_enHI!){V!T˪d	Ύ)g
jų%:-~Ij@KVٴdBV4zU/SPJKl5&3[$`7= cA$NFo_wpH`mNߟq44
3֚-ej\$FG"#zg PkZ6l3Mf%A씨/PNYb0X-	`\'R@Φ<&'K:O`d,b:웇jSF0A`߿k"Vk9>p&	 4;Jz5fma
/ջD"V.5C@bPJac@"ͨ}3s?sNsZl`0ꐒB\5u<kF׸lt|/ӺN3ny7Z:


eupBH͂'0#F
C 1zja?颁[ؘ"ºB8|mܭ0%-rL//o"F{9\/FPt.@8C'A{\4[S@4ҏ|DžR`}l>'tݱx:߾a:bsdýqDACSG!uhׄ4P#=URPHP(.8(uPoGg	쬷MSQ>g|~㖰"noMBg%ٲUR~dE?w
(#wkYE"UVʽo;J2Nep&wVEv~6-J{젏XF; 3G`YaLZW2:|T	SKgֆy4vXt/EEӞ2rXeܓ}hu!{yHǮW˥<;g)BLntipDΧb;.竻{m mx.D_7~Y۝ֱ}{c׫\(vM4k߾(x㗖
"թMnB\1ܫҖl&)v4`Hmdžksݡۄ\ӃwV
1ŐwmP=NQDda9vCjҷc+_gG@N~b((۴`8ӽN&GS J/ģ[.(/l\8{_$ R<"H#.Ã'\Vޞfs f9\|3a{DdYu}i#B%oǙY_qٱ2%_kEUK0rG/	mxC˦ٛ3c=kc'1ͥgg70ݗ7<ěJo5ϝH%۪n;ɹW%$5']+~Wo&8>LW5.06HU\YKSJ3esiHz"m1K_pp2=7ol;E#ckeǷ~[Fk{9bbԝZn:V,8[ޣwv-bnn٣WymL|˥3|>vsn
w3giKL&֦$"a<8wBl_AzUE[?kHJĒ&.XPfaEP@1@Aí$dJ9J0dbA
jLp'
))f&%4aa04c9eUBĐ
-$n/J.08>Nׇ9*+%W̭M'uN)i~"[us){L[[k\P'J'Xk6>6̝֤jbIӰ;zqelW
/+xO[[mN,bE+VKTk4!LfBL=7ix1Ϝб{G,EE;Dִڈ+J^j)1ڸYQ*m]Ke&kSYu{@2()FXL60'JmmkUOKQ]lRҚ1Z&뚎)a8ݱkR\Tʵ--a,.5߄h7Wϳ33jT|m!Z֦wX\W;,MZe
LmM)þbޛ%g9{j<I'RtUh;kEm7YȾJB ",2.@ 1zM
. SdJD22ZRQ)%	eRX)1%1a
G`Xe
PIe\2Uđe`qep%,iV))	`!ihJFV()
PJhV(B)DZ~^* @6
R%< 	GE9@	Hsi<3 tb`_mX#x$b1.nأ2N^y,PFzV
!b5aM:r`qx.dĨK@uv<ϰ[;’
dۀ7Ps9Ӵ+9;uw{xC0J#8&i?kq9A5+/'XHEU@QݓzEzxvW-PQpTB&#(T
V~dcDo#Mޮ9xYV~gzrH
D2悽(fxO`|EKp>Xc =nYwcBTXs{/DL);'2hk;K
mJł3ݸ|2Tۜѿxy5mlNVqcd,HPe=TuM[C$.r>Volkwly=_o,eܨKw`FH?kU|~vE )dOщY>q8+r|]*;4)"΁T+č
`Ѹpd[k5(ۢ,O?]<=Eff紲2bZBKz'޹lP@Cì]ל5T3bܖ"OK}qZNmG`3~vH@/r>_4{>gzԁm/=/$j eu=!;]T@D7@W'$;oG%!eiԹW]P&ku@
 unف[D24N`5[&4nWkDob6H^`P9]"q8ߚW
<&mջq]bdҷ,ؼ 	J\Nd*cGNwI56Xf`fԠ14
oE.b{|@`0T.`c%Z@("Z
``
[)Kk*0,Mf h]dbF~TfV[. [Rm /REX 0fL8P1P,ps@;.u/5`
5
@KXu}>/Zrr+̬h;ϔTdВ=0	LVKB4ZȄ>I7~<^GyyιUX|BЏ|ZF(ʫ-у%(ܼudQ3YxHcqt)AIA @$HA+Jy3D3J
% eJ`>\gW4 uSi"s~VWaD]":%I`đ.YvवDBK!
B@4
D\ҡc`-*׸Jh^+NWp/L1`% Hޣ)avT# `8\m-m12Ν	 ws`8&fZ$Ijvylխ=?Jdd.+'cMCߡO}
N%c<[k矇罿CQLAUTw+RE_`pzZG(e+`Yq	c(h;-&:ߝ]N20*)ZI

honkd$|	:hyr?1%Pw<2[r/w7/4oOM>]3̃KnĨ"w]\23n*c7Ro%	(XU-RmwwSbY
 3H%+&&*fkEm0HL'šW(@lYdh@x xE"/!eP}ށftB!|QYA5/34:ަU܃V!㍓k'VXD/UdLutt_'_> >;v[AtzBvOD7BCDJB^$ *u|@ˉJkϚr$SA7$:yAJS@d)B,7y8we}ՆoYV>fªT(l%^ᾕ橠!c$S @Xz
9{{vs{0Cإj

}!51\hNjtdx4R@Ar:2wlSЙ:8BECʨv^
4ƞ7dˠU,T" oy#6X^O7%İlzLם@߅W_c2^\=Fx]Ol#di "P5ݣQ۫˱
zz[{}|ȁjw,EH
Bpә=P]:MMU9H$` tۢo07G@zD|xŋ~0v @h^6Sw\#LCHI$S $)E+݈;:R¤U	$mBـ3/1"ְ4uCv H.xX
bsMm!YWr:C	Ba8&pIL"XC7SKھzܺPja"P=B[J&p>LsE!'Ewu2w!6͋ǂyZ0,ߨע}@4[&sC5 4.hRJ(`hn3mM%)ehʮ&X	Gئ
+ň ׾x_\҆PH_B\ Ml	zKPQT2<0:'0jnx\Sl@1^ a҅ъ	8 t80CPP#oQP 7$	
'0S]D
b
Ae,B	P*
AGrG%"lDhC0bZ%5`iR `oim'hx>,NDEU=Ƕ"=N[ϣ`-=bSP)Ar qdX%yM\ň:TЊ-׈)Ax@8Y࡝+Ts`{9qܹ+fYn0xޓ&+lak+(q`q7cnmmy!pI$!
I@(l98l˛)7!,
5ͰZv&$1mkb4:T@6)[r]úiA8644&)FŭmB
B)e6#@GxY"&8@,9vBXf2pZ,B21*!f%Ӎi֫9]€%%zҺك/HȞsYY5Vj雂A1
L
ͯD(pTe$X8@4+QGHj]GD
c24@a&
dtWr$ъZDKX#72m @q2[wy-dACn׸#b91U%`;TCmsXi`^Csچp`ST%FFK`(:@Y`;RM8E@	>@rnPxޕ&AWkךCPzM`q]o{XPS 	Q)Qބ"եtREN5"eWf*5Bh*Z.m
>{܊CpXi@ C Id@)qNEPkQK°w6TJ`cCQIQSXWpO/Z3V)vM2PxB\A7ώa (p\Ÿ*ZhT9L~Z\n5V(lB>w&NyUuJ܅7SQ3nBn3TFm=b钍	jDd%Q
\l|h	uA4ؐ$(£%W<j)+;He{0h*fM,0Ȳb:03.ilCg~-I{\4%K#+ٗXZA-
&~ܬQb-^L/DӞ
HqzOlk0a)K}~-#P9ОܴZ#˷KhNPLRpv-C1xQ]I*z1Ną2?lfBg=hEq]~	n,հ[e7^-M1URu:x^]w(`@I5Ƞ05
*Hl8nD?\Hg,zF#
tՓԛ*R$ڨ[wDgJ
]n`IYs53O82caq}?z8c1fբ7|Yo0 0	D` i # b7m70 r@v
Vhf4+`mN|# w|۵Ò?
6B}/ɉ!E1n\稁C.*F
&X$IbXn$}k7YsޔP8wteR%L)`s܇Ck^,:˳;֕Y/Q)2["|6Ƿcyig	%/2]_Qm>a`Cضx.Р;GoFŇ
_v/-)p< |↷J% "XߜmU'#1B6@׊3]L]kwr<
NDnExhKXCe #喀ʻ.6+j ņ* Pp0ƸlP=Rؖg<{-A
{YL/Kځy]
2Mh@,
4$"ІݸsDLŤ=5Py`1p0ZbdB
w=:gA`SMM@x</6_@ǻv>hvC	bY`( )H"*%jb!#	oGP9C28	"I B
(!C5C&+E0HaX
bVUm!patf#,4p`%
t0x)#_<.PB>3)_ ʁ=LMV53ERe,w	]/F2(n_5n=xOp~y<'煵+֛;-3eBY}on_R
?.\4h@+XRim#Op)QW:]"vNe#$gHubuYm!B`&R[͠{O^X>@SH=FG$9z{ wd*(p0$ X0:zo4xxE9`s@&c;ҽ60@H-(,ž#~T0]a8C}b~krb7EP/0/WsA	
o4
o>4݈vqET$sD
=Mowias@r.EM	Lb,|X|zނ
ܷwPaYhZe(r@dIƇD::UN#7*@Ŋ<:<1Ҍ4])|Q/]D!'gO(rfiA/;[[uwI2#@Y#h;PܖпjgJ_L瀰"؈0	r/(%$U@#$$)T0"\7!H{ tH})C|o^EȃE
LW>'ZSP@ر_?O`Ԅ4nSb@\ሸUDڨXDBKBk!@c6OrBT[Kp8T!AcŃ7cҚLQ!!GHu4J[PY!	A@	K"
N2L&\uĬDn/A>%}u\:1LD5U&$o7L 橘CasSQc68:K#Ggab4bXM?Rl"H90U)p
qFf'4t=p N=/JNmz-=tR)p =L!cZa<`@
&\DL"޶ZX1
z\b
)/wWeϼ=RƺhC5Ln:	CCZ
@F4;q)(ChQcIhN%*oB bZ穦FDe/d7y#9|V#!5(Ϋ I! ThXW@ ݐM8
V.:B@Z>&FԊdK!j)*z$Z%kvл6
ۅ].b'st zTȊjRKbu1``\6e}5hTSr\F+uXb/<&y<\8
D/
HbL["M4|3mwSULOż46ظ{sC5̠1p7.,(%CLMmrUVR۝B(2SZpkLU݈fp.pYӔ7CA}rh{(,J(#bc34E"'[e1}xyW3A]*nPViv*r,h@AyA⥇03l1>2.榄!a,TeBP@o+ >ޖL°JKO]-$P#h޽gJ~'NBC
e7h}5ðUU'P/uӃwMG bB?[@i7	cäDP6BH)Alq"Zr6QpME}!E t*G|@s+؜@d\$.ޫVI&

ę$f.<㋹R6AH'J.C}A@gDŽ b'h0!zj@hؚYaUAt
}.xff}27TՀ\S=fBe`
!mv!`(h @@?_ш:{sQ RPb`̀s^udϼL,#Y!z䑥4:b%8t~g	G7rK`q_Z@0=G\&']aᘽ[P!ݨ՛[TNToT4ɝsx9s4W18{0V:mZ^;4yt1ۚ_\:9YPFگ{%We5|.-'FYea	+Sm6*/@Pgص/ǭH0 "eQW'D>P2Q\8`StrPk4=ە`{O$߫dlzHf`P!0{F"&~PLss2`x&{nEHkƑ l($>u0ED>so֟<~iݻ
"=̿ASOBxM,oqG)C8d&gW[FWjV9pJ܈?(H%tbW{ ~gTKYߢ/`Y GtAXMjĴ7mh+PqH0\~k]rât/9IVM|B2Zeo"/HҘv?&ai_S92^Q⡎3uQ}߇ޅiʡem4NmPtx!Ҧ%!E7
((QA!#3?Z-aw6XYdmU
^DgOSt)x}]XU.
&qk)UL4-#e)z5_ٚA(T3HU"K_|5-'"u:`-}Bw4ʇ_vIHHlhgKa\M9N칶ӈļQ>L$^]mLDZٗUYh^3˰TuƼ>%x*;V#i~~猻r=P[XAa	=tN*A@庞=AcQ	RO>C(
8$	=}K;{4Pyϳ3i1Gzo~	/CZǪe0`Q3*&&yn3ֆNfbUooP9ukH)eog*lE T)?!DH!0`d&dժRS6H9|jt2'ztew˻Nap:%ߺ5^j#$!	
7$"pn#{fn'ij7D3QI$s0v:y9v{q7i!6H҂"=jkk$zk+$)O?
i0|t!?;$!˚IKQ
	*J3yppvu	UTz._$(QPv0=!6 fFF@Hݪn~>aU#rؕԌ
"=#(L])9Hr`v%h(A'yӐ9(;E(5w!:`ΤXAB8):CU%Td4SQPn.`kU738Ԑ".7KMC,>$˘dܒH`H,=?-;]c݇Ʊ#o:{_.?hДN1:3i(}s_s_7?2
2RKS(~m"Ey7⡝3.?R9ƍ[Gh_C|98WYqK;c
	a|YMmdSe’f
~ñha
D)X=}F'GRc3 cpFv`T@G
9zچZ2!%y<7_٥V<"[	,Ck^R~NಔwUdjwR\B]v֘0m)oXog<mP#2 呵:rc^ɭEQZп^ᄍ(&B[Di#O	6/L/g,S[̷P6y0ޥJ?
hzv]Ha3@-rW6مMn"m6GLgLөMQ{VQ\5"'y
ƞ*"j7:6[ӝih:6+пS2t;5:AJAcRt!lI4$C[B则GZب}L؉pEv$ݸ6\-`cLNms;:4d_y̯y3cñG;PAWlX9Ou׻8Nܪli
)6UtCxKL'[]Wה;;c%J^o5u'*-^,iL8F_$!zCIܓ"dA4OB/;f&-E!Χj1I98MHK>_9nH0^RvO/zʖcl&$#ʿ||]-Դynnb0&4ڰj2^
/XbH	i	j7,u$;6fFJ"ښ|q'yk
2ztɌ;HAP=bkjlT=re
td/D2d: ia1xI6K	KΗG|=xAb$e7ȒjW܌rC7E"Xj
iצhqywWV=8?MF+:rȝC#+3h[:.;Tu+χ?q MU6/8ߖ3wjX#ba}ekys4GT	$YAہJ$jC:buM(
;fՋsi5"Zquy<w^kۆ{]ҵGa)o%9e\t`oeacǟL}ؠ@ІS'˅ D7e!,eAKbhHʥ繯oػn&_M|]-BNh>7a/,?U$Mdn[?_dR.Oo^6g1{fEQ[hZ=OwsYU~?ZO2E%9eܴ5^-.
_c`{L9|hW+E AQÆQ);u{5/!&撙~zisFp6,zOZȼt'LƔ/TbCy״[7TTQ|*J?>/k.ꋻƴx'E,T%ӳxrOQⳗ]]BAKtn class="hl str">"{$phpbb_root_path}memberlist.$phpEx", "mode=contact&amp;action=jabber&amp;u=$poster_id") : '',
				'search'		=> ($auth->acl_get('u_search')) ? append_sid("{$phpbb_root_path}search.$phpEx", "author_id=$poster_id&amp;sr=posts") : '',

				'author_full'		=> get_username_string('full', $poster_id, $row['username'], $row['user_colour']),
				'author_colour'		=> get_username_string('colour', $poster_id, $row['username'], $row['user_colour']),
				'author_username'	=> get_username_string('username', $poster_id, $row['username'], $row['user_colour']),
				'author_profile'	=> get_username_string('profile', $poster_id, $row['username'], $row['user_colour']),
			);

			/**
			* Modify the users' data displayed with their posts
			*
			* @event core.viewtopic_cache_user_data
			* @var	array	user_cache_data	Array with the user's data
			* @var	int		poster_id	Poster's user id
			* @var	array	row			Array with original user and post data
			* @since 3.1-A1
			*/
			$vars = array('user_cache_data', 'poster_id', 'row');
			extract($phpbb_dispatcher->trigger_event('core.viewtopic_cache_user_data', compact($vars)));

			$user_cache[$poster_id] = $user_cache_data;

			get_user_rank($row['user_rank'], $row['user_posts'], $user_cache[$poster_id]['rank_title'], $user_cache[$poster_id]['rank_image'], $user_cache[$poster_id]['rank_image_src']);

			if ((!empty($row['user_allow_viewemail']) && $auth->acl_get('u_sendemail')) || $auth->acl_get('a_email'))
			{
				$user_cache[$poster_id]['email'] = ($config['board_email_form'] && $config['email_enable']) ? append_sid("{$phpbb_root_path}memberlist.$phpEx", "mode=email&amp;u=$poster_id") : (($config['board_hide_emails'] && !$auth->acl_get('a_email')) ? '' : 'mailto:' . $row['user_email']);
			}
			else
			{
				$user_cache[$poster_id]['email'] = '';
			}

			if (!empty($row['user_icq']))
			{
				$user_cache[$poster_id]['icq'] = 'http://www.icq.com/people/' . urlencode($row['user_icq']) . '/';
				$user_cache[$poster_id]['icq_status_img'] = '<img src="http://web.icq.com/whitepages/online?icq=' . $row['user_icq'] . '&amp;img=5" width="18" height="18" alt="" />';
			}
			else
			{
				$user_cache[$poster_id]['icq_status_img'] = '';
				$user_cache[$poster_id]['icq'] = '';
			}

			if ($config['allow_birthdays'] && !empty($row['user_birthday']))
			{
				list($bday_day, $bday_month, $bday_year) = array_map('intval', explode('-', $row['user_birthday']));

				if ($bday_year)
				{
					$diff = $now['mon'] - $bday_month;
					if ($diff == 0)
					{
						$diff = ($now['mday'] - $bday_day < 0) ? 1 : 0;
					}
					else
					{
						$diff = ($diff < 0) ? 1 : 0;
					}

					$user_cache[$poster_id]['age'] = (int) ($now['year'] - $bday_year - $diff);
				}
			}
		}
	}
}
$db->sql_freeresult($result);

// Load custom profile fields
if ($config['load_cpf_viewtopic'])
{
	if (!class_exists('custom_profile'))
	{
		include($phpbb_root_path . 'includes/functions_profile_fields.' . $phpEx);
	}
	$cp = new custom_profile();

	// Grab all profile fields from users in id cache for later use - similar to the poster cache
	$profile_fields_tmp = $cp->generate_profile_fields_template('grab', $id_cache);

	// filter out fields not to be displayed on viewtopic. Yes, it's a hack, but this shouldn't break any MODs.
	$profile_fields_cache = array();
	foreach ($profile_fields_tmp as $profile_user_id => $profile_fields)
	{
		$profile_fields_cache[$profile_user_id] = array();
		foreach ($profile_fields as $used_ident => $profile_field)
		{
			if ($profile_field['data']['field_show_on_vt'])
			{
				$profile_fields_cache[$profile_user_id][$used_ident] = $profile_field;
			}
		}
	}
	unset($profile_fields_tmp);
}

// Generate online information for user
if ($config['load_onlinetrack'] && sizeof($id_cache))
{
	$sql = 'SELECT session_user_id, MAX(session_time) as online_time, MIN(session_viewonline) AS viewonline
		FROM ' . SESSIONS_TABLE . '
		WHERE ' . $db->sql_in_set('session_user_id', $id_cache) . '
		GROUP BY session_user_id';
	$result = $db->sql_query($sql);

	$update_time = $config['load_online_time'] * 60;
	while ($row = $db->sql_fetchrow($result))
	{
		$user_cache[$row['session_user_id']]['online'] = (time() - $update_time < $row['online_time'] && (($row['viewonline']) || $auth->acl_get('u_viewonline'))) ? true : false;
	}
	$db->sql_freeresult($result);
}
unset($id_cache);

// Pull attachment data
if (sizeof($attach_list))
{
	if ($auth->acl_get('u_download') && $auth->acl_get('f_download', $forum_id))
	{
		$sql = 'SELECT *
			FROM ' . ATTACHMENTS_TABLE . '
			WHERE ' . $db->sql_in_set('post_msg_id', $attach_list) . '
				AND in_message = 0
			ORDER BY filetime DESC, post_msg_id ASC';
		$result = $db->sql_query($sql);

		while ($row = $db->sql_fetchrow($result))
		{
			$attachments[$row['post_msg_id']][] = $row;
		}
		$db->sql_freeresult($result);

		// No attachments exist, but post table thinks they do so go ahead and reset post_attach flags
		if (!sizeof($attachments))
		{
			$sql = 'UPDATE ' . POSTS_TABLE . '
				SET post_attachment = 0
				WHERE ' . $db->sql_in_set('post_id', $attach_list);
			$db->sql_query($sql);

			// We need to update the topic indicator too if the complete topic is now without an attachment
			if (sizeof($rowset) != $total_posts)
			{
				// Not all posts are displayed so we query the db to find if there's any attachment for this topic
				$sql = 'SELECT a.post_msg_id as post_id
					FROM ' . ATTACHMENTS_TABLE . ' a, ' . POSTS_TABLE . " p
					WHERE p.topic_id = $topic_id
						AND p.post_approved = 1
						AND p.topic_id = a.topic_id";
				$result = $db->sql_query_limit($sql, 1);
				$row = $db->sql_fetchrow($result);
				$db->sql_freeresult($result);

				if (!$row)
				{
					$sql = 'UPDATE ' . TOPICS_TABLE . "
						SET topic_attachment = 0
						WHERE topic_id = $topic_id";
					$db->sql_query($sql);
				}
			}
			else
			{
				$sql = 'UPDATE ' . TOPICS_TABLE . "
					SET topic_attachment = 0
					WHERE topic_id = $topic_id";
				$db->sql_query($sql);
			}
		}
		else if ($has_attachments && !$topic_data['topic_attachment'])
		{
			// Topic has approved attachments but its flag is wrong
			$sql = 'UPDATE ' . TOPICS_TABLE . "
				SET topic_attachment = 1
				WHERE topic_id = $topic_id";
			$db->sql_query($sql);

			$topic_data['topic_attachment'] = 1;
		}
	}
	else
	{
		$display_notice = true;
	}
}

$template->assign_vars(array(
	'S_HAS_ATTACHMENTS' => $topic_data['topic_attachment'],
));

$methods = phpbb_gen_download_links('topic_id', $topic_id, $phpbb_root_path, $phpEx);
foreach ($methods as $method)
{
	$template->assign_block_vars('dl_method', $method);
}

// Instantiate BBCode if need be
if ($bbcode_bitfield !== '')
{
	$bbcode = new bbcode(base64_encode($bbcode_bitfield));
}

$i_total = sizeof($rowset) - 1;
$prev_post_id = '';

$template->assign_vars(array(
	'S_NUM_POSTS' => sizeof($post_list))
);

// Output the posts
$first_unread = $post_unread = false;
for ($i = 0, $end = sizeof($post_list); $i < $end; ++$i)
{
	// A non-existing rowset only happens if there was no user present for the entered poster_id
	// This could be a broken posts table.
	if (!isset($rowset[$post_list[$i]]))
	{
		continue;
	}

	$row = $rowset[$post_list[$i]];
	$poster_id = $row['user_id'];

	// End signature parsing, only if needed
	if ($user_cache[$poster_id]['sig'] && $row['enable_sig'] && empty($user_cache[$poster_id]['sig_parsed']))
	{
		$user_cache[$poster_id]['sig'] = censor_text($user_cache[$poster_id]['sig']);

		if ($user_cache[$poster_id]['sig_bbcode_bitfield'])
		{
			$bbcode->bbcode_second_pass($user_cache[$poster_id]['sig'], $user_cache[$poster_id]['sig_bbcode_uid'], $user_cache[$poster_id]['sig_bbcode_bitfield']);
		}

		$user_cache[$poster_id]['sig'] = bbcode_nl2br($user_cache[$poster_id]['sig']);
		$user_cache[$poster_id]['sig'] = smiley_text($user_cache[$poster_id]['sig']);
		$user_cache[$poster_id]['sig_parsed'] = true;
	}

	// Parse the message and subject
	$message = censor_text($row['post_text']);

	// Second parse bbcode here
	if ($row['bbcode_bitfield'])
	{
		$bbcode->bbcode_second_pass($message, $row['bbcode_uid'], $row['bbcode_bitfield']);
	}

	$message = bbcode_nl2br($message);
	$message = smiley_text($message);

	if (!empty($attachments[$row['post_id']]))
	{
		parse_attachments($forum_id, $message, $attachments[$row['post_id']], $update_count);
	}

	// Replace naughty words such as farty pants
	$row['post_subject'] = censor_text($row['post_subject']);

	// Highlight active words (primarily for search)
	if ($highlight_match)
	{
		$message = preg_replace('#(?!<.*)(?<!\w)(' . $highlight_match . ')(?!\w|[^<>]*(?:</s(?:cript|tyle))?>)#is', '<span class="posthilit">\1</span>', $message);
		$row['post_subject'] = preg_replace('#(?!<.*)(?<!\w)(' . $highlight_match . ')(?!\w|[^<>]*(?:</s(?:cript|tyle))?>)#is', '<span class="posthilit">\1</span>', $row['post_subject']);
	}

	// Editing information
	if (($row['post_edit_count'] && $config['display_last_edited']) || $row['post_edit_reason'])
	{
		// Get usernames for all following posts if not already stored
		if (!sizeof($post_edit_list) && ($row['post_edit_reason'] || ($row['post_edit_user'] && !isset($user_cache[$row['post_edit_user']]))))
		{
			// Remove all post_ids already parsed (we do not have to check them)
			$post_storage_list = (!$store_reverse) ? array_slice($post_list, $i) : array_slice(array_reverse($post_list), $i);

			$sql = 'SELECT DISTINCT u.user_id, u.username, u.user_colour
				FROM ' . POSTS_TABLE . ' p, ' . USERS_TABLE . ' u
				WHERE ' . $db->sql_in_set('p.post_id', $post_storage_list) . '
					AND p.post_edit_count <> 0
					AND p.post_edit_user <> 0
					AND p.post_edit_user = u.user_id';
			$result2 = $db->sql_query($sql);
			while ($user_edit_row = $db->sql_fetchrow($result2))
			{
				$post_edit_list[$user_edit_row['user_id']] = $user_edit_row;
			}
			$db->sql_freeresult($result2);

			unset($post_storage_list);
		}

		if ($row['post_edit_reason'])
		{
			// User having edited the post also being the post author?
			if (!$row['post_edit_user'] || $row['post_edit_user'] == $poster_id)
			{
				$display_username = get_username_string('full', $poster_id, $row['username'], $row['user_colour'], $row['post_username']);
			}
			else
			{
				$display_username = get_username_string('full', $row['post_edit_user'], $post_edit_list[$row['post_edit_user']]['username'], $post_edit_list[$row['post_edit_user']]['user_colour']);
			}

			$l_edited_by = $user->lang('EDITED_TIMES_TOTAL', (int) $row['post_edit_count'], $display_username, $user->format_date($row['post_edit_time'], false, true));
		}
		else
		{
			if ($row['post_edit_user'] && !isset($user_cache[$row['post_edit_user']]))
			{
				$user_cache[$row['post_edit_user']] = $post_edit_list[$row['post_edit_user']];
			}

			// User having edited the post also being the post author?
			if (!$row['post_edit_user'] || $row['post_edit_user'] == $poster_id)
			{
				$display_username = get_username_string('full', $poster_id, $row['username'], $row['user_colour'], $row['post_username']);
			}
			else
			{
				$display_username = get_username_string('full', $row['post_edit_user'], $user_cache[$row['post_edit_user']]['username'], $user_cache[$row['post_edit_user']]['user_colour']);
			}

			$l_edited_by = $user->lang('EDITED_TIMES_TOTAL', (int) $row['post_edit_count'], $display_username, $user->format_date($row['post_edit_time'], false, true));
		}
	}
	else
	{
		$l_edited_by = '';
	}

	// Bump information
	if ($topic_data['topic_bumped'] && $row['post_id'] == $topic_data['topic_last_post_id'] && isset($user_cache[$topic_data['topic_bumper']]) )
	{
		// It is safe to grab the username from the user cache array, we are at the last
		// post and only the topic poster and last poster are allowed to bump.
		// Admins and mods are bound to the above rules too...
		$l_bumped_by = sprintf($user->lang['BUMPED_BY'], $user_cache[$topic_data['topic_bumper']]['username'], $user->format_date($topic_data['topic_last_post_time'], false, true));
	}
	else
	{
		$l_bumped_by = '';
	}

	$cp_row = array();

	//
	if ($config['load_cpf_viewtopic'])
	{
		$cp_row = (isset($profile_fields_cache[$poster_id])) ? $cp->generate_profile_fields_template('show', false, $profile_fields_cache[$poster_id]) : array();
	}

	$post_unread = (isset($topic_tracking_info[$topic_id]) && $row['post_time'] > $topic_tracking_info[$topic_id]) ? true : false;

	$s_first_unread = false;
	if (!$first_unread && $post_unread)
	{
		$s_first_unread = $first_unread = true;
	}

	$edit_allowed = ($user->data['is_registered'] && ($auth->acl_get('m_edit', $forum_id) || (
		$user->data['user_id'] == $poster_id &&
		$auth->acl_get('f_edit', $forum_id) &&
		!$row['post_edit_locked'] &&
		($row['post_time'] > time() - ($config['edit_time'] * 60) || !$config['edit_time'])
	)));

	$delete_allowed = ($user->data['is_registered'] && ($auth->acl_get('m_delete', $forum_id) || (
		$user->data['user_id'] == $poster_id &&
		$auth->acl_get('f_delete', $forum_id) &&
		$topic_data['topic_last_post_id'] == $row['post_id'] &&
		($row['post_time'] > time() - ($config['delete_time'] * 60) || !$config['delete_time']) &&
		// we do not want to allow removal of the last post if a moderator locked it!
		!$row['post_edit_locked']
	)));

	//
	$post_row = array(
		'POST_AUTHOR_FULL'		=> ($poster_id != ANONYMOUS) ? $user_cache[$poster_id]['author_full'] : get_username_string('full', $poster_id, $row['username'], $row['user_colour'], $row['post_username']),
		'POST_AUTHOR_COLOUR'	=> ($poster_id != ANONYMOUS) ? $user_cache[$poster_id]['author_colour'] : get_username_string('colour', $poster_id, $row['username'], $row['user_colour'], $row['post_username']),
		'POST_AUTHOR'			=> ($poster_id != ANONYMOUS) ? $user_cache[$poster_id]['author_username'] : get_username_string('username', $poster_id, $row['username'], $row['user_colour'], $row['post_username']),
		'U_POST_AUTHOR'			=> ($poster_id != ANONYMOUS) ? $user_cache[$poster_id]['author_profile'] : get_username_string('profile', $poster_id, $row['username'], $row['user_colour'], $row['post_username']),

		'RANK_TITLE'		=> $user_cache[$poster_id]['rank_title'],
		'RANK_IMG'			=> $user_cache[$poster_id]['rank_image'],
		'RANK_IMG_SRC'		=> $user_cache[$poster_id]['rank_image_src'],
		'POSTER_JOINED'		=> $user_cache[$poster_id]['joined'],
		'POSTER_POSTS'		=> $user_cache[$poster_id]['posts'],
		'POSTER_FROM'		=> $user_cache[$poster_id]['from'],
		'POSTER_AVATAR'		=> $user_cache[$poster_id]['avatar'],
		'POSTER_WARNINGS'	=> $user_cache[$poster_id]['warnings'],
		'POSTER_AGE'		=> $user_cache[$poster_id]['age'],

		'POST_DATE'			=> $user->format_date($row['post_time'], false, ($view == 'print') ? true : false),
		'POST_SUBJECT'		=> $row['post_subject'],
		'MESSAGE'			=> $message,
		'SIGNATURE'			=> ($row['enable_sig']) ? $user_cache[$poster_id]['sig'] : '',
		'EDITED_MESSAGE'	=> $l_edited_by,
		'EDIT_REASON'		=> $row['post_edit_reason'],
		'BUMPED_MESSAGE'	=> $l_bumped_by,

		'MINI_POST_IMG'			=> ($post_unread) ? $user->img('icon_post_target_unread', 'UNREAD_POST') : $user->img('icon_post_target', 'POST'),
		'POST_ICON_IMG'			=> ($topic_data['enable_icons'] && !empty($row['icon_id'])) ? $icons[$row['icon_id']]['img'] : '',
		'POST_ICON_IMG_WIDTH'	=> ($topic_data['enable_icons'] && !empty($row['icon_id'])) ? $icons[$row['icon_id']]['width'] : '',
		'POST_ICON_IMG_HEIGHT'	=> ($topic_data['enable_icons'] && !empty($row['icon_id'])) ? $icons[$row['icon_id']]['height'] : '',
		'ICQ_STATUS_IMG'		=> $user_cache[$poster_id]['icq_status_img'],
		'ONLINE_IMG'			=> ($poster_id == ANONYMOUS || !$config['load_onlinetrack']) ? '' : (($user_cache[$poster_id]['online']) ? $user->img('icon_user_online', 'ONLINE') : $user->img('icon_user_offline', 'OFFLINE')),
		'S_ONLINE'				=> ($poster_id == ANONYMOUS || !$config['load_onlinetrack']) ? false : (($user_cache[$poster_id]['online']) ? true : false),

		'U_EDIT'			=> ($edit_allowed) ? append_sid("{$phpbb_root_path}posting.$phpEx", "mode=edit&amp;f=$forum_id&amp;p={$row['post_id']}") : '',
		'U_QUOTE'			=> ($auth->acl_get('f_reply', $forum_id)) ? append_sid("{$phpbb_root_path}posting.$phpEx", "mode=quote&amp;f=$forum_id&amp;p={$row['post_id']}") : '',
		'U_INFO'			=> ($auth->acl_get('m_info', $forum_id)) ? append_sid("{$phpbb_root_path}mcp.$phpEx", "i=main&amp;mode=post_details&amp;f=$forum_id&amp;p=" . $row['post_id'], true, $user->session_id) : '',
		'U_DELETE'			=> ($delete_allowed) ? append_sid("{$phpbb_root_path}posting.$phpEx", "mode=delete&amp;f=$forum_id&amp;p={$row['post_id']}") : '',

		'U_PROFILE'		=> $user_cache[$poster_id]['profile'],
		'U_SEARCH'		=> $user_cache[$poster_id]['search'],
		'U_PM'			=> ($poster_id != ANONYMOUS && $config['allow_privmsg'] && $auth->acl_get('u_sendpm') && ($user_cache[$poster_id]['allow_pm'] || $auth->acl_gets('a_', 'm_') || $auth->acl_getf_global('m_'))) ? append_sid("{$phpbb_root_path}ucp.$phpEx", 'i=pm&amp;mode=compose&amp;action=quotepost&amp;p=' . $row['post_id']) : '',
		'U_EMAIL'		=> $user_cache[$poster_id]['email'],
		'U_WWW'			=> $user_cache[$poster_id]['www'],
		'U_ICQ'			=> $user_cache[$poster_id]['icq'],
		'U_AIM'			=> $user_cache[$poster_id]['aim'],
		'U_MSN'			=> $user_cache[$poster_id]['msn'],
		'U_YIM'			=> $user_cache[$poster_id]['yim'],
		'U_JABBER'		=> $user_cache[$poster_id]['jabber'],

		'U_APPROVE_ACTION'		=> append_sid("{$phpbb_root_path}mcp.$phpEx", "i=queue&amp;p={$row['post_id']}&amp;f=$forum_id"),
		'U_REPORT'			=> ($auth->acl_get('f_report', $forum_id)) ? append_sid("{$phpbb_root_path}report.$phpEx", 'f=' . $forum_id . '&amp;p=' . $row['post_id']) : '',
		'U_MCP_REPORT'		=> ($auth->acl_get('m_report', $forum_id)) ? append_sid("{$phpbb_root_path}mcp.$phpEx", 'i=reports&amp;mode=report_details&amp;f=' . $forum_id . '&amp;p=' . $row['post_id'], true, $user->session_id) : '',
		'U_MCP_APPROVE'		=> ($auth->acl_get('m_approve', $forum_id)) ? append_sid("{$phpbb_root_path}mcp.$phpEx", 'i=queue&amp;mode=approve_details&amp;f=' . $forum_id . '&amp;p=' . $row['post_id'], true, $user->session_id) : '',
		'U_MINI_POST'		=> append_sid("{$phpbb_root_path}viewtopic.$phpEx", 'p=' . $row['post_id']) . '#p' . $row['post_id'],
		'U_NEXT_POST_ID'	=> ($i < $i_total && isset($rowset[$post_list[$i + 1]])) ? $rowset[$post_list[$i + 1]]['post_id'] : '',
		'U_PREV_POST_ID'	=> $prev_post_id,
		'U_NOTES'			=> ($auth->acl_getf_global('m_')) ? append_sid("{$phpbb_root_path}mcp.$phpEx", 'i=notes&amp;mode=user_notes&amp;u=' . $poster_id, true, $user->session_id) : '',
		'U_WARN'			=> ($auth->acl_get('m_warn') && $poster_id != $user->data['user_id'] && $poster_id != ANONYMOUS) ? append_sid("{$phpbb_root_path}mcp.$phpEx", 'i=warn&amp;mode=warn_post&amp;f=' . $forum_id . '&amp;p=' . $row['post_id'], true, $user->session_id) : '',

		'POST_ID'			=> $row['post_id'],
		'POST_NUMBER'		=> $i + $start + 1,
		'POSTER_ID'			=> $poster_id,

		'S_HAS_ATTACHMENTS'	=> (!empty($attachments[$row['post_id']])) ? true : false,
		'S_MULTIPLE_ATTACHMENTS'	=> !empty($attachments[$row['post_id']]) && sizeof($attachments[$row['post_id']]) > 1,
		'S_POST_UNAPPROVED'	=> ($row['post_approved']) ? false : true,
		'S_POST_REPORTED'	=> ($row['post_reported'] && $auth->acl_get('m_report', $forum_id)) ? true : false,
		'S_DISPLAY_NOTICE'	=> $display_notice && $row['post_attachment'],
		'S_FRIEND'			=> ($row['friend']) ? true : false,
		'S_UNREAD_POST'		=> $post_unread,
		'S_FIRST_UNREAD'	=> $s_first_unread,
		'S_CUSTOM_FIELDS'	=> (isset($cp_row['row']) && sizeof($cp_row['row'])) ? true : false,
		'S_TOPIC_POSTER'	=> ($topic_data['topic_poster'] == $poster_id) ? true : false,

		'S_IGNORE_POST'		=> ($row['hide_post']) ? true : false,
		'L_IGNORE_POST'		=> ($row['hide_post']) ? sprintf($user->lang['POST_BY_FOE'], get_username_string('full', $poster_id, $row['username'], $row['user_colour'], $row['post_username']), '<a href="' . $viewtopic_url . "&amp;p={$row['post_id']}&amp;view=show#p{$row['post_id']}" . '">', '</a>') : '',
	);

	$user_poster_data = $user_cache[$poster_id];

	/**
	* Modify the posts template block
	*
	* @event core.viewtopic_modify_post_row
	* @var	array	row				Array with original post and user data
	* @var	array	cp_row			Custom profile field data of the poster
	* @var	array	user_poster_data	Poster's data from user cache
	* @var	array	post_row		Template block array of the post
	* @since 3.1-A1
	*/
	$vars = array('row', 'cp_row', 'user_poster_data', 'post_row');
	extract($phpbb_dispatcher->trigger_event('core.viewtopic_modify_post_row', compact($vars)));

	if (isset($cp_row['row']) && sizeof($cp_row['row']))
	{
		$post_row = array_merge($post_row, $cp_row['row']);
	}

	// Dump vars into template
	$template->assign_block_vars('postrow', $post_row);

	if (!empty($cp_row['blockrow']))
	{
		foreach ($cp_row['blockrow'] as $field_data)
		{
			$template->assign_block_vars('postrow.custom_fields', $field_data);
		}
	}

	// Display not already displayed Attachments for this post, we already parsed them. ;)
	if (!empty($attachments[$row['post_id']]))
	{
		foreach ($attachments[$row['post_id']] as $attachment)
		{
			$template->assign_block_vars('postrow.attachment', array(
				'DISPLAY_ATTACHMENT'	=> $attachment)
			);
		}

		$methods = phpbb_gen_download_links('post_msg_id', $row['post_id'], $phpbb_root_path, $phpEx);
		foreach ($methods as $method)
		{
			$template->assign_block_vars('postrow.dl_method', $method);
		}
	}

	$prev_post_id = $row['post_id'];

	unset($rowset[$post_list[$i]]);
	unset($attachments[$row['post_id']]);
}
unset($rowset, $user_cache);

// Update topic view and if necessary attachment view counters ... but only for humans and if this is the first 'page view'
if (isset($user->data['session_page']) && !$user->data['is_bot'] && (strpos($user->data['session_page'], '&t=' . $topic_id) === false || isset($user->data['session_created'])))
{
	$sql = 'UPDATE ' . TOPICS_TABLE . '
		SET topic_views = topic_views + 1, topic_last_view_time = ' . time() . "
		WHERE topic_id = $topic_id";
	$db->sql_query($sql);

	// Update the attachment download counts
	if (sizeof($update_count))
	{
		$sql = 'UPDATE ' . ATTACHMENTS_TABLE . '
			SET download_count = download_count + 1
			WHERE ' . $db->sql_in_set('attach_id', array_unique($update_count));
		$db->sql_query($sql);
	}
}

// Only mark topic if it's currently unread. Also make sure we do not set topic tracking back if earlier pages are viewed.
if (isset($topic_tracking_info[$topic_id]) && $topic_data['topic_last_post_time'] > $topic_tracking_info[$topic_id] && $max_post_time > $topic_tracking_info[$topic_id])
{
	markread('topic', $forum_id, $topic_id, $max_post_time);

	// Update forum info
	$all_marked_read = update_forum_tracking_info($forum_id, $topic_data['forum_last_post_time'], (isset($topic_data['forum_mark_time'])) ? $topic_data['forum_mark_time'] : false, false);
}
else
{
	$all_marked_read = true;
}

// If there are absolutely no more unread posts in this forum
// and unread posts shown, we can safely show the #unread link
if ($all_marked_read)
{
	if ($post_unread)
	{
		$template->assign_vars(array(
			'U_VIEW_UNREAD_POST'	=> '#unread',
		));
	}
	else if (isset($topic_tracking_info[$topic_id]) && $topic_data['topic_last_post_time'] > $topic_tracking_info[$topic_id])
	{
		$template->assign_vars(array(
			'U_VIEW_UNREAD_POST'	=> append_sid("{$phpbb_root_path}viewtopic.$phpEx", "f=$forum_id&amp;t=$topic_id&amp;view=unread") . '#unread',
		));
	}
}
else if (!$all_marked_read)
{
	$last_page = ((floor($start / $config['posts_per_page']) + 1) == max(ceil($total_posts / $config['posts_per_page']), 1)) ? true : false;

	// What can happen is that we are at the last displayed page. If so, we also display the #unread link based in $post_unread
	if ($last_page && $post_unread)
	{
		$template->assign_vars(array(
			'U_VIEW_UNREAD_POST'	=> '#unread',
		));
	}
	else if (!$last_page)
	{
		$template->assign_vars(array(
			'U_VIEW_UNREAD_POST'	=> append_sid("{$phpbb_root_path}viewtopic.$phpEx", "f=$forum_id&amp;t=$topic_id&amp;view=unread") . '#unread',
		));
	}
}

// let's set up quick_reply
$s_quick_reply = false;
if ($user->data['is_registered'] && $config['allow_quick_reply'] && ($topic_data['forum_flags'] & FORUM_FLAG_QUICK_REPLY) && $auth->acl_get('f_reply', $forum_id))
{
	// Quick reply enabled forum
	$s_quick_reply = (($topic_data['forum_status'] == ITEM_UNLOCKED && $topic_data['topic_status'] == ITEM_UNLOCKED) || $auth->acl_get('m_edit', $forum_id)) ? true : false;
}

if ($s_can_vote || $s_quick_reply)
{
	add_form_key('posting');

	if ($s_quick_reply)
	{
		$s_attach_sig	= $config['allow_sig'] && $user->optionget('attachsig') && $auth->acl_get('f_sigs', $forum_id) && $auth->acl_get('u_sig');
		$s_smilies		= $config['allow_smilies'] && $user->optionget('smilies') && $auth->acl_get('f_smilies', $forum_id);
		$s_bbcode		= $config['allow_bbcode'] && $user->optionget('bbcode') && $auth->acl_get('f_bbcode', $forum_id);
		$s_notify		= $config['allow_topic_notify'] && ($user->data['user_notify'] || $s_watching_topic['is_watching']);

		$qr_hidden_fields = array(
			'topic_cur_post_id'		=> (int) $topic_data['topic_last_post_id'],
			'lastclick'				=> (int) time(),
			'topic_id'				=> (int) $topic_data['topic_id'],
			'forum_id'				=> (int) $forum_id,
		);

		// Originally we use checkboxes and check with isset(), so we only provide them if they would be checked
		(!$s_bbcode)					? $qr_hidden_fields['disable_bbcode'] = 1		: true;
		(!$s_smilies)					? $qr_hidden_fields['disable_smilies'] = 1		: true;
		(!$config['allow_post_links'])	? $qr_hidden_fields['disable_magic_url'] = 1	: true;
		($s_attach_sig)					? $qr_hidden_fields['attach_sig'] = 1			: true;
		($s_notify)						? $qr_hidden_fields['notify'] = 1				: true;
		($topic_data['topic_status'] == ITEM_LOCKED) ? $qr_hidden_fields['lock_topic'] = 1 : true;

		$template->assign_vars(array(
			'S_QUICK_REPLY'			=> true,
			'U_QR_ACTION'			=> append_sid("{$phpbb_root_path}posting.$phpEx", "mode=reply&amp;f=$forum_id&amp;t=$topic_id"),
			'QR_HIDDEN_FIELDS'		=> build_hidden_fields($qr_hidden_fields),
			'SUBJECT'				=> 'Re: ' . censor_text($topic_data['topic_title']),
		));
	}
}
// now I have the urge to wash my hands :(


// We overwrite $_REQUEST['f'] if there is no forum specified
// to be able to display the correct online list.
// One downside is that the user currently viewing this topic/post is not taken into account.
if (!request_var('f', 0))
{
	$request->overwrite('f', $forum_id);
}

// We need to do the same with the topic_id. See #53025.
if (!request_var('t', 0) && !empty($topic_id))
{
	$request->overwrite('t', $topic_id);
}

$page_title = $topic_data['topic_title'] . ($start ? ' - ' . sprintf($user->lang['PAGE_TITLE_NUMBER'], floor($start / $config['posts_per_page']) + 1) : '');

/**
* You can use this event to modify the page title of the viewtopic page
*
* @event core.viewtopic_modify_page_title
* @var	string	page_title		Title of the index page
* @var	array	topic_data		Array with topic data
* @var	int		forum_id		Forum ID of the topic
* @var	int		start			Start offset used to calculate the page
* @since 3.1-A1
*/
$vars = array('page_title', 'topic_data', 'forum_id', 'start');
extract($phpbb_dispatcher->trigger_event('core.viewtopic_modify_page_title', compact($vars)));

// Output the page
page_header($page_title, true, $forum_id);

$template->set_filenames(array(
	'body' => ($view == 'print') ? 'viewtopic_print.html' : 'viewtopic_body.html')
);
make_jumpbox(append_sid("{$phpbb_root_path}viewforum.$phpEx"), $forum_id);

page_footer();