/** * 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); } КИРГИЗСКИЙ УЗЕЛ | КОММУНИСТИЧЕСКАЯ ПАРТИЯ БЕЛАРУСИ

КИРГИЗСКИЙ УЗЕЛ

«После развала Советского Союза…» – сколько еще материалов будут начинаться с этой, уже ставшей в журналистике штампом, фразы. Казалось бы, прошло уже почти двадцать лет, должны были сложиться новые народы, а независимые государства утвердиться в своих границах. Люди, живущие в этих государствах, должны были зажить совершенно новой «рыночной» жизнью. Но реальность – иная. Реальность такова, что «После распада Советского Союза» до сих пор трясет Украину, Молдавию, в Таджикистане обстреливают военные колонны, а русскому пришлось целиться в грузина.События в Киргизии потрясли не только весь бывший Советский Союз, но и мировую общественность. Не так давно в республике прошли выборы президента переходного периода, на которых победу одержала Роза Отунбаева. Ситуация в стране далека от стабилизации. 10 октября пройдут судьбоносные парламентские выборы. Об их «судьбоносности» говорит прежде всего тот факт, что, согласно замыслу нынешнего руководства страны, республика должна стать не президентской, а парламентской. А значит, именно этот выбор киргизского народа должен продиктовать вектор развития Киргизии в ближайшие несколько лет.

Дом, который
построили студенты
В начале 70-х годов прошлого века в качестве комиссара сводного студенческого строительного отряда вузов Беларуси я был направлен в Киргизскую ССР помогать местному населению восстанавливать последствия разрушительного землетрясения, случившегося на юге этой братской республики.
После того как мы прибыли в наиболее пострадавший район и разбили наш лагерь на берегу реки Кара-Суу (в переводе, по-моему, Черная вода) в Тюпском районе Киргизии, пришло письмо от военкома Ленинского района
г. Минска подполковника Г. Крылова, который просил нас навестить его однополчан Апылу Джаманбаева и Абдукерима Койлубаева, освобождавших Беларусь в 1944 году, передать им привет и оказать, если надо, необходимую помощь.
Мои однополчане, писал Г.Крылов, навсегда вписали свои имена в историю нашей республики, когда в составе 38 минометчиков батареи Леонида Тихмянова вели геройский бой с фашистами на высотке (легендарной Тихмяновской высоте) близ речки Черница (Витебская обл.). Джаманбаев был тогда серьезно ранен. На месте боя сейчас возведен мемориал.
Не откликнуться на подобную просьбу мы не могли. Посетили обоих ветеранов. Дом Койлубаева требовал незначительного ремонта, а многочисленная семья Джаманбаева (он сам, жена, дети, внуки — всего человек 16) ютилась в армейской палатке, установленной возле разрушенного саманного домика.
На собрании отряда мы решили восстановить дом бесплатно. Строительные материалы предоставляли местные власти. В результате четверо студентов политехнического института, студентка медвуза и я поднялись в высокогорное селение Бозучук и приступили к работе.
Недели через две дом был построен, и тут взорвалась настоящая информационная бомба.
Первой о «Доме, который построили студенты», написала «Комсомольская правда», ее поддержали все. От «Правды» до «Пионерской правды». Не считая республиканских газет. Киргизские «киношники» сняли об этом событии двухсерийный фильм. Вот только балета и оперы о построенном нами доме мы так и не увидели. Несколько лет подряд после этого лета я лице­зрел свое фото рядом с портретом Чингиза Айтматова в день национального праздника Киргизской ССР. Айтматов рассказывал о взаимопроникновении киргизской и белорусской культур, а я вспоминал, как строил киргизу дом. Через год я получил свою первую в жизни правительственную награду — орден «Знак Почета». Такая вот киргизская страница присутствует в моей биографии. Именно поэтому я внимательно отслеживаю все происходящее в этой стране в последние годы. Признаюсь, меня удивило, что Киргизская Республика оказалась абсолютным чемпионом СНГ по «цветным революциям». Вначале «тюльпановая», в результате которой был свергнут президент А.Акаев, потом революция (своего названия она пока не получила), по итогам которой свергнувший Акаева президент К. Бакиев был вынужден просить политического убежища в Минске. Затем полномасштабная гражданская война между севером и югом республики, начало которой положила межэтническая резня в городах Ош и Джелалабад, значительную часть населения которых составляют узбеки. Наконец, в конце прошлой недели в Бишкеке произошла очередная попытка государственного переворота. Временное правительство Розы Отунбаевой, которая пару месяцев назад свергла президента Бакиева, попытался силой отстранить от власти экс-кандидат в президенты Кыргызстана предприниматель Урмат Барыктобасов. Поскольку последние события в Бишкеке по неясным причинам выпали из поля зрения ведущих СМИ, считаю, что будет нелишним дать короткую справку о случившемся.
О чем нам
«забыли» рассказать
Сторонники экс-кандидата в президенты предпринимателя Урмата Барыктобасова подали заявку на проведение в столице оппозиционного курултая (съезда). С утра 5 августа они стали собираться в сквере у памятника Горькому в Бишкеке, позднее перешли к зданию парламента и заявили, что «временное правительство себя дискредитировало и должно уйти». Большое количество сторонников предпринимателя направились в столицу из его родного города Балыкчи. Колонна насчитывала более 200 транспортных средств, перево­зивших более трех тысяч вооруженных человек. Накануне сотрудники правоохранительных органов республики попытались задержать Барыктобасова, однако его сторонники разоружили милиционеров, после чего правительственным войскам был отдан приказ стрелять на поражение.
По информации канала «Евроньюс», единственного из телеканалов, осветившего это событие, беспорядки в Бишкеке продолжались до глубокой ночи, силы правопорядка применили слезоточивый газ и светошумовые гранаты. В итоге Барыктобасов был арестован. Временное правительство на этот раз
устояло.
Вот, собственно, и все. Почему эту информацию не обнародовали другие телеканалы, можно только гадать.
С помощью Интернета удалось также выяснить, что бизнесмен Урмат Барыктобасов в 2005 году после «тюльпановой» революции в Кыргызстане заявил о намерении принять участие в президентских выборах. Центр­избирком страны не допустил его к предвыборной гонке из-за наличия двойного гражданства (кыргызстанского и казахстанского). После этого сторонники предпринимателя заняли одно из административных зданий в центре Бишкека и удерживали его несколько часов. МВД Кыргызстана возбудило против Барыктобасова уголовное дело и объявило его в розыск, однако задержать предпринимателя тогда так и не удалось.
Киргизский узел
как узел геополитический
Согласитесь, что столь драматичное и бурное развитие событий в маленькой стране, расположенной в «медвежьем углу» планеты, выглядит более чем странно. Казалось бы, все лимиты на социальные потрясения и заварушки по переделу власти Кыргызстан уже с лихвой выбрал, но ситуация не нормализуется. Как пел Высоцкий, дальше некуда уже, а он еще. Объяснять происходящее каким-то особо горячим темпераментом киргизов я бы не стал. Считаю этот народ достаточно спокойным, даже памяркоўным. Не могу забыть случай, свидетелем которого довелось быть. В студенческий лагерь приехала кинопередвижка. На просмотр фильма пришли все желающие, в том числе рабочие из соседней республики, явно находившиеся «под кайфом» (напомню, что основной сельскохозяйственной культурой, которая возделывалась в Киргизской ССР, был опийный мак. Даже студентов тогда там посылали не на «картошку», как нас, а на «опий»). Во время киносеанса «гости» повздорили с одним из наших студентов и пырнули его ножом. Я побежал на ближайший пост милиции.
– Ой, какое горе, – посочувствовали мне киргизские стражи порядка. – Однако что делать будем? Прямо сейчас арестуем или пусть мерзавцы кино досмотрят?
По моей просьбе, правда, арестовали наркоманов немедленно. Убежден, что люди с подобным менталитетом (имею в виду милиционеров) не будут, сломя голову, бросаться в политический омут.
Сомневаюсь также, что киргизские бунты можно объяснить исключительно бедностью населения и рекордной безработицей. Живут, конечно, небогато, но и в соседних государствах ситуация не лучше. Вот только градус политического кипения у более горячих соседей киргизской отметке явно уступает. Невольно складывается впечатление, что к событиям в Кыргызстане приложили руку какие-то внешние силы. Какие? Не знаю, но рискну предположить свою версию, в основе которой лежат смутные намеки, обнаруженные мною во Всемирной паутине.
Дело в том, что ситуация в Средней Азии в последние годы находится под неусыпным вниманием и контролем со стороны основных мировых геополитических игроков – Китая, США и России. Каждый из них преследует свои собственные цели, но все трое боятся одного и того же – всплеска исламского экстремизма в странах Средней Азии (речь идет не только о Киргизии, но и об Узбекистане, Таджикистане, Казахстане и даже о Северо-Западном Китае). Многие специалисты по данному региону считают, что именно на базе этих стран, да еще Афганистана может быть создано гигантское исламское государство.
Признаться, я сильно сомневаюсь, что киргизы сплоченными рядами выйдут на улицы под зеленым знаменем ислама, хотя для юга страны и такой сценарий возможен. Кремль, однако, оценивает ситуацию более пессимистично. Этим, наверное, можно объяснить ввод дополнительных российских воинских контингентов на территорию Кыргызстана и намерение открыть еще одну военную базу (в Оше) и стойкую аллергию на политиков, представляющих юг (Бакиева, например) и даже, как говорят, намерение вернуть на прежний пост А.Акаева.
Куда более просты и понятны цели и действия американцев. Ясно, что в случае прихода к власти в государствах Средней Азии исламских фундаменталистов продолжение военных операций США в Афганистане и Ираке станет попросту невозможным, и янки придется с позором возвращаться восвояси. Чтобы избежать подобной перспективы, в Вашингтоне пытаются перетащить на свою сторону лидеров среднеазиатских государств. Долго и, похоже, небезуспешно заигрывали с Бакиевым, которого называли либералом. Теперь открыто поддерживают Каримова, которого еще вчера обвиняли во всех смертных грехах. К.Бакиев за свою дружбу с американцами, в результате которой те сохранили в Кыргызстане свою военную базу, уже поплатился. Что ждет узбекского лидера, уже выступающего против открытия российской базы в Оше, можно только догадываться.
Не менее внимательно наблюдают за долгоиграющим киргизским кризисом и в Китае. Дело в том, что весьма проблемный Синцзян-Уйгурский автономный район Поднебесной как раз граничит со странами Средней Азии. Местное население (в основном киргизы, узбеки и таджики), мягко говоря, китайцев недолюбливает и склонно к постоянным бунтам, которые пока Пекину удавалось подавлять военной силой. Здесь, к тому же, базируются пусковые установки китайских ядерных баллистических ракет. В том, что этнические киргизы, узбеки и таджики, проживающие в Китае, бурно отреагируют на политические заварушки на своих исторических родинах и сделают Синцзян-Уйгурский район еще более нестабильным, в Пекине не сомневаются и, похоже, готовы к самым радикальным шагам, чтобы избежать такого развития ситуации.
Недавно один влиятельный российский еженедельник разместил на первой полосе статью, озаглавленную «Речка Кара-Суу разделит в Киргизии русских и китайцев». Журналисты издания предполагают, что Москва и Пекин намерены ввести миротворческие силы на территорию Кыргызстана. При этом север страны (приблизительно до 41 параллели) возьмут под контроль силы ОДКБ (читай Россия), а юг – миротворцы ШОС (читай Китай). Напомню, что 41 параллель – это и есть Кара-Суу – та самая горная река, на берегах которой базировался наш студенческий лагерь.
Понятно, что для ввода миротворцев нужен серьезный повод. Поэтому могу предположить, что буза здесь будет продолжаться.
***
Будучи комиссаром студ-стройотряда, я в числе прочего отвечал за досуг студентов. Решая эту проблему, я за собственные три советских рубля купил двух ишаков, на которых мы каждый вечер устраивали скачки. Упрямые животные своих седоков не слушали, всегда скакали к речке, куда старались сбросить оседлавших их студентов. Победителем у нас считался тот, кому удавалось удержаться на спине скакуна.
Вспоминаю об этом потому, что киргизская политика все больше напоминает мне наши скачки на ишаках. Только если студентов в воду бросали упрямые четвероногие, то киргизских политиков купают в водах Кара-Суу влиятельные игроки геополитических интриг...
Виктор ЧИКИН

Автор: 
Виктор ЧИКИН
Номер газеты: