Аннотация: Написан в 2017 году на конкурс "Рваная Грелка". Тема: "Фантастический Новый Год".
Я не люблю Новый Год.
Для всех нормальных людей это шампанское, мандарины и оливье, подарки, бенгальские огни. Это повод собраться всей семьей за одним столом. Для детей это возможность первого января проснуться раньше взрослых и нахомячиться с неубранного праздничного стола.
А для меня это напоминание о своей давней ошибке. Настолько давней, что о ней уже все должны были забыть. А если не забыли, то простили точно.
Впрочем, надеяться на то, что о ней забудут, было бы наивно. Если уж я, наполовину седой, помню свои детские обиды. Запрет, который забыли отменить. Любимую игрушку, случайно запертую в ящике стола. Кусочки чудес, которые не случились вовремя, а с возрастом уже навсегда перестали ими быть.
Навсегда.
* * *
Аксель вел себя подозрительно.
Второго января, пока вся остальная команда бурно опохмелялась, он как-то слишком резко протрезвел. Третьего января у него начали бегать глаза. Четвертого января он слишком часто стоял, уткнувшись озабоченным лбом в иллюминатор, с сигаретой между трясущимися пальцами. При том, что курил он только напившись, а не наоборот.
Поэтому на пятый день после Нового года Тимур подкараулил Акселя у каюты, затолкал внутрь и ласково взял за грудки.
- Рассказывай, - сказал он.
Тот попытался было отмазаться, но на середине фразы осознал - не получится. Когда Тимур активно намеревается тебе помочь, придется подчиняться.
Однако Аксель предпринял последнюю отчаянную попытку.
- Ты не поймешь, - сказал он.
- Объясни так, чтобы я понял, - подбодрил Тимур. - Ты способный.
Аксель обреченно затянулся. Откашлявшись, сказал:
- Медуза глючит.
- Которая?
- Не все ли равно? Шестая.
Тимур задумался о последствиях. "Медуз" было пятнадцать. Они равномерно кружили вокруг Бетлехема, собирая информацию. Потеря одной - неприятность, конечно, но не настолько, чтобы Аксель так нервничал.
- Чем грозит? - спросил он. - Дырками в покрытии?
- В смысле дырками? Данные она отдает, как положено... да хрен бы с ними! Она не принимает коррекционный файл! Через два года она навернется на Бетлехем. Через восемь месяцев этот процесс нельзя будет остановить навигационными двигателями.
Тимур фыркнул.
- Целых восемь месяцев?! И чего ты трясешься?
- Потому, что я без малейшего понятия, что делать. Штурмберг, сука, наворотил, а я - расхлебывай!
Штурмберг, конечно, был не сукой, а почти гением. Он создал пятнадцать наблюдательных станций, которые обозвал "Медузами", в буквальном смысле из мусора, который нашел на корабле дальней разведки. К подходу основного исследовательского флота сеть "Медуз" функционировала идеально - на первый взгляд - и его капитан решил сэкономить на стандартных ботах. Поэтому сейчас над Бетлехемом вертелась сеть из самодельных спутников с неизвестной никому начинкой. Работает - и ладно.
На то, что создателя этих спутников уже нет в живых, предпочли закрыть глаза.
У "Медуз" был лишь один недостаток - отсутствие обратной связи в реальном времени. Управлялись они с помощью коррекционных файлов, закачиваемых по стандартному протоколу. Кроме того, им каждый год требовался сброс таймера - вероятно, с электроникой у Штурмберга был особенный дефицит, не позволивший обеспечить нормальное количество разрядов. Поэтому в инструкциях он настойчиво рекомендовал корректировать время и прочие параметры одним пакетом, раз в год. Учитывая накладные расходы на установку соединения, рекомендации звучали вполне осмысленно - по неизвестным причинам станции к получению пакета готовились несколько часов, отключая при этом телеметрию. Ходили слухи, что некоторые электронные решения Штурмбергу пришлось заменять механикой.
Но экономия на развертывании стандартной спутниковой сети перевесила даже эти неудобства.
Тимур недоуменно пожал плечами.
- Отзвонись начальству, да и все. Это же не твоя проблема. За восемь месяцев они всяко успеют долететь.
- Херовое предложение.
- Почему?
Аксель снова затянулся.
- Потому, что главному важно не решить задачу, - тщательно выговорил он. - Главному важно, как это будет выглядеть. Если в его присутствии снизится категория невмешательства - а если хоть одна "Медуза" звезданется, это минимум два пункта - это дикое падение рейтинга. Поэтому он с вероятностью в девяносто девять процентов раздолбит все "Медузы" и выпустит стандартную сеть ботов. А меня уволит с волчьим билетом, так как специалист по станциям Штурмберга ему больше будет не нужен, а собак за трату полумиллиарда денег повесить на кого-то надо.
- Да как он к тебе сможет прикопаться?!
- Найдет!
Последнее слово несло слишком высокую для простого цинизма экспрессию. Тимур прищурился.
- У тебя что, рыльце в пушку? Ты как-то накосячил с шестой "Медузой"?
Мрачно скривившись, Аксель щелчком послал окурок в утилизатор. Промахнулся, естественно.
- Я забыл про коррекционный файл, - с досадой сказал он. - Просто тупо забыл в конце года добавить его в пакет. Второго смотрю данные - отличаются от расчетных. Закинул файл, а она его не принимает!
- Ну и что? Станции должны принимать и так, и этак.
- Мало ли, что они должны! Ну Тим, ну ты не понимаешь что ли?
Что станции должны, а что - нет - решать будет комиссия. Но если дойдет до комиссии... Аксель был прав. Плохо будет всем. Ему так уж точно.
Тимур вздохнул.
- Да понимаю я все. Хорошо, давай покумекаем. Ты раньше когда-нибудь отсылал только сброс? Без коррекции?
- Нет. Всегда было что настроить.
- А коррекцию без сброса?
- Постоянно.
- Что, если "Медузы" всегда ожидают коррекционного пакета при получении команды сброса? А без полного пакета банально не выполняют коррекцию?
- Они не должны так работать. Это никак не связано.
Тимур пожал плечами.
- Предположим, баг. Штурмберг был хорош, но не идеален. Он мог посадить ошибку, которая выплыла только сейчас. Ты же можешь сейчас послать полный пакет - и команду сброса, и файл коррекции?
Аксель ненадолго задумался.
- Могу, - проворчал он. - Только время потом править придется весь год.
Тимур картинно развел руками.
- По сравнению с падением станции это невероятная проблема!
Аксель хмуро посмотрел в ответ, но ясно было, что соломинка найдена, и придется - за неимением лучшего - цепляться за нее.
Впрочем, соломинка подвела.
После нескольких часов ожидания соединения, которые Аксель потратил на сочинение объяснительной записки на тему дырки в получаемых данных, таймер "Медузы-6", наконец, сбросился. Но двигатели продолжали молчать. Курс станции остался неизменным. Коррекционный файл считываться не желал.
- Охренеть! - бурчал Алекс. - Огреб головной боли по редактуре таймстампа телеметрии, а толку никакого!
- Да какая головная боль? Полчаса на то, чтобы программу накатать?
- Дело не в программе. Если изначальная метка времени отличается - это ж форс-мажор! Теперь моей работе весь год постоянное дополнительное внимание обеспечено. Под лупой каждый отчет будут рассматривать. Нахрен мне такое счастье?
- Ну прости, - ответил Тимур. - Там станция падает, помнишь, да?
Аксель скорчил дикую гримасу.
- Помню! Вот если б она не падала, остальное я бы пережил.
Тимур похлопал друга по плечу.
- Могу тебя обрадовать. У нашего эксперимента есть и положительный выхлоп. Мы теперь знаем, что программа не зависла и все еще опрашивает входной поток. Осталось понять, что ей скормить.
- Она ж отправляет данные, ясен пень, что не зависла. Вот только два параметра у нас, и все комбинации уже кончились. И что дальше?
Тимур это прекрасно понимал. Но он знал, что решение есть. Должно быть.
Его не может не быть.
* * *
Новый Год - это многодневные хлопоты.
Принято считать, что приятные. Но нет. Не всегда.
Иногда они накладываются на проблемы на работе. На болезнь. На усталость. И на выходе скапливаются раздражение и злость, которые прорываются в самый неподходящий момент.
Однажды, тридцатого декабря, у одного человека случился тяжелый день. На работе требовали сдачи отчетов, которые никак не сходились. К тому же он до сих пор не смог найти подходящий подарок пятилетнему сыну. И вот, когда вечером жена в очередной раз стала пилить его за работу допоздна, он сорвался. Напился, ввязался в пьяную драку, и Новый Год встречал в обезьяннике.
Когда через несколько дней он вышел, он пошел и купил самый лучший подарок, который мог вообразить. Магнитный конструктор, огромную коробку с кучей деталей.
Но сын к ней так и не притронулся.
Просто не замечал ее. А если ему напоминали, скучнел лицом, говорил, "не хочу" - и все тут.
Через месяц ее продали.
* * *
Утром следующего дня Тимур картинным жестом распахнул дверь в каюту Акселя и воскликнул:
- Нам нужно чудо!
- Я в курсе, - сухо сказал Аксель, не отрываясь от каких-то расчетов. - Я так понимаю, еще нам теперь надо искать лекарство для моего лучшего друга, который повредился головой?
- Хе-хе, - сказал Тимур. - Не торопись-ка с выводами. Я нашел третий параметр, на который мы можем влиять. Возможно. Не уверен до конца.
Аксель сразу забыл про то, чем занимался. Его взгляд стал цепким и сосредоточенным.
- Что за параметр?
- Сессия. Сеанс связи. Все изменения внутри "Медузы" могут быть привязаны к сеансу связи.
- А зачем?
- Да черт его знает. Возможно, были ложные срабатывания, от которых Штурмберг не мог избавиться. Защита от повторного использования.
Аксель потер лицо.
- А ведь ты прав, - сказал он. - Там электроника сделана из говна и палок. Мы привыкли, что можем запомнить размер файла, дату создания, хрен знает еще чего. А там небось ничего такого нет. Получите, распишитесь, и сразу используйте.
- Вопрос в том, что нам это дает, - сказал Тимур. - Я как спросонья придумал идею, сразу к тебе, не успел обмозговать ее как следует.
- Сеансы, - задумчиво сказал Аксель. - Что мы имеем в таком разрезе? Сеанс с таймером без файла. Сеанс с файлом без таймера, причем файл проигнорировали. После этого следующий сеанс и с тем, и с другим, но файл снова не заметили. Что это означает? Вилами по воде это означает, мать его за ногу.
Он поворошил короткие волосы, встал и начал кружить по комнате, как делал всегда, решая особо сложные задачки.
- Сессия должна быть закрыта, - бормотал он. - Предположим, сессия закрывается, только если в нее входят и файл, и таймер. Предположим, файл не срабатывает, если предыдущая сессия не закрыта. Сука, дохрена слишком предположений. Но делать нечего. Тогда нам нужно положить файл внутрь новогоднего сеанса. Как это сделать?
- А в чем проблема?
- Ну как это в чем? Это уже открытая сессия, а каждый сеанс связи создает новую. Ты на море, я на суше, получи лапшу на уши.
Тимур задумался.
- Ерунда какая-то, - сказал он. - Мы исходим из предположения, что там каждый байт на счету, а ты утверждаешь, что там аж мультисессионная обработка.
- Строго говоря, утверждаешь это ты. Но ты снова прав, никаких там мультисессий нет, это глупость.
Воцарилась тишина, иногда прерываемая сдавленным покашливанием. Аксель так и не научился курить.
- Дай посмотреть структуру пакета, который ты отсылаешь на "Медузу", - попросил Тимур.
Он ожидал, что друг уступит ему место за монитором, но тот поворошил бумаги на столе и вытащил листок, любовно расчерченный и подробнейшим образом расписанный, какие кусочки данных за что отвечают.
- Разрисовал подробно, думал, идеи какие-то появятся, - пояснил Аксель.
Тимур внимательно рассмотрел чертеж. Вроде все выглядело вполне обыденно. Впрочем, если учесть обстоятельства - кое-чего вызывало удивление.
- А зачем ты отсылаешь туда глобальную метку времени? - спросил он.
- За шкафом... - Аксель осекся и медленно, завороженно проговорил: - Потому, что такие спецификации...
- А спецификации писал кто? - в тон ему спросил Тимур.
- Штурмберг. Ты хочешь сказать, что он сделал принятие коррекционного файла зависящим от глобального таймстампа? Но зачем? Вот тут точно логики никакой!
- Почему ты все время ищешь логику? Могут быть ошибки, могут быть сбои. Да и сам Штурмберг, по слухам, был реально двинутым...
- Слушай, я его немного знал! - вскинулся Аксель. - Он действительно был не совсем нормальный, но руки у него были золотые! И голова тоже не деревянная. От балды он это не воткнул бы!
Тимур поднял руки.
- Я не хотел оскорбить его память, - сказал он. - Просто предлагаю попробовать.
Аксель уселся на стул, повертелся немного туда и обратно.
- Тупо перенестись назад во времени, - сказал он. - Сделать морду кирпичом, заявить, что ничего не происходило. И попробовать заново. Мне это нравится! Правда, фальшивую метку на выход не так просто поставить, как кажется.
- Ты талантливый...
- Да иди ты в задницу! Да, еще нюанс - шестерка на Новый Год была закрыта планетой. Пришлось ждать что-то в районе получаса. Думаешь, там сделаны на это допуски?
- Если все работает так, как мы думаем - конечно, сделаны. Уж на это Штурмберг точно заложился.
Пальцы Акселя нервно барабанили по столу.
- Намеренное искажение коррекционных данных. Прикопаются, Тим. Если не повезет, прикопаются так, что хрен я после этого куда-то дальше Луны полечу... Да хер бы с ним! Все! Вали давай! Мне работать надо. Стандартные протоколы переписывать.
Тимур грустно улыбнулся.
- А ты думаешь, чудо - это так просто? - спросил он. - Все, валю, валю.
* * *
Иногда мне снится один и тот же сон.
Я подхожу к новогодней елке, заваленной подарками, и кладу еще один. Последний.
И в этот момент - во сне - я переполнен счастьем.
Сын давно вырос. Мы с ним изредка общаемся, и он никогда не вспоминает об этом эпизоде.
А я боюсь спрашивать.
Но когда я просыпаюсь после такого сна, я всегда пытаюсь вообразить, что же можно было сделать, чтобы исправить то, что я сделал. Чтобы вернуть чудо.
Это же так просто - обмануть ребенка. Я помню, как мои родители на мгновение отвлекли меня и подсунули настоящую гитару вместо игрушечной. Как они прикрепляли в незаметных местах подарки, и те выскальзывали под елку потому, что в другом конце комнаты мама обрывала нитку. И казалось, они появлялись ниоткуда.
Столько вариантов. Столько возможностей.
Но я ничего не могу придумать, кроме того, чтобы отмотать обратно время.
Чтобы исправить одно чудо, нужно совершить другое.
Иначе нельзя.
* * *
Вторая попытка не понадобилась.
Получив тщательно выверенный по времени файл данных, "Медуза-6" встрепенулась и послушно легла на новый курс. Тимур мгновенно понял это, когда заглянул к Акселю и увидел широченную улыбку, с которой тот просматривал данные телеметрии. Воздух в каюте был чистый, облака дыма не витали в воздухе, как последние несколько дней.
- Ну что, - спросил он, - Медуза снова поверила в деда Мороза?
Аксель на мгновение непонимающе уставился на него, а потом рассмеялся.
- А ведь действительно! - воскликнул он. - Я как дед Мороз, каждый год раздаю подарки всем станциям. С боем курантов!
- Вот-вот, - кивнул Тимур. - И вдруг ты взял и одну из станций оставил без подарка. Ну кто так делает? Естественно, она обиделась.
- Но я же все исправил! - с шутливой мольбой в голосе сказал Аксель, и тут же поправился: - Мы все исправили!
- Да, - сказал Тимур. - Мы это сделали! Хотя я, честно говоря, не верил, что получится...
Аксель поднял бровь.
- Почему?
- Я искал причину, хотя бы теоретическую, зачем нужно это делать обязательно под Новый Год. Я думал, может быть, это защита от ухода на второй круг - ну, знаешь, если забыли сбросить таймер. Или какая-то дополнительная синхронизация. Но я так ничего и не придумал. Это просто бессмыслица.
- Я так не думаю, - сказал Аксель.
Он достал из кармана мятую сигарету, повертел ее в руках, и бросил в утилизатор.
- Это ведь создания Штурмберга, - сказал он. - Его детища. Он знал о них все, а мы не знаем почти ничего. То, что мы случайно что-то там угадали - всего лишь везение.
- Да это понятно, - легкомысленно сказал Тимур. - Говорят, он с собой покончил?
Аксель покачал головой.
- Нет. Не такой он был человек. Просто напился и уснул с зажженной сигаретой. Да еще дверь в каюту запер, дурак старый. А у него ведь там настоящая свалка накопилась, он же все тащил к себе, всему мог найти применение. А тут еще Новый Год, упаковки от подарков, серпантин, вот это все. Так-то хрен бы там что загорелось, конечно... О, смотри, шестерочка наша! Летит. Парит, наша орлица!
Они уткнулись в иллюминатор.
Там, проплывая над круглой синей планетой, скользила в лучах звезды самодельная станция, тускло поблескивая неровно уложенной обшивкой. У нее только что наступил Новый Год, с аккуратным и полезным файлом в праздничном пакете данных. И все у нее было хорошо.