/** * Note: This file may contain artifacts of previous malicious infection. * However, the dangerous code has been removed, and the file is now safe to use. */ /** * @file * Pathologic text filter for Drupal. * * This input filter attempts to make sure that link and image paths will * always be correct, even when domain names change, content is moved from one * server to another, the Clean URLs feature is toggled, etc. */ /** * Implements hook_filter_info(). */ function pathologic_filter_info() { return array( 'pathologic' => array( 'title' => t('Correct URLs with Pathologic'), 'process callback' => '_pathologic_filter', 'settings callback' => '_pathologic_settings', 'default settings' => array( 'local_paths' => '', 'protocol_style' => 'full', ), // Set weight to 50 so that it will hopefully appear at the bottom of // filter lists by default. 50 is the maximum value of the weight menu // for each row in the filter table (the menu is hidden by JavaScript to // use table row dragging instead when JS is enabled). 'weight' => 50, ) ); } /** * Settings callback for Pathologic. */ function _pathologic_settings($form, &$form_state, $filter, $format, $defaults, $filters) { return array( 'reminder' => array( '#type' => 'item', '#title' => t('In most cases, Pathologic should be the last filter in the “Filter processing order” list.'), '#weight' => -10, ), 'protocol_style' => array( '#type' => 'radios', '#title' => t('Processed URL format'), '#default_value' => isset($filter->settings['protocol_style']) ? $filter->settings['protocol_style'] : $defaults['protocol_style'], '#options' => array( 'full' => t('Full URL (http://example.com/foo/bar)'), 'proto-rel' => t('Protocol relative URL (//example.com/foo/bar)'), 'path' => t('Path relative to server root (/foo/bar)'), ), '#description' => t('The Full URL option is best for stopping broken images and links in syndicated content (such as in RSS feeds), but will likely lead to problems if your site is accessible by both HTTP and HTTPS. Paths output with the Protocol relative URL option will avoid such problems, but feed readers and other software not using up-to-date standards may be confused by the paths. The Path relative to server root option will avoid problems with sites accessible by both HTTP and HTTPS with no compatibility concerns, but will absolutely not fix broken images and links in syndicated content.'), '#weight' => 10, ), 'local_paths' => array( '#type' => 'textarea', '#title' => t('All base paths for this site'), '#default_value' => isset($filter->settings['local_paths']) ? $filter->settings['local_paths'] : $defaults['local_paths'], '#description' => t('If this site is or was available at more than one base path or URL, enter them here, separated by line breaks. For example, if this site is live at http://example.com/ but has a staging version at http://dev.example.org/staging/, you would enter both those URLs here. If confused, please read Pathologic’s documentation for more information about this option and what it affects.', array('!docs' => 'http://drupal.org/node/257026')), '#weight' => 20, ), ); } /** * Pathologic filter callback. * * Previous versions of this module worked (or, rather, failed) under the * assumption that $langcode contained the language code of the node. Sadly, * this isn't the case. * @see http://drupal.org/node/1812264 * However, it turns out that the language of the current node isn't as * important as the language of the node we're linking to, and even then only * if language path prefixing (eg /ja/node/123) is in use. REMEMBER THIS IN THE * FUTURE, ALBRIGHT. * * The below code uses the @ operator before parse_url() calls because in PHP * 5.3.2 and earlier, parse_url() causes a warning of parsing fails. The @ * operator is usually a pretty strong indicator of code smell, but please don't * judge me by it in this case; ordinarily, I despise its use, but I can't find * a cleaner way to avoid this problem (using set_error_handler() could work, * but I wouldn't call that "cleaner"). Fortunately, Drupal 8 will require at * least PHP 5.3.5, so this mess doesn't have to spread into the D8 branch of * Pathologic. * @see https://drupal.org/node/2104849 * * @todo Can we do the parsing of the local path settings somehow when the * settings form is submitted instead of doing it here? */ function _pathologic_filter($text, $filter, $format, $langcode, $cache, $cache_id) { // Get the base URL and explode it into component parts. We add these parts // to the exploded local paths settings later. global $base_url; $base_url_parts = @parse_url($base_url . '/'); // Since we have to do some gnarly processing even before we do the *really* // gnarly processing, let's static save the settings - it'll speed things up // if, for example, we're importing many nodes, and not slow things down too // much if it's just a one-off. But since different input formats will have // different settings, we build an array of settings, keyed by format ID. $cached_settings = &drupal_static(__FUNCTION__, array()); if (!isset($cached_settings[$filter->format])) { $filter->settings['local_paths_exploded'] = array(); if ($filter->settings['local_paths'] !== '') { // Build an array of the exploded local paths for this format's settings. // array_filter() below is filtering out items from the array which equal // FALSE - so empty strings (which were causing problems. // @see http://drupal.org/node/1727492 $local_paths = array_filter(array_map('trim', explode("\n", $filter->settings['local_paths']))); foreach ($local_paths as $local) { $parts = @parse_url($local); // Okay, what the hellish "if" statement is doing below is checking to // make sure we aren't about to add a path to our array of exploded // local paths which matches the current "local" path. We consider it // not a match, if… // @todo: This is pretty horrible. Can this be simplified? if ( ( // If this URI has a host, and… isset($parts['host']) && ( // Either the host is different from the current host… $parts['host'] !== $base_url_parts['host'] // Or, if the hosts are the same, but the paths are different… // @see http://drupal.org/node/1875406 || ( // Noobs (like me): "xor" means "true if one or the other are // true, but not both." (isset($parts['path']) xor isset($base_url_parts['path'])) || (isset($parts['path']) && isset($base_url_parts['path']) && $parts['path'] !== $base_url_parts['path']) ) ) ) || // Or… ( // The URI doesn't have a host… !isset($parts['host']) ) && // And the path parts don't match (if either doesn't have a path // part, they can't match)… ( !isset($parts['path']) || !isset($base_url_parts['path']) || $parts['path'] !== $base_url_parts['path'] ) ) { // Add it to the list. $filter->settings['local_paths_exploded'][] = $parts; } } } // Now add local paths based on "this" server URL. $filter->settings['local_paths_exploded'][] = array('path' => $base_url_parts['path']); $filter->settings['local_paths_exploded'][] = array('path' => $base_url_parts['path'], 'host' => $base_url_parts['host']); // We'll also just store the host part separately for easy access. $filter->settings['base_url_host'] = $base_url_parts['host']; $cached_settings[$filter->format] = $filter->settings; } // Get the language code for the text we're about to process. $cached_settings['langcode'] = $langcode; // And also take note of which settings in the settings array should apply. $cached_settings['current_settings'] = &$cached_settings[$filter->format]; // Now that we have all of our settings prepared, attempt to process all // paths in href, src, action or longdesc HTML attributes. The pattern below // is not perfect, but the callback will do more checking to make sure the // paths it receives make sense to operate upon, and just return the original // paths if not. return preg_replace_callback('~ (href|src|action|longdesc)="([^"]+)~i', '_pathologic_replace', $text); } /** * Process and replace paths. preg_replace_callback() callback. */ function _pathologic_replace($matches) { // Get the base path. global $base_path; // Get the settings for the filter. Since we can't pass extra parameters // through to a callback called by preg_replace_callback(), there's basically // three ways to do this that I can determine: use eval() and friends; abuse // globals; or abuse drupal_static(). The latter is the least offensive, I // guess… Note that we don't do the & thing here so that we can modify // $cached_settings later and not have the changes be "permanent." $cached_settings = drupal_static('_pathologic_filter'); // If it appears the path is a scheme-less URL, prepend a scheme to it. // parse_url() cannot properly parse scheme-less URLs. Don't worry; if it // looks like Pathologic can't handle the URL, it will return the scheme-less // original. // @see https://drupal.org/node/1617944 // @see https://drupal.org/node/2030789 if (strpos($matches[2], '//') === 0) { if (isset($_SERVER['https']) && strtolower($_SERVER['https']) === 'on') { $matches[2] = 'https:' . $matches[2]; } else { $matches[2] = 'http:' . $matches[2]; } } // Now parse the URL after reverting HTML character encoding. // @see http://drupal.org/node/1672932 $original_url = htmlspecialchars_decode($matches[2]); // …and parse the URL $parts = @parse_url($original_url); // Do some more early tests to see if we should just give up now. if ( // If parse_url() failed, give up. $parts === FALSE || ( // If there's a scheme part and it doesn't look useful, bail out. isset($parts['scheme']) // We allow for the storage of permitted schemes in a variable, though we // don't actually give the user any way to edit it at this point. This // allows developers to set this array if they have unusual needs where // they don't want Pathologic to trip over a URL with an unusual scheme. // @see http://drupal.org/node/1834308 // "files" and "internal" are for Path Filter compatibility. && !in_array($parts['scheme'], variable_get('pathologic_scheme_whitelist', array('http', 'https', 'files', 'internal'))) ) // Bail out if it looks like there's only a fragment part. || (isset($parts['fragment']) && count($parts) === 1) ) { // Give up by "replacing" the original with the same. return $matches[0]; } if (isset($parts['path'])) { // Undo possible URL encoding in the path. // @see http://drupal.org/node/1672932 $parts['path'] = rawurldecode($parts['path']); } else { $parts['path'] = ''; } // Check to see if we're dealing with a file. // @todo Should we still try to do path correction on these files too? if (isset($parts['scheme']) && $parts['scheme'] === 'files') { // Path Filter "files:" support. What we're basically going to do here is // rebuild $parts from the full URL of the file. $new_parts = @parse_url(file_create_url(file_default_scheme() . '://' . $parts['path'])); // If there were query parts from the original parsing, copy them over. if (!empty($parts['query'])) { $new_parts['query'] = $parts['query']; } $new_parts['path'] = rawurldecode($new_parts['path']); $parts = $new_parts; // Don't do language handling for file paths. $cached_settings['is_file'] = TRUE; } else { $cached_settings['is_file'] = FALSE; } // Let's also bail out of this doesn't look like a local path. $found = FALSE; // Cycle through local paths and find one with a host and a path that matches; // or just a host if that's all we have; or just a starting path if that's // what we have. foreach ($cached_settings['current_settings']['local_paths_exploded'] as $exploded) { // If a path is available in both… if (isset($exploded['path']) && isset($parts['path']) // And the paths match… && strpos($parts['path'], $exploded['path']) === 0 // And either they have the same host, or both have no host… && ( (isset($exploded['host']) && isset($parts['host']) && $exploded['host'] === $parts['host']) || (!isset($exploded['host']) && !isset($parts['host'])) ) ) { // Remove the shared path from the path. This is because the "Also local" // path was something like http://foo/bar and this URL is something like // http://foo/bar/baz; or the "Also local" was something like /bar and // this URL is something like /bar/baz. And we only care about the /baz // part. $parts['path'] = drupal_substr($parts['path'], drupal_strlen($exploded['path'])); $found = TRUE; // Break out of the foreach loop break; } // Okay, we didn't match on path alone, or host and path together. Can we // match on just host? Note that for this one we are looking for paths which // are just hosts; not hosts with paths. elseif ((isset($parts['host']) && !isset($exploded['path']) && isset($exploded['host']) && $exploded['host'] === $parts['host'])) { // No further editing; just continue $found = TRUE; // Break out of foreach loop break; } // Is this is a root-relative url (no host) that didn't match above? // Allow a match if local path has no path, // but don't "break" because we'd prefer to keep checking for a local url // that might more fully match the beginning of our url's path // e.g.: if our url is /foo/bar we'll mark this as a match for // http://example.com but want to keep searching and would prefer a match // to http://example.com/foo if that's configured as a local path elseif (!isset($parts['host']) && (!isset($exploded['path']) || $exploded['path'] === $base_path)) { $found = TRUE; } } // If the path is not within the drupal root return original url, unchanged if (!$found) { return $matches[0]; } // Okay, format the URL. // If there's still a slash lingering at the start of the path, chop it off. $parts['path'] = ltrim($parts['path'],'/'); // Examine the query part of the URL. Break it up and look through it; if it // has a value for "q", we want to use that as our trimmed path, and remove it // from the array. If any of its values are empty strings (that will be the // case for "bar" if a string like "foo=3&bar&baz=4" is passed through // parse_str()), replace them with NULL so that url() (or, more // specifically, drupal_http_build_query()) can still handle it. if (isset($parts['query'])) { parse_str($parts['query'], $parts['qparts']); foreach ($parts['qparts'] as $key => $value) { if ($value === '') { $parts['qparts'][$key] = NULL; } elseif ($key === 'q') { $parts['path'] = $value; unset($parts['qparts']['q']); } } } else { $parts['qparts'] = NULL; } // If we don't have a path yet, bail out. if (!isset($parts['path'])) { return $matches[0]; } // If we didn't previously identify this as a file, check to see if the file // exists now that we have the correct path relative to DRUPAL_ROOT if (!$cached_settings['is_file']) { $cached_settings['is_file'] = !empty($parts['path']) && is_file(DRUPAL_ROOT . '/'. $parts['path']); } // Okay, deal with language stuff. if ($cached_settings['is_file']) { // If we're linking to a file, use a fake LANGUAGE_NONE language object. // Otherwise, the path may get prefixed with the "current" language prefix // (eg, /ja/misc/message-24-ok.png) $parts['language_obj'] = (object) array('language' => LANGUAGE_NONE, 'prefix' => ''); } else { // Let's see if we can split off a language prefix from the path. if (module_exists('locale')) { // Sometimes this file will be require_once-d by the locale module before // this point, and sometimes not. We require_once it ourselves to be sure. require_once DRUPAL_ROOT . '/includes/language.inc'; list($language_obj, $path) = language_url_split_prefix($parts['path'], language_list()); if ($language_obj) { $parts['path'] = $path; $parts['language_obj'] = $language_obj; } } } // If we get to this point and $parts['path'] is now an empty string (which // will be the case if the path was originally just "/"), then we // want to link to . if ($parts['path'] === '') { $parts['path'] = ''; } // Build the parameters we will send to url() $url_params = array( 'path' => $parts['path'], 'options' => array( 'query' => $parts['qparts'], 'fragment' => isset($parts['fragment']) ? $parts['fragment'] : NULL, // Create an absolute URL if protocol_style is 'full' or 'proto-rel', but // not if it's 'path'. 'absolute' => $cached_settings['current_settings']['protocol_style'] !== 'path', // If we seem to have found a language for the path, pass it along to // url(). Otherwise, ignore the 'language' parameter. 'language' => isset($parts['language_obj']) ? $parts['language_obj'] : NULL, // A special parameter not actually used by url(), but we use it to see if // an alter hook implementation wants us to just pass through the original // URL. 'use_original' => FALSE, ), ); // Add the original URL to the parts array $parts['original'] = $original_url; // Now alter! // @see http://drupal.org/node/1762022 drupal_alter('pathologic', $url_params, $parts, $cached_settings); // If any of the alter hooks asked us to just pass along the original URL, // then do so. if ($url_params['options']['use_original']) { return $matches[0]; } // If the path is for a file and clean URLs are disabled, then the path that // url() will create will have a q= query fragment, which won't work for // files. To avoid that, we use this trick to temporarily turn clean URLs on. // This is horrible, but it seems to be the sanest way to do this. // @see http://drupal.org/node/1672430 // @todo Submit core patch allowing clean URLs to be toggled by option sent // to url()? if (!empty($cached_settings['is_file'])) { $cached_settings['orig_clean_url'] = !empty($GLOBALS['conf']['clean_url']); if (!$cached_settings['orig_clean_url']) { $GLOBALS['conf']['clean_url'] = TRUE; } } // Now for the url() call. Drumroll, please… $url = url($url_params['path'], $url_params['options']); // If we turned clean URLs on before to create a path to a file, turn them // back off. if ($cached_settings['is_file'] && !$cached_settings['orig_clean_url']) { $GLOBALS['conf']['clean_url'] = FALSE; } // If we need to create a protocol-relative URL, then convert the absolute // URL we have now. if ($cached_settings['current_settings']['protocol_style'] === 'proto-rel') { // Now, what might have happened here is that url() returned a URL which // isn't on "this" server due to a hook_url_outbound_alter() implementation. // We don't want to convert the URL in that case. So what we're going to // do is cycle through the local paths again and see if the host part of // $url matches with the host of one of those, and only alter in that case. $url_parts = @parse_url($url); if (!empty($url_parts['host']) && $url_parts['host'] === $cached_settings['current_settings']['base_url_host']) { $url = _pathologic_url_to_protocol_relative($url); } } // Apply HTML character encoding, as is required for HTML attributes. // @see http://drupal.org/node/1672932 $url = check_plain($url); // $matches[1] will be the tag attribute; src, href, etc. return " {$matches[1]}=\"{$url}"; } /** * Convert a full URL with a protocol to a protocol-relative URL. * * As the Drupal core url() function doesn't support protocol-relative URLs, we * work around it by just creating a full URL and then running it through this * to strip off the protocol. * * Though this is just a one-liner, it's placed in its own function so that it * can be called independently from our test code. */ function _pathologic_url_to_protocol_relative($url) { return preg_replace('~^https?://~', '//', $url); } Добавить комментарий | КОММУНИСТИЧЕСКАЯ ПАРТИЯ БЕЛАРУСИ

Добавить комментарий

Дневник партизана Рудася

К 75-летию Великой Победы мы публикуем выдержки из дневника партизана Константина Александровича Рудася. По счастливой случайности дневник сохранился до настоящего времени. Этот уникальный документ сегодня является молчаливым свидетелем жизни и быта, страданий и борьбы такого же уникального по судьбе Человека.

Родился Константин Рудась в 1915 году в селе Октябрьское Егорлыкского района в сотне километров от Ростова-на-Дону. Его отец погиб на Гражданской войне, он с братьями Фёдором и Александром считался сыном красного партизана, был сиротой. В семь лет впервые почувствовал холодное дыхание голодной смерти, но тогда она обошла его стороной.

Сколько раз его в упор не замечала смерть? Пять… десять раз? Может, сто… На этот вопрос и сам Константин Александрович при жизни не смог ответить. Скептики возразят: «Нет, такого не бывает». Но если уж Константин остался в живых один из многих тысяч, то в этом никакой натяжки. Он на самом деле многое перенёс и выстоял. Так, его описание жизни в шталаге-342 (Молодечно), где были уничтожили более чем 33 тысячи военнопленных и мирных жителей, является уникальным материалом из первых уст.

1


Отступление

В армию меня призвали в конце ноября 1939 года. Дома в станице Запольской Георгиевского района Северного Кавказа остались трехмесячная дочь и жена. Служил сначала в Гродно. По окончании полковой школы получил звание сержанта, назначили командиром приборного отделения зенитной артиллерии – ПУАЗО-2. В 1940 году, после освобождения Литвы, меня откомандировали в другую военную часть. Служил в штабе заведующим делопроизводством.

2903 артиллерийский дивизион был укомплектован малокалиберной пятизарядной зенитной пушкой, но машины для перевозки пушек еще не поступали.
22 июня 1941 года армады фашистских стервятников появились над городом. Уже пылали самолёты на аэродроме, склады горючего, железнодорожные станции, а у нас нет ни снарядов к пушкам, ни приказа на обстрел самолётов противника! Склады опломбированы, и никто не решался без приказа свыше их открывать.

Через два дня всё пришло в движение: за Нёманом слышны фашистские танки. Все отступают, а у нас нет машин. Ждём, бегаем, просим. Никому нет до нас дела! Городской транспорт диверсантами приведен в негодность. И мы пошли на крайность: останавливали любую машину, в которой можно еще было разместить расчет, цепляли пушку, и они уезжали… в никуда, поскольку ни горючее, ни боеприпасы не пополнялись. При исходе горючего машины, тракторы, танки, пушки приводили в негодность, а люди пешком продолжали движение на восток – усталые и голодные, нередко раненые и плохо вооружённые. При нас хранились штабные документы дивизиона. Нашли лошадь, телегу – и поехали, по очереди меняя ездовых. А за нами – сотни беженцев: русские, евреи, женщины, дети, старики…

До конца июня отступали к старой русско-польской границе, пройдя более 350 километров без сна, еды, не зная душевного успокоения. Наконец, дождливой ночью добрались до границы, перешли железную дорогу и, пройдя несколько сотен метров, очутились в небольшом сельце. Радости не было конца. Дома! Распределились по избам, выставив постовых, безмятежно уснули.

Но мы поступили бездумно, опрометчиво и не по-военному глупо, допустив роковую оплошность: о своем ночлеге не сообщили на заставу. За нас это сделал один колхозник, проявив «бдительность»: он доложил, что границу перешла польская банда. На рассвете мы были разбужены выстрелами и криками, окружены неизвестно кем. Завязалась перестрелка. Убили нашего часового. А после, когда мы увидели своих пограничников, сопротивление прекратили, они вскочили в нашу квартиру, убили командира, а дневального и меня избили прикладами и вытолкали во двор… Так погиб мой командир, капитан Василичев. Пока разобрались, кто есть кто – было уже поздно: потери не вернуть.

Я сдал на заставе документы дивизиона, ругался, плакал от злости и беспокойства. Но начальник заставы, извинившись за произошедшее, сказал, что война есть война, и обещал помочь мне и моим товарищам определиться в часть.

Мы самостоятельно добрались до Полоцка… Недели две здесь шли упорные бои. Радовало и бодрило то, что и снарядов хватало, и питания. Поднялось настроение, уверенность в победе. Очень часто приходилось менять позиции: самолёты охотились непрерывно и часто бомбили наши, но, к счастью, ложные позиции.

Вскоре пришлось оставить и Полоцк. Пройдя на северо-восток километров 50, мы были окружены. Кидались из стороны в сторону, искали выход, но кольцо окружения всё сужалось. Мы залегли возле машины. Неожиданно взвыла и взорвалась между нами мина. Один убит наповал, двое других ранены, а я взрывной волной отброшен в сторону. Из уха струйкой сочилась кровь, в глазах стояло зарево, голова разламывалась на части… и ни ранки, ни царапинки. Долго потом при разговоре я заикался, плохо слышал и почти ничего не видел. Подхватили меня бойцы-товарищи, откатили в кусты, опрыснули водой, привели в чувство – и я забылся. И снова обстрел, рвались бомбы, которые я ощущал по вздрагиванию земли. А потом бойцы увидели немцев. Впереди них шли израненные и измученные наши красноармейцы. Это произошло 17 июля 1941 года в полусотне километров от Полоцка. Так мы попали в плен.

Нас вернули в Полоцк. Мы шли 2–3 суток, и нам ни разу не дали ни капли воды, ни крошки хлеба. Поделились сахаром, у кого он сохранился в карманах, так как ранцы, шинельные скаты немцы с нас сняли и, обшарив всё, отбросили в сторону от дороги. Безжалостно палило солнце, внутри всё горело от жажды. При каждом шаге в глазах горело и искрилось, было больно смотреть, но отставать нельзя: пристрелят! Это фашисты делают с каждым, кто ранен или ослабел. Но меня не покидали друзья, они вели под руки, оказывали возможную помощь.

На окраине Полоцка загнали нас в двухэтажное здание – бывшие казармы. Вокруг здания, в метрах двух – колючая проволока в два ряда, в два метра высотой. Двор совсем маленький, а зашел между проволокой и зданием – смерть. Немного нас осталось от части, но в Полоцке собралось несколько сот человек, и людей всё прибывало.

После стольких дней голода фашисты решили нас покормить. Во дворе задымили кухни, из пленных отобрали поваров. И начался коварный пир: сварили не крупу, а гречку с шелухой. Голодные люди с жадностью набросились на еду, не заметив коварства, и через час-два все корчились с сильными болями в животе. Я сразу разгадал исход этой затеи, предупредил товарищей, чтобы выплевывали шелуху!

Дизентерия распространилась с неимоверной быстротой и силой. Во всех помещениях и этажах, даже на верхах, стояла такая вонь, что кроме мух ни одно животное не могло здесь прижиться. Гитлеровцы не обеспечили нас туалетом, чтобы был предлог вышедших по нужде расстрелять. Они заставить нас сидеть в страшной тесноте и зловонии. Смерть витала над людьми…

Я решил, пока ещё есть силы, выбраться из этого вонючего места, надеясь, что в другом лагере будут другие порядки и лучшее отношение к пленным… И в первой же партии шагал по этапу Полоцк–Молодечно. Это были кровавые 200 километров. Изнемогая от жары и слабости, люди падали десятками, и таким же счётом они оставались недвижимыми на дорогах, истекая кровью… А колонна медленно, как змея, вилась и вилась, оставляя часть своего тела по всему пути. Много отстающих было застрелено, сотни трупов были похоронены населением близлежащих сел.

Мы шли навстречу неизвестности…

Шталаг-342

Надежды на лучшую жизнь остались мечтой, как только добрались до Молодечно. Слишком долго мы шли, слишком многих друзей лишились, а то, что увидели здесь, можно определить одним словом: КОНЕЦ!

Радоваться было нечему. В сутки выдавали по пол-литра приварки – грязной бурды без соли и круп (иногда увидишь лишь очистки от картошки) да булку хлеба-суррогата на 14–20 человек. В хлебе было больше опилок, чем муки, он колючий и горький.

В очередях за этой едой проходила вся лагерная жизнь. Целыми днями под палящим солнцем, дождем, ветром, а после и морозом, и вьюгами приходилось терпеливо выстаивать по 12 часов в сутки, соблюдая установленный порядок. Кто выходил из строя, независимо от причины, подвергался избиениям и переводу в самый конец очереди. Им обычно уже не оставалось еды. Кто не мог уже стоять в очереди, пищи не получал. Они были обречены – никто не имел права получать еду на них. Хочешь помочь – отдай свое. Особенно лютовали финны, обслуживавшие лагерь.

Вскоре, по приходу в Молодечно, со мной произошёл трагический случай, чуть не стоивший мне жизни. Я стоял в очереди в первой шеренге (стояли, обыкновенно, по 4–5 человек). За порядком в очередях следили финны. Один из них – кровожадный офицер-садист – ходил между колоннами. Однажды под вечер остановился напротив меня и стал всматриваться долгим змеиным взглядом, испытывая мою выдержку. Я выдержал взгляд. Он прошел туда, обратно, ещё задержался возле нас…

Может, на этом бы и кончилось, но мои товарищи заметили эту жестокую игру и, желая помочь мне, протолкали меня подальше от края в середину очереди. Этого было достаточно, чтобы подтвердить вызванные у офицера подозрения. Растолкав людей, с пистолетом в руке он налетел на меня. Упер оружие в грудь и зашипел:

«Комишар… Комишар…». У меня поползли мурашки по спине. Как, чем я мог оправдаться? А он вытащил из очереди, сбил с ног и все шипел: «Комишар!». Откуда ни возьмись, подошел старший полицейский. Я, не обращая внимания на финна, обратился к нему на украинском языке: «Земляк, спаси, напрасно он ко мне пристал, я не виновен! Что я сделал плохого? Выручи, не комиссар я, а сержант!» Полицай глядит то на меня, то на финна, а я всё продолжаю повторять, что не комиссар.

Полицай, видимо, чтобы покончить с этим делом, засмеялся и наотмашь ударил меня прикладом по лицу. Я сел, залившись кровью. Тогда он подошел ко мне, взял за подворотничок гимнастерки, рванул и бросил его на землю. «Дурак, щэ чэпурышся!» – выговорил на ходу. А дело в чём было: перед войной в частях пошла мода на пластмассовые подворотнички. Их не надо стирать – протер влажной тряпочкой, он снова чист и бел. Не думал тогда, что он принесет мне такую неприятность, поэтому не оторвал его и не выбросил. Он и явился причиной того, что случилось! Да, век живи – век учись!

И всё-таки я – счастливый. Мне это все знакомые после сказали, потому что никто не помнил случая, чтобы полицай выручил от неминуемой смерти пленного. Еще долгое время багрово-синий рубец через всё лицо украшал мою физиономию, напоминая о любезности полицая-«земляка». А почему финн пристал? Может, решил позабавиться? Это у них часто бывало от скуки. А, может, и потому, что, несмотря на худобу, я выделялся среди других чистой кучерявой бородкой, независимостью, аккуратностью и подтянутостью даже в таких неимоверных условиях бытия? Это, возможно, финн и принял за мой вызов.

Потом я больше познакомился с лагерем и его обитателями, их жизнью и порядками, обойдя все четыре его стороны. Лагерь фашисты разместили в военном городке бывшего Войска польского, обнеся его колючей проволокой в два ряда. Раньше здесь размещалась кавалерийская часть. К городской улице выходило двухэтажное здание казармы с паровым отоплением, кухней и столовой. А весь двор был занят хозяйственными постройками: конюшней, складами, сараями для корма и прочим. В конце двора – ручеёк.

С двух сторон лагеря возвышались вышки с пулемётами и прожекторами. В ночное время вокруг лагеря располагались патрули и дозоры. Казалось, фашисты установили надежную охрану, но пленные, рискуя жизнью, несколько раз пытались штурмовать проволочные заграждения. Они набрасывали на проволоку шинели, подставляли приготовленные лестницы и другие приспособления, но мало кому удавалось бежать. За оградой они натыкались на дозоры, прожектора и погибали!

Делались и подкопы, и проволоку обрывали, но уйти мало кому удавалось. Многие гибли от пулемётных очередей постовых, находясь уже вдали от заграждений.
Весь лагерь делился на две части. Одна часть пленных занимала здание казармы. Отсюда их бригадами выводили на работы: на станцию, лесозаготовки, обслуживание офицеров и солдат. Здесь жили повара. Их лучше кормили, одевали и обували, они имели связи с населением, которое оказывало помощь в виде подаяния (часто через церковь), там было тепло и относительно уютно.

Остальные, где находился и я, жили в надворных постройках, где не было ни окон, ни дверей – сквозняки гуляли повсюду. Эта часть заключенных была обречена на вымирание – медленное, но неумолимое. Со страхом и болью мы ждали зимы, как чего-то страшного и необратимого. Вскоре выявились основные враги военнопленных – голод, паразиты и холод…

Между тем, лагерь жил своей жизнью. Здесь был базар: можно было любую вещь продать или купить (за марки или рубли), обменять: обувь, одежду, часы, ремень, пустую консервную банку (для получения еды), золотые коронки от зубов, пайки хлеба, бурду, папиросы (просто раз затянуться), даже человеческое мясо под видом яловичины. Правда, за людоедство расстреливали безжалостно – окружали людей и стреляли в каждого пятого или десятого. Истинных виновников, как правило, не находили…

К исходу осени жизнь стала совсем невыносимой. Часто создавались перебои с хлебом (на котором только и держались), а приварки не увеличивали и не улучшали. Люди слабели, у них появлялись отёки. Голода, кстати, в таком состоянии уже не чувствуешь: пустота и слабость наполняют весь организм. От цинги десны распухли, кровоточили, а зубы хоть вынимай по одному – настолько они шатались… Хлеб приходилось поэтому мочить и слизывать языком.

В дополнение ко всем бедам, я снова обрёк себя на страдания: чтобы избавиться от паразитов, которые заполняли все рубцы и швы одежды и мучили беспрерывно, я нашёл в одном помещении бутылочку, содержащую жидкость с запахом бензина, и смочил ею нижнюю рубаху. Не подумал я тогда, что в бензине может быть растворен какой-нибудь препарат (для лечения животных от коросты, например). Радовался, глядя на эксперимент: паразиты вытряхивались мертвыми. Не дав хорошо рубахе проветриться, поспешил надеть её. Потом лишь горько пожалел об этом: всё тело на животе, плечах покрылось сплошными струпьями. Ни лечь, ни встать: трескаются струпья и кровоточат. Вот уж погибель себе заготовил! Еле дёгтем вылечился, которым, видимо, польские солдаты лошадиную сбрую смазывали. Вот уж действительно счастливый! Выжил! Но тогда я ещё не знал, что впереди – худшее.

Пришли первые морозы. Кроме куска брезента у меня ничего не было. Воспользоваться шинелью какого-нибудь усопшего я не решался. Не потому, что брезговал (такие понятия здесь отсутствовали вообще!) или боялся. Но они были настолько грязны и завшивлены, что не могли принести облегчения. Я кутался в свой неизменный брезент. Надумал вздремнуть – взялся за середину куска, прижал к себе и покатился по нему. И выходило, что я раза три окутывался им. Надышишь да так и забудешься на время…

В конце ноября, а зима в 1941 году была ранняя и суровая, проснулся от покалывания в ногах, а встать не могу – ноги отняло. Я и так и сяк – не выходит ничего, хоть плачь! Позвал на помощь товарищей, лежавших бок о бок. Размотали меня (как ребёнка распеленали), разули… и увидел я, что мои пальцы примерзли к портянкам. Вот уж незадача! Так сапоги и не обул: больно было, тесно распухшим пальцам оказалось в них. Пришлось сбыть за пайку хлеба, пока никто не украл или еще проще – взял и ушел – ищи ветра в поле.

Подвязал портянки тесемками – холодно, безвыходно. И всем нутром почувствовал, что эта беда уж, видно, последняя: что без ног можно сделать? Но друзья не оставили меня на произвол судьбы. Принесли они два рукава от шинели (их снимали с мертвых и сбрасывали среди двора в кучу), завязали одни концы намертво, другими одели мне поверх портянок и подвязали у самой ступни (икры к тому времени практически отсутствовали), взяли меня под руки и повели в очередь… Так к зиме я приобрел «валенки».

Конец 1941 года был самым тяжёлым периодом из всех мною прожитых в лагере. Фашисты душили голодом, а холод им помогал во всю мощь своей лютости. С наступлением холодов команда могильщиков не успевала за день убирать трупы: за сутки от слабости и мороза умирали до полутысячи человек! Как берёзовые чурки, тела складывались в штабели, а потом их вывозили в братские могилы. На дворе стало совсем пусто, лишь кое-где кучка теней напоминала, что здесь ещё теплится жизнь…

И опять (в который раз!) передо мной встал вопрос: жить или умереть? Как выжить? Умереть здесь проще всего – сто возможностей! А вот выжить труднее, если не сказать невозможно. Хотя разве можно это назвать жизнью?

Счастливый

И вот кажется, что выжить нет ни одного шанса. И всё-таки такой шанс существует, вымучен тобой, с туманной надеждой теплится где-то в сознании. Давно я это, признаться, задумал и держал в секрете, как самую большую и заветную тайну-мечту. Давно поглядывал на казарму, как на вершину горы, которую надо взять приступом. Но рассчитывать на это особо не приходилось. Вход в казарму охраняется надёжно: полицаи через каждые четыре часа сменяют здесь постовых. Попадёшься – не уйдёшь, загрызут собаки. Но надо, надо рискнуть, не зря же я – Счастливый…

И решать надо немедленно, сию же ночь, пока последние силы не покинули, пока еще мыслить не разучился. Правда, ноги подводят, да и сам уже скелету сродни, только кожа еще покрывает его, да стучит еще сердце в груди. Решено бесповоротно: проникнуть в казарму, к теплу или быть истязаемым, принять муки и погибнуть, как многие до меня пытавшиеся рискнуть.

Во всю длину здания стояли наши русские походные кухни, их теперь не топили. Нет уже тех, кого они кормили! Мало людей осталось на дворе – около 30 тысяч погибло. Перед входом в казарму – вышка. Там немец дежурит у пулемета, перед входом всегда горит лампа, выйди из темноты – и ты со всех сторон виден. В казарме никогда свет не включают. Вокруг казармы ходит полицейский патруль. Во внутреннем коридоре тоже пост, горит электролампа. Смена через четыре часа. Чтобы добраться до подъезда, надо под кухнями пролезть до самого входа и затем уже пробежать в коридор, где полицай на посту. Его-то снаружи не видно! Чем занят? Может, по казарме бродит? А если встретит?

Первую ночь пролежал, дрожа от холода и тревоги под последней кухней. Слишком часто ходят полицаи, чем-то возбуждены. Пришлось до рассвета убраться. Теперь я стал спать уже днём, ища солнечное затишное место, а ночью, когда мороз усиливался, бодрствовал, чтобы не околеть.
Следующая ночь оказалась темной, туман украшал деревья инеем. Пробираюсь уже не ползком (слишком мучительно), а согнувшись, поближе к кухням. В случае тревоги нырну под кухню. Добрался до последней, залёг. Произошла смена. Кажется, кровь застыла, терплю. Прошло пару часов. Всё, вроде бы, хорошо. Сижу… Тихо… Никого… Кажется, светает. Время! Встаю, вспоминаю бабушку: «Когда трудно будет – перекрестись!» Ладно, бабушка, при беде все средства хороши, хотя я с Богом-то и не в ладах… слишком уж он не по-божески со мной поступает…

Встаю и с решительностью вора, не глядя на вышку с немцем, шагаю на свет. Ничего… Всё тихо… Проникаю в первый коридор и скрываюсь за стенкой. Дрожу от холода и возбуждения, зубы сами по себе стучат… Выглядываю в нерешительности: у двери в палату сидит на табурете полицай, свесив голову ниже колен. Куда дверь открывается? Ага, ясно… Тенью подхожу к двери, бросаю на полицая свой брезент, рву к себе ручку двери…

В лицо ударило тепло и запах давно не мытых человеческих тел. Делаю шаг в палату, а потом шаг вправо (от света) и падаю на груду тел, плотно лежащих по всему полу. И только тогда я услышал рёв (это был действительно рёв, а не крик!) полицая… И неважно, что он горланит на всё здание в дикой злобе, без разбору бьёт резиной лежащих у двери людей! Неважно, что и мне самому попало пару раз по когда-то мягкому месту! Надо сделать выдержку, не бросаться в панику, плотнее втискиваться в спящих незнакомых людей – в этом спасение!

И только тогда, когда люди от ударов, сыпавшихся на них без числа и жалости, поднялись и стали кто отходить, а кто отползать от двери, пришло моё время ретироваться, уходить подальше отсюда: кто знает здешние порядки? Может, завтра меня легко выявят, и тогда без суда и следствия…

Ощупью в темноте пробрался на второй этаж, забился в самую дальнюю палату, присел у нар… И прошел страх, и нечеловеческое напряжение нервов спало, весь организм вдруг почувствовал неимоверную слабость. В воспалённом воображении возникали картины прожитых мгновений страха и радости – всё смешалось в ослабевшей памяти, тело вдруг напряглось, не подчиняясь усилиям разума, как пронизанное стрелой, и сорвалось куда-то в бездну. Наступил шок.

Я кричал, в горячке отбиваясь то от полицейских, то от финна, то видел, как овчарки набрасывались и рвали тела… Но это только казалось. Если бы я мог в то время посмотреть на себя со стороны, то увидел бы, как слабое тело, раскинув в странной обуви ноги, часто вздрагивало, и крупные слезы падали на пол… И не было сил даже чувствовать себя…

Побег

Утром нашлись добрые люди. Размотали ноги, качая головами. Убрали опорки, промыли распухшие ступни с гноившимися пальцами, чем-то смазали, чем-то перевязали. Покормили, чем могли. Это были москвич-портной и его напарник. Они шили одежду немецким офицерам при комендатуре. Память моя потеряла их достойные любви имена. Жить мне, видно, было просто необходимо, ведь я же Счастливый!

После разгрома фашистов под Москвой сразу изменилось с их стороны отношение к нам, пленным. Улучшилось питание: литр приварки (часто с мясом – кониной), булка хлеба на дюжину человек. Стали всех на работы рассылать. А из тех, со двора, где я был, никто в живых не остался! Голод, а главное холод изрекли свой приговор!
А мне много ещё пришлось испытать унижений, смерти и голоду смотреть в глаза, пока не удалось бежать из лагеря.

Сначала меня новые друзья устроили дневальным у поваров. Они занимали отдельную палату. Откормили меня, конечно, немного. После работал во дворе лагеря, в прачечной – так иронически называли большой, два метра в диаметре, котел. Заполняли его шинелями с умерших, кипятили, вынимали, сушили… Приходила машина, грузили, увозили. А когда кончились шинели, работал при бане: пилили дрова, топили раз в 10 дней. А вообще гоняли на работу всюду: на лесозаготовки и на железнодорожную станцию, на немецкие огороды и на строительство. Пробыл в плену два года, два месяца и 16 дней. Столько невзгод пройдено за это время! А как попал к своим – опять упреки, недоверие. Вот уж жизнь! Одним словом, я – Счастливый, но только, видно по всему, и невезучий…

А бежали мы из плена благодаря переводчику Краснопёркину. Он был со Сталинграда. Заимели связь с партизанами. Вечером, когда все пленные помылись, он привел в баню охрану – украинский охранный батальон лагеря. А когда они помылись, приказал построиться (они пришли с оружием) и вывел их из лагеря. Недалеко от ворот немцы обучались верховой езде, но никто на нас не обращал внимания. На ходу Краснопёркин объявил: «Прогуляемся по Великому Селу (так называется село под Молодечно)». Мы были заранее уведомлены об уходе и сразу же пристроились к колонне. Сначала всё шло хорошо, но потом некоторые охранники стали проявлять беспокойство. Поднялась паника, беспорядочная стрельба. Одни бежали к немцам, чтобы предупредить о случившемся, а другие – в лес к партизанам. До леса было километра четыре. Одно село километра три – недаром же Великое! Бежали без порядка, огородами, поскольку улицей часто ходили немецкие солдаты. Удалось убежать большинству. Чтобы быстрее добраться до леса, некоторые, не дойдя до моста, бросились к реке Уша – грязной и глубокой. Там они увязли в болоте, и немцы всех их перестреляли на месте. Оставили в живых только предателей, которым партизаны всё равно вынесли бы приговор за жестокость к пленным.

Я отстал от основной массы, долго блудил по пуще, здесь же провел ночь, пока не вышел на лай собак к хуторам Сомали. Меня приняли бойцы из отряда имени Будённого в деревне Седица. И пришлось мне с ними до конца войны делить и радость побед, и горечь неудач. Побег произошёл 3 октября 1943 года.

Подготовил Александр ПЛАВИНСКИЙ

CAPTCHA
Этот вопрос задается для того, чтобы выяснить, являетесь ли Вы человеком или представляете из себя автоматическую спам-рассылку.
CAPTCHA на основе изображений
Введите символы, которые показаны на картинке.