From 5661e32b1ce977d4fe98b73f468bdf5695464c56 Mon Sep 17 00:00:00 2001 From: Michael Save Date: Wed, 30 Jan 2013 04:45:38 +1100 Subject: [PATCH 01/89] Instead of showing $config['error']['malformed'] on corrupt session, just go straight to the login form --- inc/mod/auth.php | 7 +++++-- mod.php | 2 +- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/inc/mod/auth.php b/inc/mod/auth.php index 8fb01ecb..b3b23553 100644 --- a/inc/mod/auth.php +++ b/inc/mod/auth.php @@ -98,8 +98,10 @@ if (isset($_COOKIE[$config['cookies']['mod']])) { // Should be username:hash:salt $cookie = explode(':', $_COOKIE[$config['cookies']['mod']]); if (count($cookie) != 3) { + // Malformed cookies destroyCookies(); - error($config['error']['malformed']); + // error($config['error']['malformed']); + mod_login(); } $query = prepare("SELECT `id`, `type`, `boards`, `password` FROM `mods` WHERE `username` = :username LIMIT 1"); @@ -111,7 +113,8 @@ if (isset($_COOKIE[$config['cookies']['mod']])) { if ($cookie[1] !== mkhash($cookie[0], $user['password'], $cookie[2])) { // Malformed cookies destroyCookies(); - error($config['error']['malformed']); + // error($config['error']['malformed']); + mod_login(); } $mod = array( diff --git a/mod.php b/mod.php index a51f4bcd..8045cf47 100644 --- a/mod.php +++ b/mod.php @@ -5,8 +5,8 @@ */ require 'inc/functions.php'; -require 'inc/mod/auth.php'; require 'inc/mod/pages.php'; +require 'inc/mod/auth.php'; // Fix for magic quotes if (get_magic_quotes_gpc()) { From 2051018ba170ef1bb4d47afdcdee78156563c719 Mon Sep 17 00:00:00 2001 From: Michael Save Date: Wed, 30 Jan 2013 05:07:09 +1100 Subject: [PATCH 02/89] ... --- inc/mod/auth.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/inc/mod/auth.php b/inc/mod/auth.php index b3b23553..73a24c44 100644 --- a/inc/mod/auth.php +++ b/inc/mod/auth.php @@ -100,8 +100,8 @@ if (isset($_COOKIE[$config['cookies']['mod']])) { if (count($cookie) != 3) { // Malformed cookies destroyCookies(); - // error($config['error']['malformed']); mod_login(); + exit; } $query = prepare("SELECT `id`, `type`, `boards`, `password` FROM `mods` WHERE `username` = :username LIMIT 1"); @@ -113,8 +113,8 @@ if (isset($_COOKIE[$config['cookies']['mod']])) { if ($cookie[1] !== mkhash($cookie[0], $user['password'], $cookie[2])) { // Malformed cookies destroyCookies(); - // error($config['error']['malformed']); mod_login(); + exit; } $mod = array( From 1816218c64da5881c681808893ce8a9dc7eb54db Mon Sep 17 00:00:00 2001 From: Michael Save Date: Fri, 15 Mar 2013 00:40:02 +1100 Subject: [PATCH 03/89] Fix: Critical security vulnerability --- inc/mod/pages.php | 45 ++++++++++++++++++++++++++++----------------- 1 file changed, 28 insertions(+), 17 deletions(-) diff --git a/inc/mod/pages.php b/inc/mod/pages.php index 0ea97fe8..4d588030 100644 --- a/inc/mod/pages.php +++ b/inc/mod/pages.php @@ -114,26 +114,37 @@ function mod_dashboard() { } else { $ctx = stream_context_create(array('http' => array('timeout' => 5))); if ($code = @file_get_contents('http://tinyboard.org/version.txt', 0, $ctx)) { - eval($code); - if (preg_match('/v(\d+)\.(\d)\.(\d+)(-dev.+)?$/', $config['version'], $matches)) { - $current = array( - 'massive' => (int) $matches[1], - 'major' => (int) $matches[2], - 'minor' => (int) $matches[3] + $ver = strtok($code, "\n"); + + if (preg_match('@^// v(\d+)\.(\d+)\.(\d+)\s*?$@', $ver, $matches)) { + $latest = array( + 'massive' => $matches[1], + 'major' => $matches[2], + 'minor' => $matches[3] ); - if (isset($m[4])) { - // Development versions are always ahead in the versioning numbers - $current['minor'] --; - } - // Check if it's newer - if (!( $latest['massive'] > $current['massive'] || - $latest['major'] > $current['major'] || - ($latest['massive'] == $current['massive'] && - $latest['major'] == $current['major'] && - $latest['minor'] > $current['minor'] - ))) + if (preg_match('/v(\d+)\.(\d)\.(\d+)(-dev.+)?$/', $config['version'], $matches)) { + $current = array( + 'massive' => (int) $matches[1], + 'major' => (int) $matches[2], + 'minor' => (int) $matches[3] + ); + if (isset($m[4])) { + // Development versions are always ahead in the versioning numbers + $current['minor'] --; + } + // Check if it's newer + if (!( $latest['massive'] > $current['massive'] || + $latest['major'] > $current['major'] || + ($latest['massive'] == $current['massive'] && + $latest['major'] == $current['major'] && + $latest['minor'] > $current['minor'] + ))) + $latest = false; + } else { $latest = false; + } } else { + // Couldn't get latest version $latest = false; } } else { From 64ae123739c39567447bfc16fc95deb556786671 Mon Sep 17 00:00:00 2001 From: Michael Save Date: Sat, 16 Mar 2013 18:27:24 +1100 Subject: [PATCH 04/89] Mod log in ?/IP (ie. ban history) --- inc/config.php | 3 +++ inc/mod/ban.php | 15 +++++++++++--- inc/mod/pages.php | 9 +++++++++ templates/mod/view_ip.html | 40 ++++++++++++++++++++++++++++++++++++++ 4 files changed, 64 insertions(+), 3 deletions(-) diff --git a/inc/config.php b/inc/config.php index cedf3e06..8d37e601 100644 --- a/inc/config.php +++ b/inc/config.php @@ -986,6 +986,9 @@ $config['mod']['createusers'] = ADMIN; // View the moderation log $config['mod']['modlog'] = ADMIN; + // View relevant moderation log entries on IP address pages (ie. ban history, etc.) + // Warning: Can be pretty resource exhaustive if your mod logs are huge. + $config['mod']['modlog_ip'] = MOD; // Create a PM (viewing mod usernames) $config['mod']['create_pm'] = JANITOR; // Read any PM, sent to or from anybody diff --git a/inc/mod/ban.php b/inc/mod/ban.php index 9c93d70e..30234157 100644 --- a/inc/mod/ban.php +++ b/inc/mod/ban.php @@ -80,16 +80,25 @@ function ban($mask, $reason, $length, $board) { modLog('Created a new ' . ($length > 0 ? preg_replace('/^(\d+) (\w+?)s?$/', '$1-$2', until($length)) : 'permanent') . - ' ban (#' . $pdo->lastInsertId() . ') for ' . + ' ban on ' . + ($board ? '/' . $board . '/' : 'all boards') . + ' for ' . (filter_var($mask, FILTER_VALIDATE_IP) !== false ? "$mask" : utf8tohtml($mask)) . + ' (#' . $pdo->lastInsertId() . ')' . ' with ' . ($reason ? 'reason: ' . utf8tohtml($reason) . '' : 'no reason')); } -function unban($id) { +function unban($id) { + $query = prepare("SELECT `ip` FROM `bans` WHERE `id` = :id"); + $query->bindValue(':id', $id); + $query->execute() or error(db_error($query)); + $mask = $query->fetchColumn(); + $query = prepare("DELETE FROM `bans` WHERE `id` = :id"); $query->bindValue(':id', $id); $query->execute() or error(db_error($query)); - modLog("Removed ban #{$id}"); + if ($mask) + modLog("Removed ban #{$id} for " . (filter_var($mask, FILTER_VALIDATE_IP) !== false ? "$mask" : utf8tohtml($mask))); } diff --git a/inc/mod/pages.php b/inc/mod/pages.php index 4d588030..db51324a 100644 --- a/inc/mod/pages.php +++ b/inc/mod/pages.php @@ -600,6 +600,15 @@ function mod_page_ip($ip) { $args['notes'] = $query->fetchAll(PDO::FETCH_ASSOC); } + if (hasPermission($config['mod']['modlog_ip'])) { + $query = prepare("SELECT `username`, `mod`, `ip`, `board`, `time`, `text` FROM `modlogs` LEFT JOIN `mods` ON `mod` = `mods`.`id` WHERE `text` LIKE :search ORDER BY `time` DESC LIMIT 20"); + $query->bindValue(':search', '%' . $ip . '%'); + $query->execute() or error(db_error($query)); + $args['logs'] = $query->fetchAll(PDO::FETCH_ASSOC); + } else { + $args['logs'] = array(); + } + mod_page(sprintf('%s: %s', _('IP'), $ip), 'mod/view_ip.html', $args, $args['hostname']); } diff --git a/templates/mod/view_ip.html b/templates/mod/view_ip.html index c49880ae..562a0140 100644 --- a/templates/mod/view_ip.html +++ b/templates/mod/view_ip.html @@ -161,3 +161,43 @@ {% include 'mod/ban_form.html' %} {% endif %} + +{% if logs|count > 0 %} +
+ History + + + + + + + + {% for log in logs %} + + + + + + + {% endfor %} +
{% trans 'Staff' %}{% trans 'Time' %}{% trans 'Board' %}{% trans 'Action' %}
+ {% if log.username %} + {{ log.username|e }} + {% elseif log.mod == -1 %} + system + {% else %} + {% trans 'deleted?' %} + {% endif %} + + {{ log.time|ago }} + + {% if log.board %} + {{ config.board_abbreviation|sprintf(log.board) }} + {% else %} + - + {% endif %} + + {{ log.text }} +
+
+{% endif %} From 53f710060d1437f89291f26b10397a9c6c8bf4d2 Mon Sep 17 00:00:00 2001 From: Fredrick Date: Sun, 17 Mar 2013 07:00:55 -0400 Subject: [PATCH 05/89] Fix truncation issue by no longer using HTML entities for Unicode characters --- inc/functions.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/inc/functions.php b/inc/functions.php index 16b16901..cd079141 100644 --- a/inc/functions.php +++ b/inc/functions.php @@ -1494,7 +1494,7 @@ function markup(&$body, $track_cites = false) { } function utf8tohtml($utf8) { - return mb_encode_numericentity(htmlspecialchars($utf8, ENT_NOQUOTES, 'UTF-8'), array(0x80, 0xffff, 0, 0xffff), 'UTF-8'); + return htmlspecialchars($utf8, ENT_NOQUOTES, 'UTF-8'); } function buildThread($id, $return=false, $mod=false) { From 41ee55a1b2dadacdc646f5ca9797d2aa3cc91c10 Mon Sep 17 00:00:00 2001 From: undido Date: Wed, 20 Mar 2013 00:56:59 -0300 Subject: [PATCH 06/89] Update auto-reload.js check if viewing a thread or viewing a board page when updating a thread so new posts do not appear at bottom of page while viewing threads list not sure if this was because of an outdated template but I thought I should point out this as it may affect html templates no matter the code as the banner code is the only code that checks where the user currently is. --- js/auto-reload.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/js/auto-reload.js b/js/auto-reload.js index c0c63056..5d96146a 100644 --- a/js/auto-reload.js +++ b/js/auto-reload.js @@ -16,6 +16,9 @@ $(document).ready(function(){ if($('div.banner').length == 0) return; // not index + + if($(".post.op").size() != 1) + return; //not thread page var poll_interval; From bb54605eb7ef65c5e415aba7bcc94eed928e185e Mon Sep 17 00:00:00 2001 From: Fredrick Date: Wed, 20 Mar 2013 07:46:48 -0400 Subject: [PATCH 07/89] Fix per-board name not being used --- inc/config.php | 4 ++-- inc/mod/pages.php | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/inc/config.php b/inc/config.php index 8d37e601..8eed50fa 100644 --- a/inc/config.php +++ b/inc/config.php @@ -858,8 +858,8 @@ $config['mod']['shadow_mesage'] = 'Moved to %s.'; // Capcode to use when posting the above message. $config['mod']['shadow_capcode'] = 'Mod'; - // Name to use when posting the above message. - $config['mod']['shadow_name'] = $config['anonymous']; + // Name to use when posting the above message. If false, the default board name will be used. If something else, that will be used. + $config['mod']['shadow_name'] = false; // Wait indefinitely when rebuilding everything $config['mod']['rebuild_timelimit'] = 0; diff --git a/inc/mod/pages.php b/inc/mod/pages.php index db51324a..5d736a1a 100644 --- a/inc/mod/pages.php +++ b/inc/mod/pages.php @@ -912,7 +912,7 @@ function mod_move($originBoard, $postID) { 'mod' => true, 'subject' => '', 'email' => '', - 'name' => $config['mod']['shadow_name'], + 'name' => (!$config['mod']['shadow_name'] ? $config['anonymous'] : $config['mod']['shadow_name']), 'capcode' => $config['mod']['shadow_capcode'], 'trip' => '', 'password' => '', From b4ff535128e6c169d2b4966e6227faa511780621 Mon Sep 17 00:00:00 2001 From: undido Date: Tue, 16 Apr 2013 19:09:58 -0300 Subject: [PATCH 08/89] update to pages.php minor exploit A lot of bans can be removed from a tinyboard database because it isn't limited A staff member could select 100 users all at once with a simple javascript function and unban them all this needs to be limited because a staff member on an image board if they feel hostile they can just remove all bans on the tinyboard site easily without being limited to how many people they can unban at a time, this adds an option to limit it. --- inc/mod/pages.php | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/inc/mod/pages.php b/inc/mod/pages.php index 5d736a1a..6a780474 100644 --- a/inc/mod/pages.php +++ b/inc/mod/pages.php @@ -651,7 +651,8 @@ function mod_bans($page_no = 1) { if (preg_match('/^ban_(\d+)$/', $name, $match)) $unban[] = $match[1]; } - + if (isset($config['mod']['unban_limit'])){ + if (count($unban) <= $config['mod']['unban_limit'] || $config['mod']['unban_limit'] == -1){ if (!empty($unban)) { query('DELETE FROM `bans` WHERE `id` = ' . implode(' OR `id` = ', $unban)) or error(db_error()); @@ -659,7 +660,21 @@ function mod_bans($page_no = 1) { modLog("Removed ban #{$id}"); } } + } else { + error(sprintf($config['error']['toomanyunban'], $config['mod']['unban_limit'], count($unban) )); + } + + } else { + + if (!empty($unban)) { + query('DELETE FROM `bans` WHERE `id` = ' . implode(' OR `id` = ', $unban)) or error(db_error()); + + foreach ($unban as $id) { + modLog("Removed ban #{$id}"); + } + } + } header('Location: ?/bans', true, $config['redirect_http']); } From 83401b3a68b4031b4e3c33230acf0d99df7e45fe Mon Sep 17 00:00:00 2001 From: undido Date: Tue, 16 Apr 2013 19:14:51 -0300 Subject: [PATCH 09/89] update config.php config for unban limit Adding config and error for unban list when a user tries to unban more users than they are allowed too. --- inc/config.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/inc/config.php b/inc/config.php index 8eed50fa..900d540a 100644 --- a/inc/config.php +++ b/inc/config.php @@ -686,6 +686,7 @@ $config['error']['captcha'] = _('You seem to have mistyped the verification.'); // Moderator errors + $config['error']['toomanyunban'] = _('You are only allowed to unban %s users at a time. You tried to unban %u users.'); $config['error']['invalid'] = _('Invalid username and/or password.'); $config['error']['notamod'] = _('You are not a mod…'); $config['error']['invalidafter'] = _('Invalid username and/or password. Your user may have been deleted or changed.'); @@ -768,6 +769,9 @@ * Mod settings * ==================== */ + + // Limit how many bans can be removed via the ban list. (Set too -1 to remove limit.) + $config['mod']['unban_limit'] = 5; // Whether or not to lock moderator sessions to the IP address that was logged in with. $config['mod']['lock_ip'] = true; From 4c45689528a0448b6e6808817104f132880c0ac7 Mon Sep 17 00:00:00 2001 From: czaks Date: Sun, 26 May 2013 17:52:33 -0400 Subject: [PATCH 10/89] vichan specific fix to facilitate using "." and "+" in boardnames --- mod.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mod.php b/mod.php index c0614754..6257fe53 100644 --- a/mod.php +++ b/mod.php @@ -45,7 +45,7 @@ $pages = array( '/news/(\d+)' => 'news', // view news '/news/delete/(\d+)' => 'news_delete', // delete from news - '/edit/(\w+)' => 'edit_board', // edit board details + '/edit/([\w+.]+)' => 'edit_board', // edit board details '/new-board' => 'new_board', // create a new board '/rebuild' => 'rebuild', // rebuild static files From 9b8326473555d2419c1c62f957893eb97e6082eb Mon Sep 17 00:00:00 2001 From: Riku Rouvila Date: Wed, 2 Jan 2013 19:40:30 +0200 Subject: [PATCH 11/89] Here we go --- info.php | 53 ++++++++++++++++++++++++++ theme.php | 111 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ thumb.png | Bin 0 -> 15123 bytes ukko.js | 37 ++++++++++++++++++ 4 files changed, 201 insertions(+) create mode 100644 info.php create mode 100644 theme.php create mode 100644 thumb.png create mode 100644 ukko.js diff --git a/info.php b/info.php new file mode 100644 index 00000000..34d59d4e --- /dev/null +++ b/info.php @@ -0,0 +1,53 @@ + 'Board name', + 'name' => 'title', + 'type' => 'text', + 'default' => 'Ukko' + ); + $theme['config'][] = Array( + 'title' => 'Board URI', + 'name' => 'uri', + 'type' => 'text', + 'comment' => '(ukko for example)' + ); + $theme['config'][] = Array( + 'title' => 'Subtitle', + 'name' => 'subtitle', + 'type' => 'text', + 'comment' => '(%s = thread limit. for example "%s freshly bumped threads")' + ); + $theme['config'][] = Array( + 'title' => 'Excluded boards', + 'name' => 'exclude', + 'type' => 'text', + 'comment' => '(space seperated)' + ); + $theme['config'][] = Array( + 'title' => 'Number of threads', + 'name' => 'thread_limit', + 'type' => 'text', + 'default' => '15', + ); + // Unique function name for building everything + $theme['build_function'] = 'ukko_build'; + $theme['install_callback'] = 'ukko_install'; + + if(!function_exists('ukko_install')) { + function ukko_install($settings) { + if (!file_exists($settings['uri'])) + @mkdir($settings['uri'], 0777) or error("Couldn't create " . $settings['uri'] . ". Check permissions.", true); + } + } + diff --git a/theme.php b/theme.php new file mode 100644 index 00000000..6fa5fa7e --- /dev/null +++ b/theme.php @@ -0,0 +1,111 @@ +settings = $settings; + $ukko->build(); + } + + class ukko { + public $settings; + public function build($mod = false) { + global $config; + $boards = listBoards(); + + $body = ''; + $overflow = array(); + $board = array( + 'url' => $this->settings['uri'], + 'name' => $this->settings['title'], + 'title' => sprintf($this->settings['subtitle'], $this->settings['thread_limit']) + ); + + $query = ''; + foreach($boards as &$_board) { + if(in_array($_board['uri'], explode(' ', $this->settings['exclude']))) + continue; + $query .= sprintf("SELECT *, '%s' AS `board` FROM `posts_%s` WHERE `thread` IS NULL UNION ALL ", $_board['uri'], $_board['uri']); + } + $query = preg_replace('/UNION ALL $/', 'ORDER BY `bump` DESC', $query); + $query = query($query) or error(db_error()); + + $count = 0; + $threads = array(); + while($post = $query->fetch()) { + + if(!isset($threads[$post['board']])) { + $threads[$post['board']] = 1; + } else { + $threads[$post['board']] += 1; + } + + if($count < $this->settings['thread_limit']) { + openBoard($post['board']); + $thread = new Thread( + $post['id'], $post['subject'], $post['email'], $post['name'], $post['trip'], $post['capcode'], $post['body'], $post['time'], + $post['thumb'], $post['thumbwidth'], $post['thumbheight'], $post['file'], $post['filewidth'], $post['fileheight'], $post['filesize'], + $post['filename'], $post['ip'], $post['sticky'], $post['locked'], $post['sage'], $post['embed'], $mod ? '?/' : $config['root'], $mod + ); + + $posts = prepare(sprintf("SELECT * FROM `posts_%s` WHERE `thread` = :id ORDER BY `id` DESC LIMIT :limit", $post['board'])); + $posts->bindValue(':id', $post['id']); + $posts->bindValue(':limit', ($post['sticky'] ? $config['threads_preview_sticky'] : $config['threads_preview']), PDO::PARAM_INT); + $posts->execute() or error(db_error($posts)); + + $num_images = 0; + while ($po = $posts->fetch()) { + if ($po['file']) + $num_images++; + + $thread->add(new Post( + $po['id'], $post['id'], $po['subject'], $po['email'], $po['name'], $po['trip'], $po['capcode'], $po['body'], $po['time'], + $po['thumb'], $po['thumbwidth'], $po['thumbheight'], $po['file'], $po['filewidth'], $po['fileheight'], $po['filesize'], + $po['filename'], $po['ip'], $po['embed'], $mod ? '?/' : $config['root'], $mod) + ); + + } + if ($posts->rowCount() == ($post['sticky'] ? $config['threads_preview_sticky'] : $config['threads_preview'])) { + $ct = prepare(sprintf("SELECT COUNT(`id`) as `num` FROM `posts_%s` WHERE `thread` = :thread UNION ALL SELECT COUNT(`id`) FROM `posts_%s` WHERE `file` IS NOT NULL AND `thread` = :thread", $post['board'], $post['board'])); + $ct->bindValue(':thread', $post['id'], PDO::PARAM_INT); + $ct->execute() or error(db_error($count)); + + $c = $ct->fetch(); + $thread->omitted = $c['num'] - ($post['sticky'] ? $config['threads_preview_sticky'] : $config['threads_preview']); + + $c = $ct->fetch(); + $thread->omitted_images = $c['num'] - $num_images; + } + + + $thread->posts = array_reverse($thread->posts); + $body .= '

/' . $post['board'] . '/

'; + $body .= $thread->build(true); + } else { + $page = 'index'; + if(floor($threads[$post['board']] / $config['threads_per_page']) > 0) { + $page = floor($threads[$post['board']] / $config['threads_per_page']) + 1; + } + $overflow[] = array('id' => $post['id'], 'board' => $post['board'], 'page' => $page . '.html'); + } + + $count += 1; + } + + $body .= ''; + $body .= ''; + + file_write($this->settings['uri'] . '/index.html', Element('index.html', array( + 'config' => $config, + 'board' => $board, + 'no_post_form' => true, + 'body' => $body, + 'boardlist' => createBoardlist($mod) + ))); + + file_write($this->settings['uri'] . '/ukko.js', Element('themes/ukko/ukko.js', array())); + } + + }; + +?> diff --git a/thumb.png b/thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..49c4237bde9f837b8fe98234d37afbee703dd2f0 GIT binary patch literal 15123 zcmV+uJM6@XP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iyo2 z4<8$#Nwqlu03ZNKL_t(|+U%Wom|RzR|3By4GHqwOwn;0kx@4=l$i3o1Gq?Z_U@#7* z1VX?GAtVrj6Ka0+k^rFv3=YA@#vOM{mL=PgRV+(ZT}i9eYWwc=x$T_aANOvPY-5l} z0-p0c^X!>Bckay2``)*F-zGME?jQBwo;}Pza~69Z*usKWFK6V?2q*pd74+^ph-C{J z+NZJZ8+TGQy@BkGXE5tKkc~~miUa6GElXd$f)Q1NKirKmI>Ne}*Ko-fKf>^V{m8+7 z4j&j{(OX{2@ZP=D*&gd|d6osIH<251sIq+A>GN=Q?8HsaW$wyGsvGLiK|p2w;g`^z z_i7LjC@>B112812RAQh%gJpQsHnk#S7N`KU08@e&fRvyW<>3JwyMfX`7cCtfU>a!0 zK?n&#f+bO97bz#6;|1Y$kl}SL6I_?!-hS$vo6$;DsPjL;0BXlw`bA$9pb?-IAYSAw z9THV5gp??y5HEV}OD~N^3W?Ic|1~P>cUvYe@k8rz){rm7L!iTRv;y&x=l&LMM4@ zM5yj3bmixI1*il-#%*-jt=IssNQnSw$KyzPPuKuLOvHbWVK0P0SN4B2ds%Wle5D!5 z7MQyC@dL$hX6nA|`gmh|@96!|5qrlAUU=^Zc>cuR^%aAe0`5!h0|rO)xPcnqdoQtf zyrcKNda=DeYCmwqK2RFR^TWN?l-=KD&-h-w*d8do*xosMuaDY$zja?6+Y3R_@erza zy`In#g3A7twXe8=6(Fc$1iqpfKvX0^MFLdTE13bLf!2CTUeIK7VZw<73=M&pcyaRc zu{X)+n4E+!jh$m?@J0Anh3;dRNnBa~Tg!OY>1W&+iz{R@&FH~?3WvIh)z*?5$|97H znTWCdi8TEQkKf$dfD`xGxF$`pZ1K?g1ZLJ^(|&_g+2)}Q7WX|?jUCrKv?j^Eja76G z8`LP1wR;TixTBVudd02xR$&!wR&TOdve@I$AscOKhK4LsNzH-7CUrF$H=D&R+9FRbS2M-o2ED2QjMZ3CcO#>?rxey*On>ygG%O86r2BWwfgwJ1NPJl!@0>k?Gt+ zU{p~&*oj}tlP?&=tK$gE3ULg>hzeB%7!srr9y25eLH=+bc6B;BW`t36!z6R?F!7pn zc#S{8hwTdL z=FbV(_N>je=Tj83lFb`Zbd?mgW3z8qkj+>$*9vxSkFn{Q6u;SM^5uWY@yk^v4VJ~l zmloK#HO}&70iXM6l3#wQm3e0s_{>kMIk864wp6kG7kBdPo$IM?jB#koZt5CiJbU*B zoc`Td%?l}Pzn|{m7JBag6{CXz(@$QAkOrG>Sxw7=CY($U-FMu}_Q$p`?}Ft#zq*q{ z>ozj$jOEzvZJ1i~^q0RvcDSFt53FYGFLyDmv7fDv>}F)oHun7D`)s~%FE!P}Y`x_P znijRQ=kYb{y!l7$+hvp4xtgZB0#@7nuwv?ukpbTKwm-ko-M@kQlg}Y@u$#K(6h^9% zfxaB^z$H0z8sGY6BhT!J@$iEwW}aB)^f`**VViCHO-||v=*q(T-&$hxZj)!W##pi- zVDEklcf@8C#Rsk_FzUkRzFJ2|qe<66$(^^>qhpG_&&Ij)?lkQumRZoDIM8dd>hUC3 zTv;Tu{U9se_F8I}pM*bfh>|;v_PKG2gZ-E-i%Hcbs7VxXG8xReX37~0mD!2sXtqDP zlNqPXp=30Wn7x>h4XdeJaSpR)O0-eJ&^9`irrfm~t8EeS+B)jyFDE_Cpg54nFePR~9?s)>F;q~bX69TBZ7_0ZKh;$Us^**!N{&B51`s;4^Cg2pT7yXb0qgX% zptI9t&Rh=wf7s+VPuW~{K^aUF?fFrO8VEx`pkFlDAq*MTIKC`!T!7NQn*kyOS}DZX z4`|zfMmz2wtsNtDcK4rbH1H^6wz7`)0&<1YA1wNWm|S1@`;kzOQF01d!|T@6q>uW5 zvg1-LYqSn%s7r+&j$tyA8>Z-#nBLeHi8aB&;X!h4iKG>yqiz}q&Hm9WO))5WJ`L54 zVdZiZ>~ejF!-YIap(tueb9EzeW9*+4Xssw6?xs`-&~6#Cp#@4=oU%{d-02j0`l)Ge zMHRA?bTv-*9*nwX>RM|V-qlHZ!F((f7?SMnPO9h3!q1LS(rLV*L%2mv%ZW4T-*b?f zju{jV9;AN$T=JcJ2xN?!_Etvw%hWW+=-WR;L$#09JR_7`zK;M#`igj&e(LAX#uOU! ztKa!A1R@e^VWcR$bwmgeXvSZYdsbeInXaSn*FRz5_1E**7k>(E%em-=bGiL* zzQ=j*IF-V-XQ`TfHrqB9Ir;PsR)6_cF8J#=vTvjYx33I{P?ZWI3+G!S22Ip39sW z^FT{pweT!ztPIIS11V>OHop(j&AfWS5)SX!!Su#7Lz#X)bJn@IUYY3&rt{EKhgn)( z&(_}6OpDiYetIE;*&b>WX?o)+rlspyZ2$Hb?sG%^mHuS=j@MMk5Yh? z_)YUKFtUrh-Nx|dClPO*$&9Ps#{=(t zD<@pCjOk0;=-<4Xyr^e*>yzwwG{&4umZF6~eDQNP>LZE$Li_NymQ#p6Uc(%aL^R(|-}@U!AEwtem2IPovu z1C|w@>jmh*4`X+B9LnWTLU=)_f=q#S{i%ksWrOdB4LJZ@9}EFj3|%fG0P)4o|FfQa z4@oJi8iLjB&=8_(zQq zOn?jtr-OizzHWAH-As0m*Y>u z*Mh*ucO5drgZNGfsT9eWO;s{URWd;;o**G@T-PCPTWA^Jdp-sl5qNl|JZ>zG8HpxqF-O?G2%oPzmyb5vyAi~X5EAL zFuk#Xmg;I2&7MU^$1KuSX&UMqF{LD#u#nnixLhDFKq`e_%rdm^c}5ax=AC*j(zHW& zMTcI*n0+9mAk+?FuOcbK*TU~9UeMDYXChrmczzlA0HF@oldb(RL9azffH6BDx-Yc= zub5}=mh~Lk{XCbQdoCx=n?qA$19c5`*i|)HriE=MFr{Fc*UHRUv*_Kwo1XrDy1ib8 zig^;21x~=e4Xf!mX4I+XZ>fA%Q zP$Xf+nbuH4A{obu#js;>>{uLWSxDQ$Fk=|Ru~I3j(rFrtMW$ym6bc2N-?Nk4$PndH z5x0;*8j@Jr4s!$|KuU`V;)mZg{Cq*wx^9vYsFhFKYp-TT%XEe}ZfAH;7s4>;ex{RI zmtS2m7+=^12vva4M8uboxEJH7Ua0qFdo{(l71>MEZ6zKoXf!6U`dMxc9GoAGcg0S195- z4l3}G2$Y5(P^dtmm5Klx6#+j6QW~K_sTC+6*YT;XuV-4R1>1_FeHZ1q<9B#y=tZ9$ zS^i3^$Qu}Q|0-U(BPEHWQPX`dwlMT)rs z1z%9BeQd(Wn@|!d!cdVAim{AEp(pYY$KAjR{f~_S#>8u+c0;gd{707K5xelb5Q!^0 z9s%I1kO2(C#1s-!2#g@Wip4NZ3j>WIG=>mJ)5JvKs{k!P2OgP`AqM*T$c$!bs7+y| z+z5%Bh#0C#k;8F(V2Ze^aKJH3fH5gBITXyK;LH?3tHbm+JptB7F%*poB13RIv>WPs zw29V1s4gNEp_Rh-JY3hs@jN`=CkTSj(TjAyh`y7KkVhSbi>FF}3IiNF4lstbj$`oA z53V&+aRQBPTU1x4BX3*~1d9ItA<89(Lbi$+0hTGTVsXq^0$nN~EgK`2L~9)q-E%0H z%b3!{wrp~R62rqI5UZk9D^wJO5@D2RJRqf&3R_x5Hpa0m6{U8GS2zPjDqxJh8X?6* z*KW-u96mw`H5k5TermnZ$J*%y>M!xuZ;5A;O5Dkl}0rEsyoa zH#zmxbJ@7@vB*$;RV?J1OlVBpRBT3+g~IpQp}E5Q`^#pmmNX)0k1v#bQVl&rfes8-ZU}B za_rHQ5_d&}D~u8T*l_(^F3;D${%^eZz1Q*m?|=OmnCXum2%50^$8`P_7jWD>2z`As z87JM;h+#;YYO9$wy_Gq0=F*t1L25z8M%+fk zj4(Rr6e$ZyweO*8>rqw$e1mZaKu=CSj5r~Js*Pj%w*_5Y2l)Eezs8&2{CWz70;yE; zm8k;sBoY5Yy70(DlQlvR_;`*3o`dooe6NgKE{~&uLWk)}(lm%wS0NK|glQnrXwN~Z zF#Rf(Oc6*EUxXl#&|{o8m1t8ulw(xebLX}&cWx_d*KT;l5M*1d71r&1`gp7xIeUV!iOQlGr>+nq*<&;oP5hqs)p8{Y7mSF|B0(t-q%PyrsKn4kd$)V`;bvqS`ZZ%AD^XP(O!V5BgAjAwJ(tq5_e20 zNE!O!mWfS*Sxc4^l=76l5{05eCYQ(eeFjJK)D=q96v`9|B}%y>mK%^jBYlnXU9{`q z`+gW8G9gp;Df?jqsStyhs6S9TOdZu@!^yHfe8I$XJ+k={#ga?0RHj@mQ!cw`t+5Oce(2jN9iV~$MCjz@+yEy~ z_$svS#iX(#C0?-x`u~swm6VU6^cX#vB!a-Xm_ksM zO44)iKxpN6Os9R}B7`9@Ou^7VFG3h7C6QXP`@mtkhjR>QoBEbE49mnY!r6mbglcIl zLtHa8FQ~GPqYVgX-#PI_j&b zt4`w#4l!iyM;jUpg;|ptFN$zINl*U(T|IrMbTu{8rXkJH1=LZEh8hz?Y66YaQ}Prl z>o@>GdQzBGA6*XsQ&P3Zbc2ur!!VJig|9Sa&qElRbSyzC9w%X2XxGPg9F$aOQ)B96 zNMHd<3tZ2`amz?AK4nyFRBIVR(MPBxJqfI;tmDD}6AgZ}CKCCR?=(G8?-%6+XuuMZ zcvYH2eLcC}1DG+3m}OEEH>pphNheYy?G&lTI)n*E4Dy9MN+<%YD7r4Dp-I>R?U&Gg z85Nia(}-?*8RnNNF`fplh2U5K;L3U-2AGrtB7_((zY2fwP&$ao9zk?xdJ<&J#!MtB zxdBpoNJC<#Evn|VP*q(`vZfZ-HbNO51e60wsaV4C3N$n|(A?62uj6#>-AMNEKH}+m z>ZZ@emqus+9_{{D*73#xL{xP<1q~b%vpQsgu_BFeaA>@?QWHcVii$+H)?rbm)??t2 zjPeB(z8ku9hLj*BRxE)PONNOiURYGBBl$m}e#8_svLgPEHx#U==6{U0j1yt-Wz67G zLQm-9C`jPA4y8g7B}^PGDJ$@l#`P3I0K$rc8KdlJ`uj5+Iy6Yh^@&xbh^L$BIN==T zFTW5oS;f%7PKFQd!}DDP6H!Sqo|E+AaCK!JlL`>yDnK(e7^I_8>q)`6NB~F-6fywq zL9QGSSKxULYj$+AufIrjRg&hWI_m2iuq=~!%wqQJc4DyvcA|z-)d?7uOSO)(aPe96 z9NK}hEZkC#SS*D=M^!>%q6VO{{s2JGIPs6vw&5K=-Um`ov$l6p%pk0aGA);m0IAHeF8VYDSBjwUCJdFKL}6?3}Ir&Vk8sQv^1Oq zL7DvEKBNlJP6;=cK{d|9NY-Q5w~y!WD5b;n^C%T9P+^g&sZ1QFOncK@N=|{{Y%kgT zFq4ZzCVL5$bvz`%7~B(OS?MVSm;&W0+=5SGv`i@%rEe<*N+6`fG%Qld6s^;yVc^kK z=tn9a<$3s}63S{sBpb16riT&5G0`F>noMgAmTe=If#-TO*0ho+be7$ray4U`h8G`eiDe@7Rmt$Y=jf_U1cG@4~}WR!-6dJ3fyqnQjN zBLmpdLdrOf@A8>1f1K{&ZW8fY&OiM^K6B$Ik)}^n?S(WYhGC#J1VJ#~^vSj@`uh8@ z6ERY$Dtfjbq@kgKcsy(^(^|KHX*Dx>^0|jFqHs_p7<3$gAUT$MPe5+Kr#$LYm8>OR zn5!^s7j})OV?xC7Tfke%Rhbd@8}siM3tRD2#3ek|Avb% zTT0*IgCvu2q%_CVueH|LmJNVm8k8IdlqQi(pb01!T|9go-@!BlI`BzYNzOXu^+*g5 zIw}{dNP^=71xtk`p*XClt7@aKub-8tpU$3LyGbQdBvJ{IRVk`#Ye`h4NTpH`1k~0v zuw&0|p53|?0||z}wj{078d#$P^gkez3<=L~plaARPoU`(5S{hrCLJ*6^XlrXFZ71mM>*vtn0Uo^T ze%^THrC64MVHlXEiRb&{cEHH+2#I(c%d!Z3k8;^T2AUuUuu};f*Cm(DVOarE305w@ zgz8jFrT^3MvH_$J4D@7iTtO;XV!?tFcyirZ7B5+XQi`fn63_EP_f2bD$7SK-MKraw zkjrK%7t2_di8KuCsw$Fpnx{6c<)p=D@E7m<1S6xv?A^DU_y5HQ_{c{-!lFfsux*<_ zDawvR!nEjxtpvr~FiMB92Wd#8De!!kfx#i-@fe9jf)xu+=lT7cD%3k35m18LEvHA7Pf8Txn(@3L{(!gv*ykQ+hE7OU5sRhS+;l) z$*MGut$&D!Ba}|kHifnF#Y$lH_ zqS=%NG_*Ez?R(zMhV>g58tf-Cl0gW8Wrlrug$ByBm!ro=Ajg;6f8KB&{87D8O}`aRbn_ zOkB?+P@3$(2yWS@l*==1dJDxuiF7)NWya825crzF^QlA#j{^f7?(W5PT=K;dmK|fq zj-AYyK9gK7&**4|AP6XwT>1tEDVGb>*45C^P={qgZA}fM`4K$N3%hq|MMFa!L&JmA z*44A^x$R*{IS5F`;^arO=s=N5Ch=7eHiR$)hGn7xKXelX4D=4*mtERB+R5h&>?J6Q`gWye_ucOe1Xhp7T0k}rBc+_ z)lrp50RlsqNPy$9MBoqV$z9^c zdIcPH;t|g^Is$ekog*eAOmf`sf6=(j3zYsJ*|Ye_bEfpOt^|aRodL8SuE^0>v=LZY z6$YrRS1=Mdro$)e*2?~svlm(qRcwG)vIMBOQWYDZvMLNvSrrDTtXHlLaAcRPu@2%B z>jm0$9j7&6kydPx|BYq5ZrXwyi#yj~x6J05pWVg4ntMpL&t~U?n=rjR$(AM_`+l5* zX~ni@4IX;P;MN}|uau?0(*0{o^K!mxhdY&;1tbpEjA*uK3X{7Au#-;FI_8#JBGu9zR6iz5v4= zV&@~9*mukKNG`m9a@Ug#Zg`3vH{V3hzB1EKT14-vn>pNBWaBq(X4*naxe}cK02+r$ zL_t)W=kD7^+tL%*@{P|hlu5Jaf!{E?=1y|F#(>{IuX5$)`` z>lQ}WK0q-!pC^CxYue_d**BEn`JeoNmO0Jr?T@kJrXP`g@&Pikg9G>diq?~tGSCC5 zv<;YKH{VaJWgdSF!7Ag13tMiqR=$Uxdw)iL-$Bx6pNrSEgLFdBa?YzkJG527E?;rs zQq9*sm7oxZ^Iq+;ccaO^QGq)wdEI3`Pj52G<^)}Ze$6$+_5zPNn$NDq7Au z6GPY=Z%npi4LOyy}h`6OZuEezgqGwCbe!_e*>G?8V?kG{&OfBO$? z`S~N9^!Br12`Z-}xq^ zu?|kZY8g*_>=O)|?VNVSQmUHj*m2i-mcRWB?5a98eE$dNXYOOKH;?Lt^GL*#2>$Qq zE(#~#tqFWEEVK$REE5m}et>D47`Da7{w9T)&?q15xWOlYdtfIt+7~2K z8qWy}KkS$$Gb*rRVW%*q1&$NWL)JjtfZOgiIrG&%jWNx>J(8P#R;K6SyJ$M|RR~j} zmCx|@L24H@A+(RMQ%HP3<2x?G5RB{?q2a`7C_kKQWTj#Rj*pfG!gml>9OZl9yC@IL z#s+jTi!dydQb^^4oj|z`5`~B*@$z}%wP}1Gf^v~qRTAF^RW2eWU?osq8C@9RnLF?2 zjCWkk!=L;HE8l%SwI`epe+&%p+k!!%j{d`mGNlB80@DnuP)iOZ6JsrF#E&PYXglhUlmY%&*B=W3{@2|=t!zz0p|uT6euT%gwo%H8_7+-OC^h+5 zxF35=JfC{4qaXI9zxEN|Av~_NjV63dd9Sv^2i6Nn7RAAX843l99XmP!!83cG0OIT) z=!~v!MSl&zrfZ}Ji1FFGz6xHRuWi}Rr|xE9)Ao-9OrW92YIodnTU~1i_SRP5vvTF>W<06_tRAa3qb^3MmDiQg{Ib(X1ic zHksbq2udTRcZ38`I8MO8z#xtjzUKNaV9-C>N8i8}ZhrnSb5d|}TPriCEn=15#G7J= z8H%^FxuB`4uHny@zmIaJi|?)Z1?M(bb7z->*|>n>$TmpMpw@FacSaLm+V~uO`_?l5 zXfuWC7A|OA#;iAAPiN0PT=21L*uTf4u;^`^eR>Ob{=*NcPnYSv^+(LO>N<*R zeO~p&f8ap3jh7u|-rs+MyDz(%%RhA<&)n0?S)cw8V3S&W8l}e_R($mR?6~_G?&Y!fzl#-bK8e~(KE$P8_y9&- z`+^%~T`LE&9y|8zV9(ZPX>Dym>9DVF*>Q0_7vFX8d=FpwXcgdjL6{4u0s<8f_~ArR zr2~{75R4Cx)M)Laf)|-hEHs7)i9eAI#6;t2t&oNwGn(Pn2Ud}6o6l$<$>=zpo%>ll zdnPUlQ%q$5AtaAI_Bg}CLnM<1ZEY>6pvb?kdw`mTd7L)uMD}MKmN&I<#{ARx!RF0e zvuHk)>4}D>K)#&cqN_v-Mn?_3ND&^66^Nt zphXOFs8Ht8Ma$VRRHiVHVMY5)cKq}!XrDtP`hBfSYU=>;=nZ9HOd!BbV^MjY;rWca$>Sp?aI7V_hhabC}zV%N~rFv<*?9V8= zHaj0$g{o;L+r68H7Mtvz?esmliuNTlsaz>yyqp7irjRUvn4ly!>*s5Nuk%j*^J8f7@m*zT^@P^z^WMZzqklbNo$X+P2t6?0mk|cBgD%B zv?jj8QO$E1DHW+pq>egwq?pCDlB6y3h}Yzl_fH%<5?q@)sjW0TN}|4Y{55A}m{?sc zQ%B`Ze(y_PZ(_=do^l6Dr2_~w%2(kC`6w~4xv7zu1r2S}`QA_d3ti6e{PrC*HaD<( z)noMM902aV<6gSD5AgV^RXnxs33`U|?0oJyzWn8{&~>PX4NpGK-S<4AOIA-I{={pVDV>hR5mQj6FzUqf3F3#Z#p>#gAnK9t zed+7HFym{)kMDj&FFo~41Oih#Y<~DIuD#~%1ip*HAe+sQN~Z9ApRsl_f#-!&!V__v zVgWx0TgVuOfkG4Zd6qb?hh+++VPi<}{Q%c-scWbwpUogm6Db7oc;cwLeyoysXt0lD zRTW5!&6_t-PSsM|GzXCMb?xGHD^Emg7a4gvSw&MzD@y5T>^n5n zH_+X^pW2#fc%Dmref^XR{P@3r&3oVd&MC*9*|>pIPCk`X>IFWrD&)L$bu$}m#*GEI+|d3uYuP7#6(hIMdyj=J;4z=HFz1|j|uoMU`NCO ziPpvcvzUY#_683B;Y2*a#_i8@)@i4b9U10|x4ea}1N(_d&5D(0(%jNU&@mG?FfoPC z6<4(21yEm;X6E5`sv7DjjpkT#^4wzvX8geC7q{Hb{8LW_r7;YFz(56&8KkDVkw;#- z(7B!UPj++q73Z?yGoMAa%ty4(rSFkdoc5O&)4OInr@Z&QJaFARSorEw*|*cd*}om@ zl*^fQVH4K#o7lZ6&qbgAFu#8HCy2MqqH)Ek3~%4SiC3RN@8i$X(kkiP(8s}@{j@Yg z^2{q3-M*RS*PTt@s?AJaz7+4kTH3Dq=>J(**i0l6$f#vo;Cq~Y*_GV&=o9QdI6&#X zySVD|tB`tZf|~}?FK9H?H#CQYXcaGLNedzP@l8MHlrzu3aY~fRWeWKM@mLJk_Yg>` zQZ?Ag1hIG=tzw*Z(d7tfhE1uWsTN9v&8)SMXz>!&!CH};KAmTO{W!VU5@y65jCnJe zHUEtq?zd@OPy<*rE}2K~?ryB!UC7hk&8~YMWY(+RM*p5e#IuJ0MRN8Ee9vX~ZFg|q zS3W_xb0_U9n%R5X!^~aLK(;&!zj+Q@Zn~Yzzx~&A?mNh-S6+c#SI&kMhOE|Dj^MtQB{R@$|wx%WCE|`L={jPFP|gP zP)B(*PogG)Q&I@OgjQi6B;QjA%Oai*4Im{X#{XdxMcj1XD!t;AGsC`p5~TK!+5iMG zLlFd;Tz(W8_-N%5Gi;vSw2|S_A++|Xt*z!QZ+bJ|`tEl)|NQeo8srN_hK7caTH*Q* z&CP98H%wz%Q!AbZtpmiwGy;^Km=JF0F@G66Z6c5;R0vEl-nSN|G<}CVdDXH-6))ge zQ~+8dg&uDPEwI9oFcBVL7=qfG`f)o!O37K5z7DMwrjTsiwt>O^LC(JD)zr7m!f`Za zy&yirM+y_m1Y3ZqG>&JYw8rx#0W!uQ;hm?j9se*7;pO!izx`>)H7-4V!XfA-S6ib$_VBOkv4EObs za~0cnJ;xXR?$7BQcGxwb**{vQwz_cKWLcx6(a$JkQheTeo^WG135k~KuQ@+Zqm^tR{=srE||ua zCV|$p&zsBk-MeVP;P3-q^Y8G*d%t;RM z!N2<(;)cdFL+8%dK{z=unq(z~AW-4ZKob%64g!=614Wb3-j_~1@WIJdD1HX zt^a)obLY(^Gn(OV|KZcjUy$I_KYjpr_9gU}8n|TdKI%^Bz!o8TXlN0(t5!bIOe zbmNG&5J(}g4Ds?cfbT%|V1?pGssKZTgceM+geQu|jn@q#2qmweq!f9rDEZ(ig{uQR ztvTcDv+*@pb55sVN;=|Qymn@eYp;3@d-v>RaBz_A&#vd=AH1HGsUFgWE~-ZN($Ll% z_5>1P18GAGEG@8*$Urjz_Dy&V@(8T{Wh;WHDYnv@(ab2he12>+dUy@P1j~+E=0?X% z6KoqSD{81M!ei0|(+cM-jKxqO9E)dK6OU-#@|4es#UL4nR1)GAB;w(7DIp#U&oxc3 z#P~TH5uPI^eYZq>;yYRb5{dA7B0ATQ6X#fV^qC2WnbA2m#Mf&& z4q9joG==~(kOW$gaean8!H}cqb$qhgK)C`N16!I%X&@Ws^Z3JearVqSZXw{^mu9%& z&)&g5{>y)|e!~V5RcWq0o0pRZF!s3OeA8xBQCXOcxvWY-II; zecarYW$VsoST{J#&7EDigPoMT9N*rykL>6H9_c#3rUP48d$^ZkvWYE2d3t4x7Exr^ za4%2p-9&vn#a$zs`}RJ^VP*4l_ij#Vna;@8=ji|1}BR7;HYx38nV zCcy9yqefkxTCd^oZXWvVtt`HH36I>giPWqFcplqte}IJ3O=89z%3a+&^>o0d&wmqZ z#%yvq1AnBKUAuDFqkHl8ce3d}ZblC7V9l@l*!}b0F!z!b-0_KTAnjN<tCWTFc|eT2^-pHw9)XE?{U+{ zCT44&=eD;{?QCG)!i9YAyWe8necz={ZpKK|b0{C<3m>|U_h0iiKJl?n;`j;&jn)Bi zA5454e6p@&s37Uj3;GKNLuElmOM)@A@H^Uqp6Ahh@F0DCebJq(81<_u74tY=nQfU8 zPwd&rL*4znwqq7bD_ZMnu%zVk=bp{E9VhUbQ!c=e7O!iL^ThM3IdFJ07u1+IZjP9= zC~D{{WVpEAzmrn`p`p z(ej!UuldMx_zHsUucK?rIu?K73etK%*S_s?+UB%#sDF_2&$@u-wpmog4C+lu3B^D$ zAXC;9J&mh03Q0mjB4%J^y18`4oR^0KxCI#P1i*1UMsp5AXqxKNfM%%V5|iQJ97BMo zf(Usua6AVL8>w7;VbBy$prxejmMH{+lo4i1n}&rHf}TQw#+XISv>9<6KE3`a-n#50 zR_}g}zd!99O8tE}Wfe+VX;a%)N4C3{>KQF$x(A5Yq`@oU6x~qt8!>8{s<{6PzvPln zz75~gl==th`t|KB{m}bxMn-T7E~&aC%1WUEC=c{eGqa7+u3oC@5|~vfaw9I5DquHE zLuf^yK|HX2i#~C|VgdnDX-pB0j|YJ%G(LiU*XOo79^%^{yN_GYv~m&hOatu)$MpS8Tbg0s zo)qEiUZo;CLqzj=1X3H!nYWM+{^f_zz~)Vx*t&Hq*IjoV#bS|Jv#Ys!`Alwq;t5Va z^E^hK0Lzfkf0$*K}BsAK;AQfLiPBB+egmBNQWNP&H*+7M9QUL;w0SX3C5;KZti^(y2>0_Wt8Is1h&BYhJhK^YsG&DA_X3ZMTJMTQC zVGuJ71_y_E=$0RHMO{7VnM>LG)EYk5t(bYvwM;)@2C-BV?|l2KS+&2Dk--8VeE)ly zHM;}PbrC{PS64@Mb(&dit;DMm9Q3lZ#eEjfnakgQ;^Qn|dJ^$?oOnFW10&qWTPD)A=Nkx@~60r_y5(0Z>+6tz=)7P5dkvN7#kq1 za5VHBJcJ#TNv5lr*4RKi9zzRBA|4}G$aBL-Zs4|CZsE?K{eYI)^H}!of8>PM|24n* z-glT*lj6Pye#5%Q?k6Y|sP0(I{5pelI?etAU37KrXa4*JWV3mytCFfpJ4pLboj zlq_POB{X-Sy45RHci@N{S)cMfDJJhzsEJGOI@ zUXQF!QSf8@_kC-5@X0PRF1W4(NT%5d{{6hOdAgY88*88B@nvW6#+@7KbIJf*dga@A z$Mx5-;l7{JmVK7ijq@Xg2S%GXa4F#YJ-bCE@5`Cd-{_ba}`9Tk-4-atIEU~w^isy>WJh}dPdWJ_Z zksRzgz(udRm|y(YPngrOkT<{i&3Jym{(bu?77A=w|1|Hq_U%&;!DF)1e92pW`sv6E zRv<2cK=G$OnZmRzYtm%SiFtknC*V-QpucQ$V9yRVJa`)*`0CA1PSKmt4`{A=$2!H98?A_911+b#-ahxeSln3mxTueO^wb!R6X zCC$&ZqMuL=5qRu==$o`$^H1D=Zx@%n{!;esKg4Kel&7EDPP%PTWL&G?ZU{z2C@*Pc z``!z`?@yTl457vn0ni9sB%@wHU$)GzKm95Ge|zW7%U~RZ@n7G*rL>LG22oAw5-lQV z1QFN4!XO%hh(-7cCK7|u7cfaoR-;YA;u6HAB}x=^i%Ti$z3{K0VKDFoJfGks=gG-0 zIp^f5jU7||7U!V56$u5S4DU%n0t1gi=1POz$0wd*x9o3kQPz`s)fX`pmqVTnu|03@)ECt7%ND7nD`_sj6;Eo z6;_)SyQ`R?u_;E{yy!y3BqjdX1}gA!{onB)`ULsWT{;4S{L26U002ovPDHLkV1hlY B5)S|X literal 0 HcmV?d00001 diff --git a/ukko.js b/ukko.js new file mode 100644 index 00000000..baf0f78d --- /dev/null +++ b/ukko.js @@ -0,0 +1,37 @@ +var cache = new Array(), + thread = false, + loading = false; +$(document).ready(function() { + $(window).on('scroll', function() { + if($(window).scrollTop() + $(window).height() + 100 > $(document).height() && !loading && overflow.length > 0) { + var page = '../' + overflow[0].board + '/' + overflow[0].page; + if($.inArray(page, cache) != -1) { + thread = $('div#thread_' + overflow[0].id); + if(thread.length > 0) { + thread.prepend('

/' + overflow[0].board + '/

'); + $('div[id*="thread_"]').last().after(thread.attr('data-board', overflow[0].board).css('display', 'block')); + overflow.shift(); + } + } else { + loading = true; + $.get(page, function(data) { + cache.push(page); + + $(data).find('div[id*="thread_"]').each(function() { + $('body').prepend($(this).css('display', 'none').attr('data-board', overflow[0].board)); + }); + + thread = $('div#thread_' + overflow[0].id + '[data-board="' + overflow[0].board + '"]'); + if(thread.length > 0) { + thread.prepend('

/' + overflow[0].board + '/

'); + $('div[id*="thread_"]').last().after(thread.attr('data-board', overflow[0].board).css('display', 'block')); + overflow.shift(); + } + + loading = false; + }); + } + } + }); + +}); \ No newline at end of file From 9c29cec6598331589a9020e5be627260e659e977 Mon Sep 17 00:00:00 2001 From: czaks Date: Sun, 26 May 2013 18:03:20 -0400 Subject: [PATCH 12/89] Moved ukko to a proper location --- info.php => templates/themes/ukko/info.php | 0 theme.php => templates/themes/ukko/theme.php | 0 thumb.png => templates/themes/ukko/thumb.png | Bin ukko.js => templates/themes/ukko/ukko.js | 0 4 files changed, 0 insertions(+), 0 deletions(-) rename info.php => templates/themes/ukko/info.php (100%) rename theme.php => templates/themes/ukko/theme.php (100%) rename thumb.png => templates/themes/ukko/thumb.png (100%) rename ukko.js => templates/themes/ukko/ukko.js (100%) diff --git a/info.php b/templates/themes/ukko/info.php similarity index 100% rename from info.php rename to templates/themes/ukko/info.php diff --git a/theme.php b/templates/themes/ukko/theme.php similarity index 100% rename from theme.php rename to templates/themes/ukko/theme.php diff --git a/thumb.png b/templates/themes/ukko/thumb.png similarity index 100% rename from thumb.png rename to templates/themes/ukko/thumb.png diff --git a/ukko.js b/templates/themes/ukko/ukko.js similarity index 100% rename from ukko.js rename to templates/themes/ukko/ukko.js From 0e490407e18679de2458647b891edaeb664a2f8f Mon Sep 17 00:00:00 2001 From: lanc33 Date: Wed, 29 May 2013 19:16:37 -0300 Subject: [PATCH 13/89] Fixes #59 by making quick-reply.js agnostic to the value of $config['button_reply']. --- js/quick-reply.js | 2 +- templates/index.html | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/js/quick-reply.js b/js/quick-reply.js index dc48a743..bc36ca48 100644 --- a/js/quick-reply.js +++ b/js/quick-reply.js @@ -17,7 +17,7 @@ $(document).ready(function(){ return; // not index txt_new_topic = $('form[name=post] input[type=submit]').val(); - txt_new_reply = txt_new_topic == 'Submit' ? txt_new_topic : 'New Reply'; + txt_new_reply = txt_new_topic == 'Submit' ? txt_new_topic : new_reply_string; undo_quick_reply = function() { $('div.banner').remove(); diff --git a/templates/index.html b/templates/index.html index 761227ed..112756d1 100644 --- a/templates/index.html +++ b/templates/index.html @@ -10,6 +10,11 @@ {% if config.default_stylesheet.1 != '' %}{% endif %} {% if not nojavascript %} + {% if config.quick_reply %} + + {% endif %} {% if not config.additional_javascript_compile %} {% for javascript in config.additional_javascript %}{% endfor %} {% endif %} From b85fc7d102bc17797f53858457b019f4934a03bc Mon Sep 17 00:00:00 2001 From: czaks Date: Fri, 14 Jun 2013 23:57:04 -0400 Subject: [PATCH 14/89] generic boardlist for overboard --- templates/boardlist.html | 1 + 1 file changed, 1 insertion(+) create mode 100644 templates/boardlist.html diff --git a/templates/boardlist.html b/templates/boardlist.html new file mode 100644 index 00000000..62646845 --- /dev/null +++ b/templates/boardlist.html @@ -0,0 +1 @@ +I'm your overboard boardlist. You can put here anything and I reside in templates/boardlist.html From 8b952fe97fc0ead62eb944e8aa62b71852d9adf5 Mon Sep 17 00:00:00 2001 From: czaks Date: Sat, 15 Jun 2013 00:04:08 -0400 Subject: [PATCH 15/89] overboard: missed templates/index.html --- templates/index.html | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/templates/index.html b/templates/index.html index eaed3666..059abc5e 100644 --- a/templates/index.html +++ b/templates/index.html @@ -20,7 +20,11 @@ {% include 'attention_bar.html' %} - {% include 'post_form.html' %} + {% if not no_post_form %} + {% include 'post_form.html' %} + {% else %} + {% include 'boardlist.html' %} + {% endif %} {% if config.blotter %}
{{ config.blotter }}
{% endif %}
From ba424698e0f9e79da93b6c54573a67e12fa363e5 Mon Sep 17 00:00:00 2001 From: czaks Date: Sat, 15 Jun 2013 00:22:13 -0400 Subject: [PATCH 16/89] header abstraction: abstracted also in thread.html --- templates/page.html | 2 +- templates/thread.html | 28 +--------------------------- 2 files changed, 2 insertions(+), 28 deletions(-) diff --git a/templates/page.html b/templates/page.html index 6e7a8a18..07eea62e 100644 --- a/templates/page.html +++ b/templates/page.html @@ -1,8 +1,8 @@ - {% include 'header.html' %} + {% include 'header.html' %} {{ title }} diff --git a/templates/thread.html b/templates/thread.html index 0997f668..4e2a95a1 100644 --- a/templates/thread.html +++ b/templates/thread.html @@ -2,34 +2,8 @@ - - {% if config.url_favicon %}{% endif %} + {% include 'header.html' %} {{ board.url }} - {{ board.name }} - - {% if config.meta_keywords %}{% endif %} - {% if config.default_stylesheet.1 != '' %}{% endif %} - - {% if not nojavascript %} - - {% if not config.additional_javascript_compile %} - {% for javascript in config.additional_javascript %}{% endfor %} - {% endif %} - {% endif %} - {% if config.recaptcha %}{% endif %} {{ boardlist.top }} From ef66fd62b4d5aca67a9a3f3442524f2c401d5e98 Mon Sep 17 00:00:00 2001 From: czaks Date: Sat, 15 Jun 2013 00:37:12 -0400 Subject: [PATCH 17/89] inline-expanding.js: don't set max height --- js/inline-expanding.js | 1 - 1 file changed, 1 deletion(-) diff --git a/js/inline-expanding.js b/js/inline-expanding.js index f6714d7f..ec7978a7 100644 --- a/js/inline-expanding.js +++ b/js/inline-expanding.js @@ -16,7 +16,6 @@ onready(function(){ for(var i = 0; i < link.length; i++) { if(typeof link[i] == "object" && link[i].childNodes[0].src && link[i].className != 'file') { link[i].childNodes[0].style.maxWidth = '95%'; - link[i].childNodes[0].style.maxHeight = '95%'; link[i].onclick = function(e) { if(e.which == 2) { return true; From 9b3eb9c2cabe239b470b97619958bb149fc70d33 Mon Sep 17 00:00:00 2001 From: czaks Date: Sat, 15 Jun 2013 01:36:30 -0400 Subject: [PATCH 18/89] stylesheets: add photon.css by Turanga --- stylesheets/photon.css | 321 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 321 insertions(+) create mode 100644 stylesheets/photon.css diff --git a/stylesheets/photon.css b/stylesheets/photon.css new file mode 100644 index 00000000..09735d5c --- /dev/null +++ b/stylesheets/photon.css @@ -0,0 +1,321 @@ +/*https://github.com/turanga/Tinyboard/blob/efe78b81c1ffca32bcf9601d0e3877bb65c70df1/stylesheets/photon.css*/ + + +.floatiframe{ +float:left; +padding:10px; +} + + +div.boardlist { + color: #8899AA; + font-size: 12pt; + margin-top: 0px; + background-color: #DDDDDD; + border: 1px solid #cccccc; + border-radius: 4px 4px 4px 4px; + margin-top: 0; + padding: 10px; + position: fixed; + top: 0; +} +div.boardlist.bottom { + margin-top: 20px; + position: inherit; + background:inherit; +} + + + +.return1 a{ +float:left; +font-size: inherit; + +} + +div.blotter { + background: none repeat scroll 0 0 #DDDDDD; + border: 1px solid #CCCCCC; + border-radius: 5px 5px 5px 5px; + clear: both; + color: #006AB9; + font-weight: bold; + margin-bottom: 0.5em; + padding: 2px; + text-align: center; +} + + + +div.title { + margin-bottom: 0em; + clear: both; + color: #FFAB3F; + font-size: 2em; + font-weight: bold; + +} + +div.ban h2 { + border-radius: 6px 6px 6px 6px; +} + +div.ban { + background: none repeat scroll 0 0 #DDDDDD; + border: 1px solid #CCCCCC; + margin: 30px auto; + max-width: 700px; + border-radius: 7px; + +} + +form { + margin-bottom: 0px; +} + + +form { + margin-bottom: 0px; +} + +span.heading { + color: #FFAB3F; + display: block; + font-size: 12pt; + font-weight: bold; +} + +textarea#body{ + height: 136px; + width: 518px; +} + + + +html, body { + background: none; + background-color: #EEEEEE; + color: #333333; + font-family: "Trebuchet MS",Trebuchet,serif; + font-size: 12pt; +} +a { + color: #FF6600; +} +a:hover { + color: #0066FF; +} +.adminbar { + clear:both; + float:right; + font-size: .8em; +} +.adminbar a { + font-weight: bold; +} +.logo { + clear:both; + text-align:left; + font-size:2em; + font-weight: bold; + color:#FF6600; + /*width:100%;*/ +} +.theader, .passvalid { + background:#DDDDDD; + text-align:center; + padding:2px; + color:#2266AA; + clear: both; + font-weight: bold; + margin-bottom: .5em; + border: solid 1px #CCCCCC; + -moz-border-radius: 5px; +} +.postarea { +} +.rules { + font-size:0.7em; +} +.postblock { + background:transparent; + color:#002244; + font-weight:bold; +} +.footer { + text-align:center; + font-size:12px; + font-family:serif; + margin: 2em 0 0 0; +} +.dellist { + font-weight: bold; + text-align:center; +} +.delbuttons { + text-align:center; + padding-bottom:4px; +} +.managehead { + background:#DDDDDD; + color:#002244; + padding:0px; +} +.postlists { + background:#FFFFFF; + width:100%; + padding:0px; + color:#800000; +} +.row1 { + background:#DDDDDD; + color:#002244; +} +.row2 { + background:#CCCCCC; + color:#002244; +} +.unkfunc { + background:inherit; + color:#789922; +} +.reflink { + font-size: .8em; + font-weight: bold; +} +.filesize { + text-decoration:none; + color: #666666; + font-size: .8em; +} +.filetitle { + background:inherit; + font-size:1.2em; + color:#002244; + font-weight:bold; +} +.postername { + color:#004A99; + font-weight:bold; +} +.postertrip { + color:#FF3300; +} +.oldpost { + color:#CC1105; + font-weight:bold; +} +.omittedposts { + color:#666666; +} +.reply { + background:#DDDDDD; + border: solid 1px #CCCCCC; + padding: 0; + margin: 0; + -moz-border-radius: 5px; +} +blockquote { + margin: .5em .5em .5em 1em; +} +blockquote p { + margin: 0; + padding: 0; +} +.reply blockquote { + margin: .5em; +} +.doubledash { + display: none; + vertical-align:top; + clear:both; + float:left; +} +.replytitle { + font-size: 1.2em; + color:#002244; + font-weight:bold; +} +.commentpostername { + color:#004A99; + font-weight:800; +} +.thumbnailmsg { + font-size: .8em; + color:#666666; +} +hr { + border-style: solid none none none; + border-width: 1px; + border-color: #BBBBBB; +} +table { + border-style: none; +} +table td { + border-style: none; +} +.nothumb { + background-color: #FFFFFF; + border-style: dotted; + margin: .3em .5em; +} + +.abbrev { + color:#666666; +} +.highlight { + background:#EEDACB; + color:#333333; + border: 2px dashed #EE6600; +} + + +div.banner, div.banner a { + color: inherit; +} +div.banner { + background-color: inherit; +} +form table tr th { + background: none; +} + +div.post.reply { + background: none repeat scroll 0 0 #DDDDDD; + border: 1px solid #CCCCCC; + border-radius: 5px 5px 5px 5px; +} +div.title,h1 { + color: #FF6600; + font-size: 32px; + font-weight: bold; +} +div.title p { + font-size: 26px; + margin: 0; +} + +h1 { + letter-spacing: inherit; +} + +div.banner { + background: none repeat scroll 0 0 #DDDDDD; + border: 1px solid #CCCCCC; + border-radius: 5px 5px 5px 5px; + clear: both; + color: #2266AA; + font-weight: bold; + margin-bottom: 0.5em; + padding: 2px; + text-align: center; +} + +form table tr td div { + padding-left: 0px; + +} +.recaptchatable .recaptcha_image_cell { + padding: 0px !important; +} From 1d76164e291a6f73378e33fa1f70f804acad0838 Mon Sep 17 00:00:00 2001 From: czaks Date: Sat, 15 Jun 2013 01:39:39 -0400 Subject: [PATCH 19/89] javascripts: fixed interactions (BEWARE, inline-expanding.js now requires jquery! fix your configs) --- js/expand.js | 1 + js/inline-expanding.js | 59 ++++++++++++++++++++++++------------------ js/show-backlinks.js | 4 +++ 3 files changed, 39 insertions(+), 25 deletions(-) diff --git a/js/expand.js b/js/expand.js index 05aece95..d78cea9a 100644 --- a/js/expand.js +++ b/js/expand.js @@ -35,6 +35,7 @@ $(document).ready(function(){ } last_expanded = $(this); + $(document).trigger('new_post', this); } }); $('Hide expanded replies.') diff --git a/js/inline-expanding.js b/js/inline-expanding.js index ec7978a7..ef84e806 100644 --- a/js/inline-expanding.js +++ b/js/inline-expanding.js @@ -6,41 +6,50 @@ * Copyright (c) 2012 Michael Save * * Usage: + * $config['additional_javascript'][] = 'js/jquery.min.js'; * $config['additional_javascript'][] = 'js/inline-expanding.js'; * */ onready(function(){ - var link = document.getElementsByTagName('a'); + var inline_expand_post = function() { + var link = this.getElementsByTagName('a'); - for(var i = 0; i < link.length; i++) { - if(typeof link[i] == "object" && link[i].childNodes[0].src && link[i].className != 'file') { - link[i].childNodes[0].style.maxWidth = '95%'; - link[i].onclick = function(e) { - if(e.which == 2) { - return true; - } - if(!this.tag) { - this.tag = this.childNodes[0].src; - this.childNodes[0].src = this.href; - this.childNodes[0].style.width = 'auto'; - this.childNodes[0].style.height = 'auto'; - this.childNodes[0].style.opacity = '0.4'; - this.childNodes[0].style.filter = 'alpha(opacity=40)'; - this.childNodes[0].onload = function() { - this.style.opacity = '1'; - this.style.filter = ''; + for(var i = 0; i < link.length; i++) { + if(typeof link[i] == "object" && link[i].childNodes[0].src && link[i].className != 'file') { + link[i].childNodes[0].style.maxWidth = '95%'; + link[i].onclick = function(e) { + if(e.which == 2) { + return true; + } + if(!this.tag) { + this.tag = this.childNodes[0].src; + this.childNodes[0].src = this.href; + this.childNodes[0].style.width = 'auto'; + this.childNodes[0].style.height = 'auto'; + this.childNodes[0].style.opacity = '0.4'; + this.childNodes[0].style.filter = 'alpha(opacity=40)'; + this.childNodes[0].onload = function() { + this.style.opacity = '1'; + this.style.filter = ''; + } + } else { + this.childNodes[0].src = this.tag; + this.childNodes[0].style.width = 'auto'; + this.childNodes[0].style.height = 'auto'; + this.tag = ''; } - } else { - this.childNodes[0].src = this.tag; - this.childNodes[0].style.width = 'auto'; - this.childNodes[0].style.height = 'auto'; - this.tag = ''; + return false; } - return false; } - } } + + $('div[id^="thread_"]').each(inline_expand_post); + + // allow to work with auto-reload.js, etc. + $(document).bind('new_post', function(e, post) { + inline_expand_post.call(post); + }); }); diff --git a/js/show-backlinks.js b/js/show-backlinks.js index e6e17e4f..4ead494b 100644 --- a/js/show-backlinks.js +++ b/js/show-backlinks.js @@ -46,5 +46,9 @@ onready(function(){ }; $('div.post.reply').each(showBackLinks); + + $(document).bind('new_post', function(e, post) { + showBackLinks.call(post); + }); }); From 9f00d86f1ad0c9b6300fea6c44516c0e5a1b7a7c Mon Sep 17 00:00:00 2001 From: 55ch Date: Sat, 15 Jun 2013 07:07:16 -0400 Subject: [PATCH 20/89] Brazilian Portuguese translation for Tinyboard --- inc/locale/pt_BR/LC_MESSAGES/tinyboard.mo | Bin 0 -> 12327 bytes inc/locale/pt_BR/LC_MESSAGES/tinyboard.po | 844 ++++++++++++++++++++++ 2 files changed, 844 insertions(+) create mode 100644 inc/locale/pt_BR/LC_MESSAGES/tinyboard.mo create mode 100644 inc/locale/pt_BR/LC_MESSAGES/tinyboard.po diff --git a/inc/locale/pt_BR/LC_MESSAGES/tinyboard.mo b/inc/locale/pt_BR/LC_MESSAGES/tinyboard.mo new file mode 100644 index 0000000000000000000000000000000000000000..3bb6778be52ae4702ed016b249c024d500b0f3f2 GIT binary patch literal 12327 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 literal 0 HcmV?d00001 diff --git a/inc/locale/pt_BR/LC_MESSAGES/tinyboard.po b/inc/locale/pt_BR/LC_MESSAGES/tinyboard.po new file mode 100644 index 00000000..c2ad38a2 --- /dev/null +++ b/inc/locale/pt_BR/LC_MESSAGES/tinyboard.po @@ -0,0 +1,844 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-04-21 11:29-0400\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural==(n != 1);n" + +#: ../../inc/lib/gettext/examples/pigs_dropin.php:77 +msgid "" +"This is how the story goes.\n" +"\n" +msgstr "Era uma vez\n\n" + +#: ../../inc/functions.php:1046 ../../inc/functions.php:1060 +msgid "Previous" +msgstr "Anterior" + +#: ../../inc/functions.php:1065 ../../inc/functions.php:1074 +msgid "Next" +msgstr "Proximo" + +#: ../../inc/display.php:91 ../../inc/mod/pages.php:62 +msgid "Login" +msgstr "Login" + +#: ../../inc/config.php:687 +msgid "Lurk some more before posting." +msgstr "Lurke mais antes de postar." + +#: ../../inc/config.php:688 +msgid "You look like a bot." +msgstr "Você não parece humano." + +#: ../../inc/config.php:689 +msgid "Your browser sent an invalid or no HTTP referer." +msgstr "Seu browser enviou um referial HTTP inválido ou não enviou o referencial." + +#: ../../inc/config.php:690 +#, php-format +msgid "The %s field was too long." +msgstr "O campo %s é longo demais." + +#: ../../inc/config.php:691 +msgid "The body was too long." +msgstr "O corpo do texto é longo demais." + +#: ../../inc/config.php:692 +msgid "The body was too short or empty." +msgstr "O corpo do texto é pequeno demais ou inexistente." + +#: ../../inc/config.php:693 +msgid "You must upload an image." +msgstr "Você deve fazer upload de uma imagem." + +#: ../../inc/config.php:694 +msgid "The server failed to handle your upload." +msgstr "O servidor não conseguiu lidar com seu upload." + +#: ../../inc/config.php:695 +msgid "Unsupported image format." +msgstr "Tipo de imagem não aceito." + +#: ../../inc/config.php:696 +msgid "Invalid board!" +msgstr "Board inválida!" + +#: ../../inc/config.php:697 +msgid "Thread specified does not exist." +msgstr "O tópico especificado não existe.." + +#: ../../inc/config.php:698 +msgid "Thread locked. You may not reply at this time." +msgstr "Tópico trancado, você não pode postar." + +#: ../../inc/config.php:699 +msgid "You didn't make a post." +msgstr "Você não escreveu uma mensagem." + +#: ../../inc/config.php:700 +msgid "Flood detected; Post discarded." +msgstr "Flood detectado; Sua mensagem foi descartada." + +#: ../../inc/config.php:701 +msgid "Your request looks automated; Post discarded." +msgstr "Sua requisição parece automatizada; Mensagem descartada." + +#: ../../inc/config.php:702 +msgid "Unoriginal content!" +msgstr "Conteudo não original!" + +#: ../../inc/config.php:703 +#, php-format +msgid "Unoriginal content! You have been muted for %d seconds." +msgstr "Conteudo não original! Você está impedido de postar por %d segundos." + +#: ../../inc/config.php:704 +#, php-format +msgid "You are muted! Expires in %d seconds." +msgstr "Você está impedido de postar! Expira em %d segundos." + +#: ../../inc/config.php:705 +#, php-format +msgid "Your IP address is listed in %s." +msgstr "Seu IP está listado em %s." + +#: ../../inc/config.php:706 +msgid "Too many links; flood detected." +msgstr "Links demais; Flood detectado." + +#: ../../inc/config.php:707 +msgid "Too many cites; post discarded." +msgstr "Citações demais; Post descartado." + +#: ../../inc/config.php:708 +msgid "Too many cross-board links; post discarded." +msgstr "Links entre boards demais; Post descartado." + +#: ../../inc/config.php:709 +msgid "You didn't select anything to delete." +msgstr "Você não selecionou nada para deletar." + +#: ../../inc/config.php:710 +msgid "You didn't select anything to report." +msgstr "Você não selecionou nada para denunciar." + +#: ../../inc/config.php:711 +msgid "You can't report that many posts at once." +msgstr "Você não pode denunciar tantas mensagens ao mesmo tempo." + +#: ../../inc/config.php:712 +msgid "Wrong password…" +msgstr "Senha incorreta…" + +#: ../../inc/config.php:713 +msgid "Invalid image." +msgstr "Imagem inválida." + +#: ../../inc/config.php:714 +msgid "Unknown file extension." +msgstr "Extenção de arquivo desconhecida." + +#: ../../inc/config.php:715 +msgid "Maximum file size: %maxsz% bytes
Your file's size: %filesz% bytes" +msgstr "Tamanho maximo de arquivos: %maxsz% bytes
O tamanho do seu arquivo: %filesz% bytes" + +#: ../../inc/config.php:716 +msgid "The file was too big." +msgstr "Seu arquivo é grande demais." + +#: ../../inc/config.php:717 +msgid "Invalid archive!" +msgstr "Arquivo inválido!" + +#: ../../inc/config.php:718 +#, php-format +msgid "That file already exists!" +msgstr "O arquivo já existe!" + +#: ../../inc/config.php:719 +#, php-format +msgid "That file already exists in this thread!" +msgstr "O arquivo já existe neste tópico!" + +#: ../../inc/config.php:720 +#, php-format +msgid "You'll have to wait another %s before deleting that." +msgstr "Você terá que esperar %s segundos antes de deletar isso." + +#: ../../inc/config.php:721 +msgid "MIME type detection XSS exploit (IE) detected; post discarded." +msgstr "Exploit XSS do tipo MIME (IE) detectado; mensagem descartada." + +#: ../../inc/config.php:722 +msgid "Couldn't make sense of the URL of the video you tried to embed." +msgstr "Não consegui processar a URL do video que você tentou integrar" + +#: ../../inc/config.php:723 +msgid "You seem to have mistyped the verification." +msgstr "Você errou o codigo de verificação." + +#: ../../inc/config.php:726 +msgid "Invalid username and/or password." +msgstr "Login e/ou senha inválido(s)." + +#: ../../inc/config.php:727 +msgid "You are not a mod…" +msgstr "Você não é mod…" + +#: ../../inc/config.php:728 +msgid "" +"Invalid username and/or password. Your user may have been deleted or changed." +msgstr "Login e/ou senha inválido(s). Seu login deve ter sido mudado ou removido." + +#: ../../inc/config.php:729 +msgid "Invalid/malformed cookies." +msgstr "Cookies inválidos ou mal formados." + +#: ../../inc/config.php:730 +msgid "Your browser didn't submit an input when it should have." +msgstr "Seu browser não enviou uma entrada quando ele deveria." + +#: ../../inc/config.php:731 +#, php-format +msgid "The %s field is required." +msgstr "O campo %s é necessário." + +#: ../../inc/config.php:732 +#, php-format +msgid "The %s field was invalid." +msgstr "O campo %s é inválido." + +#: ../../inc/config.php:733 +#, php-format +msgid "There is already a %s board." +msgstr "A board %s já existe." + +#: ../../inc/config.php:734 +msgid "You don't have permission to do that." +msgstr "Você não tem permissão para fazer isso." + +#: ../../inc/config.php:735 +msgid "That post doesn't exist…" +msgstr "Este post já existe…" + +#: ../../inc/config.php:736 +msgid "Page not found." +msgstr "Pagina não encontrada." + +#: ../../inc/config.php:737 +#, php-format +msgid "That mod already exists!" +msgstr "Este mod já existe!" + +#: ../../inc/config.php:738 +msgid "That theme doesn't exist!" +msgstr "Este tema não existe!" + +#: ../../inc/config.php:739 +msgid "Invalid security token! Please go back and try again." +msgstr "Token de segurança inválido! Retorne e tente de novo." + +#: ../../inc/mod/pages.php:66 +msgid "Confirm action" +msgstr "Confirmar ação" + +#: ../../inc/mod/pages.php:110 +msgid "Could not find current version! (Check .installed)" +msgstr "Não foi possivel encontrar a versão atual! (Cheque o .installed)" + +#: ../../inc/mod/pages.php:151 +msgid "Dashboard" +msgstr "Dashboard" + +#: ../../inc/mod/pages.php:228 +msgid "Edit board" +msgstr "Editar board" + +#: ../../inc/mod/pages.php:261 +msgid "Couldn't open board after creation." +msgstr "Não foi possivel abrir a board após a criação." + +#: ../../inc/mod/pages.php:276 +msgid "New board" +msgstr "Nova board" + +#: ../../inc/mod/pages.php:322 +#: ../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:96 +msgid "Noticeboard" +msgstr "Quadro de noticias" + +#: ../../inc/mod/pages.php:382 +#: ../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:166 +msgid "News" +msgstr "Noticias" + +#: ../../inc/mod/pages.php:422 ../../inc/mod/pages.php:449 +#: ../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:255 +msgid "Moderation log" +msgstr "Log da moderação" + +#: ../../inc/mod/pages.php:592 +#: ../../templates/cache/24/a0/f1ddafed7a8f9625e747a5ca33f5.php:247 +#: ../../templates/cache/18/9c/c365d711719f494c684aab98a4ae.php:65 +msgid "IP" +msgstr "IP" + +#: ../../inc/mod/pages.php:602 ../../inc/mod/pages.php:993 +#: ../../templates/cache/24/a0/f1ddafed7a8f9625e747a5ca33f5.php:377 +msgid "New ban" +msgstr "Nova expulsão" + +#: ../../inc/mod/pages.php:670 +#: ../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:224 +msgid "Ban list" +msgstr "Lista de expulsões" + +#: ../../inc/mod/pages.php:765 +msgid "Target and source board are the same." +msgstr "Board alvo e fonte são as mesmas." + +#: ../../inc/mod/pages.php:927 +msgid "Impossible to move thread; there is only one board." +msgstr "Impossivel de mover o tópico; Só existe uma board." + +#: ../../inc/mod/pages.php:931 +msgid "Move thread" +msgstr "Mover tópico" + +#: ../../inc/mod/pages.php:1045 +msgid "Edit post" +msgstr "Editar mensagem" + +#: ../../inc/mod/pages.php:1271 ../../inc/mod/pages.php:1320 +msgid "Edit user" +msgstr "Editar usuário" + +#: ../../inc/mod/pages.php:1333 +#: ../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:232 +msgid "Manage users" +msgstr "Administrar usuários" + +#: ../../inc/mod/pages.php:1395 ../../inc/mod/pages.php:1467 +msgid "New PM for" +msgstr "Nova MP para" + +#: ../../inc/mod/pages.php:1399 +msgid "Private message" +msgstr "Mensagem pessoal" + +#: ../../inc/mod/pages.php:1420 +#: ../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:171 +msgid "PM inbox" +msgstr "Entrada de MP" + +#: ../../inc/mod/pages.php:1531 ../../inc/mod/pages.php:1535 +#: ../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:263 +msgid "Rebuild" +msgstr "Reconstruir" + +#: ../../inc/mod/pages.php:1621 +#: ../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:207 +msgid "Report queue" +msgstr "Fila de denuncias" + +#: ../../inc/mod/pages.php:1743 +msgid "Config editor" +msgstr "Editor de configurações" + +#: ../../inc/mod/pages.php:1753 +msgid "Themes directory doesn't exist!" +msgstr "Diretório de temas não existe!" + +#: ../../inc/mod/pages.php:1755 +msgid "Cannot open themes directory; check permissions." +msgstr "Não é possivel abrir diretorio de temas; reveja suas permissões." + +#: ../../inc/mod/pages.php:1769 +#: ../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:247 +msgid "Manage themes" +msgstr "Administrar temas" + +#: ../../inc/mod/pages.php:1831 +#, php-format +msgid "Installed theme: %s" +msgstr "Tema instalado: %s" + +#: ../../inc/mod/pages.php:1841 +#, php-format +msgid "Configuring theme: %s" +msgstr "Configurando tema: %s" + +#: ../../inc/mod/pages.php:1869 +#, php-format +msgid "Rebuilt theme: %s" +msgstr "Reconstruir tema: %s" + +#: ../../inc/mod/pages.php:1908 +msgid "Debug: Anti-spam" +msgstr "Debug: Anti-spam" + +#: ../../inc/mod/pages.php:1932 +msgid "Debug: Recent posts" +msgstr "Debug: Mensagens recentes" + +#: ../../inc/mod/pages.php:1956 +msgid "Debug: SQL" +msgstr "" + +#: ../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:19 +#: ../../templates/cache/c5/a7/fac83da087ee6e24edaf09e01122.php:29 +msgid "Boards" +msgstr "Boards" + +#: ../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:57 +#: ../../templates/cache/c5/a7/fac83da087ee6e24edaf09e01122.php:183 +msgid "edit" +msgstr "editar" + +#: ../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:74 +msgid "Create new board" +msgstr "Criar nova board" + +#: ../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:84 +msgid "Messages" +msgstr "Mensagens" + +#: ../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:120 +#: ../../templates/cache/26/6f/05ca0da8ac09e2c2216cba2b6f95.php:98 +#: ../../templates/cache/c8/8b/242bf87b3b6a29a67cdd09a3afeb.php:125 +msgid "no subject" +msgstr "sem assunto" + +#: ../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:161 +msgid "View all noticeboard entries" +msgstr "Ver todas as noticias do quadro de noticias" + +#: ../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:192 +msgid "Administration" +msgstr "Administração" + +#: ../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:239 +msgid "Change password" +msgstr "Mudar senha" + +#: ../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:271 +msgid "Configuration" +msgstr "Configuração" + +#: ../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:282 +#: ../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:293 +msgid "Search" +msgstr "Procurar" + +#: ../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:289 +msgid "Phrase:" +msgstr "Frase:" + +#: ../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:297 +msgid "" +"(Search is case-insensitive, and based on keywords. To match exact phrases, " +"use \"quotes\". Use an asterisk (*) for wildcard.)" +msgstr "" +"(A procura não diferencia maiúsculas de minusculas, e baseia-se em palavras chave. para procurar por frases exatas, " +"use \"quotes\". Utilize um asterisco (*) como coringa.)" + +#: ../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:309 +msgid "Debug" +msgstr "Debug" + +#: ../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:313 +msgid "Anti-spam" +msgstr "Anti-spam" + +#: ../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:316 +msgid "Recent posts" +msgstr "Mensagens recentes" + +#: ../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:322 +msgid "SQL" +msgstr "SQL" + +#: ../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:360 +msgid "User account" +msgstr "Conta de usuário" + +#: ../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:365 +msgid "Logout" +msgstr "Sair" + +#: ../../templates/cache/26/6f/05ca0da8ac09e2c2216cba2b6f95.php:21 +#: ../../templates/cache/c8/8b/242bf87b3b6a29a67cdd09a3afeb.php:21 +msgid "New post" +msgstr "Nova mensagem" + +#: ../../templates/cache/26/6f/05ca0da8ac09e2c2216cba2b6f95.php:27 +#: ../../templates/cache/c8/8b/242bf87b3b6a29a67cdd09a3afeb.php:31 +#: ../../templates/cache/c8/8b/242bf87b3b6a29a67cdd09a3afeb.php:36 +#: ../../templates/cache/39/42/cbc36382096edfa72a8bc26e4514.php:27 +#: ../../templates/cache/0c/37/9331df01df7c2986d77a02d3beb0.php:55 +msgid "Name" +msgstr "Nome" + +#: ../../templates/cache/26/6f/05ca0da8ac09e2c2216cba2b6f95.php:36 +#: ../../templates/cache/c8/8b/242bf87b3b6a29a67cdd09a3afeb.php:63 +#: ../../templates/cache/39/42/cbc36382096edfa72a8bc26e4514.php:53 +#: ../../templates/cache/0c/37/9331df01df7c2986d77a02d3beb0.php:98 +msgid "Subject" +msgstr "Assunto" + +#: ../../templates/cache/26/6f/05ca0da8ac09e2c2216cba2b6f95.php:42 +#: ../../templates/cache/c8/8b/242bf87b3b6a29a67cdd09a3afeb.php:69 +msgid "Body" +msgstr "Mensagem" + +#: ../../templates/cache/26/6f/05ca0da8ac09e2c2216cba2b6f95.php:49 +msgid "Post to noticeboard" +msgstr "Postar no quadro de notícias" + +#: ../../templates/cache/26/6f/05ca0da8ac09e2c2216cba2b6f95.php:73 +#: ../../templates/cache/c8/8b/242bf87b3b6a29a67cdd09a3afeb.php:100 +msgid "delete" +msgstr "deletar" + +#: ../../templates/cache/26/6f/05ca0da8ac09e2c2216cba2b6f95.php:106 +#: ../../templates/cache/c8/8b/242bf87b3b6a29a67cdd09a3afeb.php:133 +msgid "by" +msgstr "por" + +#: ../../templates/cache/26/6f/05ca0da8ac09e2c2216cba2b6f95.php:118 +#: ../../templates/cache/24/a0/f1ddafed7a8f9625e747a5ca33f5.php:112 +#: ../../templates/cache/24/a0/f1ddafed7a8f9625e747a5ca33f5.php:344 +msgid "deleted?" +msgstr "deletado?" + +#: ../../templates/cache/26/6f/05ca0da8ac09e2c2216cba2b6f95.php:125 +#: ../../templates/cache/c8/8b/242bf87b3b6a29a67cdd09a3afeb.php:136 +msgid "at" +msgstr "em" + +#: ../../templates/cache/24/a0/f1ddafed7a8f9625e747a5ca33f5.php:74 +#: ../../templates/cache/24/a0/f1ddafed7a8f9625e747a5ca33f5.php:169 +#: ../../templates/cache/24/a0/f1ddafed7a8f9625e747a5ca33f5.php:331 +msgid "Staff" +msgstr "Equipe" + +#: ../../templates/cache/24/a0/f1ddafed7a8f9625e747a5ca33f5.php:77 +#: ../../templates/cache/24/a0/f1ddafed7a8f9625e747a5ca33f5.php:179 +msgid "Note" +msgstr "Nota" + +#: ../../templates/cache/24/a0/f1ddafed7a8f9625e747a5ca33f5.php:80 +msgid "Date" +msgstr "Data" + +#: ../../templates/cache/24/a0/f1ddafed7a8f9625e747a5ca33f5.php:86 +msgid "Actions" +msgstr "Ações" + +#: ../../templates/cache/24/a0/f1ddafed7a8f9625e747a5ca33f5.php:142 +msgid "remove" +msgstr "remover" + +#: ../../templates/cache/24/a0/f1ddafed7a8f9625e747a5ca33f5.php:189 +msgid "New note" +msgstr "Nova nota" + +#: ../../templates/cache/24/a0/f1ddafed7a8f9625e747a5ca33f5.php:226 +msgid "Status" +msgstr "Situação" + +#: ../../templates/cache/24/a0/f1ddafed7a8f9625e747a5ca33f5.php:233 +msgid "Expired" +msgstr "Expirado" + +#: ../../templates/cache/24/a0/f1ddafed7a8f9625e747a5ca33f5.php:238 +msgid "Active" +msgstr "Ativo" + +#: ../../templates/cache/24/a0/f1ddafed7a8f9625e747a5ca33f5.php:256 +#: ../../templates/cache/82/40/4c4a4b82f787181e6500ce83494d.php:32 +#: ../../templates/cache/9c/7b/891291bc84f8844c30cefdb949cf.php:30 +#: ../../templates/cache/18/9c/c365d711719f494c684aab98a4ae.php:90 +msgid "Reason" +msgstr "Razão" + +#: ../../templates/cache/24/a0/f1ddafed7a8f9625e747a5ca33f5.php:269 +msgid "no reason" +msgstr "sem razão especificada" + +#: ../../templates/cache/24/a0/f1ddafed7a8f9625e747a5ca33f5.php:278 +#: ../../templates/cache/9c/7b/891291bc84f8844c30cefdb949cf.php:20 +#: ../../templates/cache/18/9c/c365d711719f494c684aab98a4ae.php:142 +msgid "Board" +msgstr "Board" + +#: ../../templates/cache/24/a0/f1ddafed7a8f9625e747a5ca33f5.php:291 +#: ../../templates/cache/18/9c/c365d711719f494c684aab98a4ae.php:150 +#: ../../templates/cache/c5/a7/fac83da087ee6e24edaf09e01122.php:83 +msgid "all boards" +msgstr "todas as boards" + +#: ../../templates/cache/24/a0/f1ddafed7a8f9625e747a5ca33f5.php:300 +msgid "Set" +msgstr "Configurar" + +#: ../../templates/cache/24/a0/f1ddafed7a8f9625e747a5ca33f5.php:309 +msgid "Expires" +msgstr "Expira em" + +#: ../../templates/cache/24/a0/f1ddafed7a8f9625e747a5ca33f5.php:322 +#: ../../templates/cache/c5/a7/fac83da087ee6e24edaf09e01122.php:137 +msgid "never" +msgstr "nunca" + +#: ../../templates/cache/24/a0/f1ddafed7a8f9625e747a5ca33f5.php:357 +msgid "Remove ban" +msgstr "Remover expulsão" + +#: ../../templates/cache/72/55/0d64283f30702de83ecfcb71f86a.php:25 +msgid "There are no reports." +msgstr "Não há denúncias no momento." + +#: ../../templates/cache/82/40/4c4a4b82f787181e6500ce83494d.php:19 +msgid "Delete Post" +msgstr "Deletar Mensagem" + +#: ../../templates/cache/82/40/4c4a4b82f787181e6500ce83494d.php:22 +#: ../../templates/cache/0c/37/9331df01df7c2986d77a02d3beb0.php:218 +msgid "File" +msgstr "Arquivo" + +#: ../../templates/cache/82/40/4c4a4b82f787181e6500ce83494d.php:23 +#: ../../templates/cache/04/54/656aa217f895c90eae78024fa060.php:41 +#: ../../templates/cache/0c/37/9331df01df7c2986d77a02d3beb0.php:310 +msgid "Password" +msgstr "Senha" + +#: ../../templates/cache/82/40/4c4a4b82f787181e6500ce83494d.php:27 +msgid "Delete" +msgstr "Deletar" + +#: ../../templates/cache/82/40/4c4a4b82f787181e6500ce83494d.php:36 +msgid "Report" +msgstr "Denunciar" + +#: ../../templates/cache/04/54/656aa217f895c90eae78024fa060.php:28 +#: ../../templates/cache/c5/a7/fac83da087ee6e24edaf09e01122.php:23 +msgid "Username" +msgstr "Usuário" + +#: ../../templates/cache/04/54/656aa217f895c90eae78024fa060.php:52 +msgid "Continue" +msgstr "Prosseguir" + +#: ../../templates/cache/f5/e3/343716327c6183713f70a3fb57f1.php:94 +#: ../../templates/cache/aa/f6/f10fd83961bcd8c947af6ddf919d.php:175 +#: ../../templates/cache/62/8c/21348d46377c3e1b3f8c476ba376.php:63 +msgid "Return to dashboard" +msgstr "Voltar à dashboard" + +#: ../../templates/cache/9c/7b/891291bc84f8844c30cefdb949cf.php:36 +msgid "Report date" +msgstr "Data da denúncia" + +#: ../../templates/cache/9c/7b/891291bc84f8844c30cefdb949cf.php:45 +msgid "Reported by" +msgstr "Denunciado por" + +#: ../../templates/cache/9c/7b/891291bc84f8844c30cefdb949cf.php:63 +msgid "Discard abuse report" +msgstr "Descartar denúncia desnecessária" + +#: ../../templates/cache/9c/7b/891291bc84f8844c30cefdb949cf.php:80 +msgid "Discard all abuse reports by this IP address" +msgstr "Descartar todas denúncias desnecessárias deste IP" + +#: ../../templates/cache/aa/f6/f10fd83961bcd8c947af6ddf919d.php:183 +msgid "Posting mode: Reply" +msgstr "Modo de postagem: Resposta" + +#: ../../templates/cache/aa/f6/f10fd83961bcd8c947af6ddf919d.php:186 +#: ../../templates/cache/aa/f6/f10fd83961bcd8c947af6ddf919d.php:232 +msgid "Return" +msgstr "Voltar" + +#: ../../templates/cache/c8/8b/242bf87b3b6a29a67cdd09a3afeb.php:76 +msgid "Post news entry" +msgstr "Postar nova notícia" + +#: ../../templates/cache/18/9c/c365d711719f494c684aab98a4ae.php:66 +msgid "(or subnet)" +msgstr "(ou subnet)" + +#: ../../templates/cache/18/9c/c365d711719f494c684aab98a4ae.php:80 +msgid "hidden" +msgstr "oculto" + +#: ../../templates/cache/18/9c/c365d711719f494c684aab98a4ae.php:107 +msgid "Message" +msgstr "Mensagem" + +#: ../../templates/cache/18/9c/c365d711719f494c684aab98a4ae.php:117 +msgid "public; attached to post" +msgstr "público; anexado à mensagem" + +#: ../../templates/cache/18/9c/c365d711719f494c684aab98a4ae.php:133 +msgid "Length" +msgstr "Tamanho" + +#: ../../templates/cache/18/9c/c365d711719f494c684aab98a4ae.php:192 +msgid "New Ban" +msgstr "Nova Expulsão" + +#: ../../templates/cache/c5/a7/fac83da087ee6e24edaf09e01122.php:20 +msgid "ID" +msgstr "ID" + +#: ../../templates/cache/c5/a7/fac83da087ee6e24edaf09e01122.php:26 +msgid "Type" +msgstr "Tipo" + +#: ../../templates/cache/c5/a7/fac83da087ee6e24edaf09e01122.php:35 +msgid "Last action" +msgstr "Ultima ação" + +#: ../../templates/cache/c5/a7/fac83da087ee6e24edaf09e01122.php:61 +msgid "Janitor" +msgstr "Faxineiro" + +#: ../../templates/cache/c5/a7/fac83da087ee6e24edaf09e01122.php:64 +msgid "Mod" +msgstr "Moderador" + +#: ../../templates/cache/c5/a7/fac83da087ee6e24edaf09e01122.php:67 +msgid "Admin" +msgstr "Administrador" + +#: ../../templates/cache/c5/a7/fac83da087ee6e24edaf09e01122.php:78 +msgid "none" +msgstr "nenhum" + +#: ../../templates/cache/c5/a7/fac83da087ee6e24edaf09e01122.php:153 +msgid "Promote" +msgstr "Promover" + +#: ../../templates/cache/c5/a7/fac83da087ee6e24edaf09e01122.php:163 +msgid "Demote" +msgstr "Rebaixar" + +#: ../../templates/cache/c5/a7/fac83da087ee6e24edaf09e01122.php:173 +msgid "log" +msgstr "registro" + +#: ../../templates/cache/c5/a7/fac83da087ee6e24edaf09e01122.php:193 +msgid "PM" +msgstr "MP" + +#: ../../templates/cache/d8/f2/7780eb1adcdbda7e332659e3fb4f.php:105 +msgid "File:" +msgstr "Arquivo:" + +#: ../../templates/cache/d8/f2/7780eb1adcdbda7e332659e3fb4f.php:117 +#: ../../templates/cache/0c/37/9331df01df7c2986d77a02d3beb0.php:129 +msgid "Spoiler Image" +msgstr "Imagem Spoiler" + +#: ../../templates/cache/d8/f2/7780eb1adcdbda7e332659e3fb4f.php:463 +msgid "Reply" +msgstr "Responder" + +#: ../../templates/cache/d8/f2/7780eb1adcdbda7e332659e3fb4f.php:490 +msgid "1 post" +msgid_plural "%count% posts" +msgstr[0] "1 mensagem" +msgstr[1] "%count% mensagens" + +#: ../../templates/cache/d8/f2/7780eb1adcdbda7e332659e3fb4f.php:496 +msgid "and" +msgstr "e" + +#: ../../templates/cache/d8/f2/7780eb1adcdbda7e332659e3fb4f.php:507 +msgid "1 image reply" +msgid_plural "%count% image replies" +msgstr[0] "1 resposta com imagem" +msgstr[1] "%count% respostas com imagem" + +#: ../../templates/cache/d8/f2/7780eb1adcdbda7e332659e3fb4f.php:512 +msgid "omitted. Click reply to view." +msgstr "omitidas. Clique em responder para visualizar." + +#: ../../templates/cache/39/42/cbc36382096edfa72a8bc26e4514.php:40 +#: ../../templates/cache/0c/37/9331df01df7c2986d77a02d3beb0.php:76 +msgid "Email" +msgstr "E-mail" + +#: ../../templates/cache/39/42/cbc36382096edfa72a8bc26e4514.php:62 +msgid "Update" +msgstr "Atualizar" + +#: ../../templates/cache/39/42/cbc36382096edfa72a8bc26e4514.php:69 +#: ../../templates/cache/0c/37/9331df01df7c2986d77a02d3beb0.php:138 +msgid "Comment" +msgstr "Comentar" + +#: ../../templates/cache/39/42/cbc36382096edfa72a8bc26e4514.php:89 +msgid "Currently editing raw HTML." +msgstr "Editando em HTML puro." + +#: ../../templates/cache/39/42/cbc36382096edfa72a8bc26e4514.php:96 +msgid "Edit markup instead?" +msgstr "Editar markup em vez disso?" + +#: ../../templates/cache/39/42/cbc36382096edfa72a8bc26e4514.php:105 +msgid "Edit raw HTML instead?" +msgstr "Editar em HTML puro em vez disso?" + +#: ../../templates/cache/0c/37/9331df01df7c2986d77a02d3beb0.php:111 +msgid "Submit" +msgstr "Enviar" + +#: ../../templates/cache/0c/37/9331df01df7c2986d77a02d3beb0.php:159 +#: ../../templates/cache/0c/37/9331df01df7c2986d77a02d3beb0.php:185 +msgid "Verification" +msgstr "Verification" + +#: ../../templates/cache/0c/37/9331df01df7c2986d77a02d3beb0.php:236 +msgid "Embed" +msgstr "Inserir" + +#: ../../templates/cache/0c/37/9331df01df7c2986d77a02d3beb0.php:259 +msgid "Flags" +msgstr "Sinalizações" + +#: ../../templates/cache/0c/37/9331df01df7c2986d77a02d3beb0.php:268 +#: ../../templates/cache/0c/37/9331df01df7c2986d77a02d3beb0.php:271 +msgid "Sticky" +msgstr "Fixar" + +#: ../../templates/cache/0c/37/9331df01df7c2986d77a02d3beb0.php:280 +#: ../../templates/cache/0c/37/9331df01df7c2986d77a02d3beb0.php:283 +msgid "Lock" +msgstr "Trancar" + +#: ../../templates/cache/0c/37/9331df01df7c2986d77a02d3beb0.php:292 +#: ../../templates/cache/0c/37/9331df01df7c2986d77a02d3beb0.php:295 +msgid "Raw HTML" +msgstr "HTML Puro" + +#: ../../templates/cache/0c/37/9331df01df7c2986d77a02d3beb0.php:319 +msgid "(For file deletion.)" +msgstr "(Para excluir arquivos)" From 3bcc87caf294cd67f221854d1dc13065706f5a81 Mon Sep 17 00:00:00 2001 From: Macil Tech Date: Wed, 27 Mar 2013 22:09:39 +0800 Subject: [PATCH 21/89] Fix PM count caching. cache::get() returns null if the key wasn't found (at least when using the Redis cache backend). --- inc/mod/auth.php | 2 +- inc/mod/pages.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/inc/mod/auth.php b/inc/mod/auth.php index f594af4b..d4a2ea1c 100644 --- a/inc/mod/auth.php +++ b/inc/mod/auth.php @@ -125,7 +125,7 @@ if (isset($_COOKIE[$config['cookies']['mod']])) { function create_pm_header() { global $mod, $config; - if ($config['cache']['enabled'] && ($header = cache::get('pm_unread_' . $mod['id'])) !== false) { + if ($config['cache']['enabled'] && ($header = cache::get('pm_unread_' . $mod['id'])) != false) { if ($header === true) return false; diff --git a/inc/mod/pages.php b/inc/mod/pages.php index cf06e7d9..726ed735 100644 --- a/inc/mod/pages.php +++ b/inc/mod/pages.php @@ -89,7 +89,7 @@ function mod_dashboard() { } } - if (!$config['cache']['enabled'] || ($args['unread_pms'] = cache::get('pm_unreadcount_' . $mod['id'])) === false) { + if (!$config['cache']['enabled'] || ($args['unread_pms'] = cache::get('pm_unreadcount_' . $mod['id'])) == false) { $query = prepare('SELECT COUNT(*) FROM `pms` WHERE `to` = :id AND `unread` = 1'); $query->bindValue(':id', $mod['id']); $query->execute() or error(db_error($query)); From a92bb182d91ae98b2a2bc7787d5650050868f1f1 Mon Sep 17 00:00:00 2001 From: Macil Tech Date: Tue, 2 Apr 2013 17:28:04 +0800 Subject: [PATCH 22/89] Fix display issues with RTL control characters in post names, subjects, and filenames. --- inc/display.php | 33 +++++++++++++++++++ .../Twig/Extensions/Extension/Tinyboard.php | 1 + templates/post_reply.html | 8 ++--- templates/post_thread.html | 14 ++++---- 4 files changed, 45 insertions(+), 11 deletions(-) diff --git a/inc/display.php b/inc/display.php index 57110224..ab96eb26 100644 --- a/inc/display.php +++ b/inc/display.php @@ -213,6 +213,39 @@ function truncate($body, $url, $max_lines = false, $max_chars = false) { return $body; } +function bidi_cleanup($str){ + # Closes all embedded RTL and LTR unicode formatting blocks in a string so that + # it can be used inside another without controlling its direction. + # More info: http://www.iamcal.com/understanding-bidirectional-text/ + # + # LRE - U+202A - 0xE2 0x80 0xAA + # RLE - U+202B - 0xE2 0x80 0xAB + # LRO - U+202D - 0xE2 0x80 0xAD + # RLO - U+202E - 0xE2 0x80 0xAE + # + # PDF - U+202C - 0xE2 0x80 0xAC + # + $explicits = '\xE2\x80\xAA|\xE2\x80\xAB|\xE2\x80\xAD|\xE2\x80\xAE'; + $pdf = '\xE2\x80\xAC'; + + $stack = 0; + $str = preg_replace_callback("!(?$explicits)|(?$pdf)!", function($match) use (&$stack) { + if (isset($match['explicits']) && $match['explicits']) { + $stack++; + } else { + if ($stack) + $stack--; + else + return ''; + } + return $match[0]; + }, $str); + for ($i=0; $i<$stack; $i++){ + $str .= "\xE2\x80\xAC"; + } + return $str; +} + function secure_link_confirm($text, $title, $confirm_message, $href) { global $config; diff --git a/inc/lib/Twig/Extensions/Extension/Tinyboard.php b/inc/lib/Twig/Extensions/Extension/Tinyboard.php index 0a128e7b..7592d1b4 100644 --- a/inc/lib/Twig/Extensions/Extension/Tinyboard.php +++ b/inc/lib/Twig/Extensions/Extension/Tinyboard.php @@ -25,6 +25,7 @@ class Twig_Extensions_Extension_Tinyboard extends Twig_Extension 'until' => new Twig_Filter_Function('until'), 'split' => new Twig_Filter_Function('twig_split_filter'), 'push' => new Twig_Filter_Function('twig_push_filter'), + 'bidi_cleanup' => new Twig_Filter_Function('bidi_cleanup'), 'addslashes' => new Twig_Filter_Function('addslashes') ); } diff --git a/templates/post_reply.html b/templates/post_reply.html index ddd0afd4..c5735a0e 100644 --- a/templates/post_reply.html +++ b/templates/post_reply.html @@ -7,14 +7,14 @@