Калькулятор изменения концентрации во времени
Расчёт концентрации реагента или времени протекания химической реакции для процессов нулевого, первого и второго порядка по известной константе скорости.
—
Конечная концентрация C
моль/л
—
Период полураспада t₁/₂
с
Как пользоваться
1
Выберите порядок реакции — нулевой, первый или второй — в зависимости от кинетического закона вашего процесса.
2
Укажите режим расчёта: «Рассчитать концентрацию» (зная время) или «Рассчитать время» (зная конечную концентрацию).
3
Введите начальную концентрацию C₀, константу скорости k и значение времени (например, 1200 с) или конечной концентрации (например, 0.3 моль/л).
4
Нажмите «Рассчитать» — результат отобразится в правой панели вместе с периодом полураспада и степенью превращения.
Примеры использования
Разложение N₂O₅ (первый порядок)
Константа скорости k = 3.4×10⁻⁴ с⁻¹, начальная концентрация C₀ = 0.5 моль/л, время t = 1200 с.
Результат: C ≈ 0.332 моль/л, степень превращения ≈ 33.6%, t₁/₂ ≈ 2039 с.
Реакция 2HI → H₂ + I₂ (второй порядок)
k = 3.8×10⁻³ л/(моль·с), C₀ = 0.1 моль/л, t = 500 с.
Результат: C ≈ 0.087 моль/л, степень превращения ≈ 13%, t₁/₂ ≈ 2632 с.
Разложение на поверхности катализатора (нулевой порядок)
k = 2×10⁻⁴ моль/(л·с), C₀ = 0.05 моль/л. Требуется найти время полного разложения (C = 0).
Результат: t = C₀/k = 250 с. Период полураспада t₁/₂ = 125 с.
Важные нюансы
- Согласованность единиц. Если время задано в секундах, константа скорости должна быть выражена в с⁻¹ (для первого порядка), л/(моль·с) (для второго) или моль/(л·с) (для нулевого). При смене единиц времени численное значение k также меняется.
- Нулевой порядок. Концентрация убывает линейно и достигает нуля за конечное время t_max = C₀/k. При t > t_max концентрация принимается равной нулю — реакция завершена.
- Первый порядок. Период полураспада t₁/₂ = ln(2)/k не зависит от начальной концентрации — это уникальное свойство реакций первого порядка.
- Второй порядок. Скорость реакции резко падает при уменьшении концентрации: за одинаковые промежутки времени при низких концентрациях расходуется меньше вещества, чем при высоких.
- Температурная зависимость. Калькулятор предполагает изотермические условия. Константа скорости k зависит от температуры по уравнению Аррениуса: k = A·exp(−Ea/RT). При изменении температуры необходимо пересчитать k.
Формулы расчёта
Нулевой порядок:
C = C₀ − k·t | t = (C₀ − C) / k | t₁/₂ = C₀ / (2k)
Первый порядок:
C = C₀ · e^(−k·t) | t = ln(C₀/C) / k | t₁/₂ = ln(2) / k
Второй порядок:
1/C = 1/C₀ + k·t | C = C₀ / (1 + k·C₀·t) | t₁/₂ = 1 / (k·C₀)
Степень превращения: α = (C₀ − C) / C₀ × 100%
Источники данных
- IUPAC Gold Book — Compendium of Chemical Terminology: определения константы скорости, порядка реакции и периода полураспада (doi:10.1351/goldbook).
- NIST Chemical Kinetics Database — Национальный институт стандартов и технологий США: стандартные справочные данные по кинетическим параметрам газофазных реакций.
- CRC Handbook of Chemistry and Physics — табличные значения констант скоростей для широкого класса химических реакций, раздел Chemical Kinetics.
- Atkins P., de Paula J. — Physical Chemistry (Oxford University Press): фундаментальный учебник, теоретические основы химической кинетики и вывод кинетических уравнений для реакций различных порядков.
Расчёт основан на стандартных химических формулах и школьно-вузовских справочных значениях. Для точных инженерных или лабораторных расчётов рекомендуется сверяться с экспериментальными данными для конкретной реакции.
Калькулятор изменения концентрации во времени — это инструмент химической кинетики, позволяющий определить концентрацию реагента в заданный момент времени или время достижения определённой концентрации для реакций нулевого, первого и второго порядка. Кинетические расчёты необходимы при планировании лабораторных синтезов, оптимизации промышленных химических процессов и анализе фармакокинетики лекарственных средств. Используйте этот калькулятор для быстрой оценки скорости протекания реакций, расчёта периода полураспада и степени превращения веществ без ручного решения кинетических уравнений.
CihmdW5jdGlvbigpewogICAgdmFyIG9yZGVyU2VsZWN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2N0LW9yZGVyJyk7CiAgICB2YXIgbW9kZVNlbGVjdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjdC1tb2RlJyk7CiAgICB2YXIgYzBJbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjdC1jMCcpOwogICAgdmFyIGtJbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjdC1rJyk7CiAgICB2YXIgdGltZUlucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2N0LXRpbWUnKTsKICAgIHZhciB0YXJnZXRDSW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY3QtdGFyZ2V0LWMnKTsKICAgIHZhciB0aW1lR3JvdXAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY3QtdGltZS1ncm91cCcpOwogICAgdmFyIGNvbmNHcm91cCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjdC1jb25jLWdyb3VwJyk7CiAgICB2YXIga1VuaXRTcGFuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2N0LWstdW5pdCcpOwogICAgdmFyIGNhbGNCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY3QtY2FsYy1idG4nKTsKICAgIHZhciByZXNldEJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjdC1yZXNldC1idG4nKTsKICAgIHZhciBjMEVycm9yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2N0LWMwLWVycm9yJyk7CiAgICB2YXIga0Vycm9yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2N0LWstZXJyb3InKTsKICAgIHZhciB0RXJyb3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY3QtdGltZS1lcnJvcicpOwogICAgdmFyIGNUYXJnZXRFcnJvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjdC10YXJnZXQtZXJyb3InKTsKICAgIHZhciBtYWluVmFsdWUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY3QtbWFpbi12YWx1ZScpOwogICAgdmFyIG1haW5MYWJlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjdC1tYWluLWxhYmVsJyk7CiAgICB2YXIgbWFpblVuaXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY3QtbWFpbi11bml0Jyk7CiAgICB2YXIgaGFsZmxpZmVWYWx1ZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjdC1oYWxmbGlmZS12YWx1ZScpOwogICAgdmFyIGNvbnZlcnNpb25WYWx1ZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjdC1jb252ZXJzaW9uLXZhbHVlJyk7CiAgICB2YXIgY29udmVyc2lvbkxhYmVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2N0LWNvbnZlcnNpb24tbGFiZWwnKTsKICAgIHZhciByZXN1bHRXYXJuaW5nID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2N0LXJlc3VsdC13YXJuaW5nJyk7CgogICAgaWYgKCFvcmRlclNlbGVjdCB8fCAhbW9kZVNlbGVjdCB8fCAhYzBJbnB1dCB8fCAha0lucHV0IHx8ICF0aW1lSW5wdXQgfHwgIXRhcmdldENJbnB1dCkgcmV0dXJuOwoKICAgIGZ1bmN0aW9uIGdldE9yZGVyKCkgewogICAgICAgIHJldHVybiBwYXJzZUludChvcmRlclNlbGVjdC52YWx1ZSwgMTApOwogICAgfQoKICAgIGZ1bmN0aW9uIGdldE1vZGUoKSB7CiAgICAgICAgcmV0dXJuIG1vZGVTZWxlY3QudmFsdWU7CiAgICB9CgogICAgZnVuY3Rpb24gdXBkYXRlS1VuaXQoKSB7CiAgICAgICAgdmFyIG9yZGVyID0gZ2V0T3JkZXIoKTsKICAgICAgICBpZiAob3JkZXIgPT09IDApIHsKICAgICAgICAgICAga1VuaXRTcGFuLnRleHRDb250ZW50ID0gJ2sgKNC80L7Qu9GMLyjQu8K30YEpKSc7CiAgICAgICAgfSBlbHNlIGlmIChvcmRlciA9PT0gMSkgewogICAgICAgICAgICBrVW5pdFNwYW4udGV4dENvbnRlbnQgPSAnayAo0YHigbvCuSknOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGtVbml0U3Bhbi50ZXh0Q29udGVudCA9ICdrICjQuy8o0LzQvtC70YzCt9GBKSknOwogICAgICAgIH0KICAgIH0KCiAgICBmdW5jdGlvbiB1cGRhdGVNb2RlVUkoKSB7CiAgICAgICAgdmFyIG1vZGUgPSBnZXRNb2RlKCk7CiAgICAgICAgaWYgKG1vZGUgPT09ICdjb25jZW50cmF0aW9uJykgewogICAgICAgICAgICB0aW1lR3JvdXAuc3R5bGUuZGlzcGxheSA9ICcnOwogICAgICAgICAgICBjb25jR3JvdXAuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKICAgICAgICAgICAgdGFyZ2V0Q0lucHV0LnJlbW92ZUF0dHJpYnV0ZSgncmVxdWlyZWQnKTsKICAgICAgICAgICAgdGltZUlucHV0LnNldEF0dHJpYnV0ZSgncmVxdWlyZWQnLCAnJyk7CiAgICAgICAgICAgIG1haW5MYWJlbC50ZXh0Q29udGVudCA9ICfQmtC+0L3QtdGH0L3QsNGPINC60L7QvdGG0LXQvdGC0YDQsNGG0LjRjyBDJzsKICAgICAgICAgICAgbWFpblVuaXQudGV4dENvbnRlbnQgPSAn0LzQvtC70Ywv0LsnOwogICAgICAgICAgICBjb252ZXJzaW9uTGFiZWwudGV4dENvbnRlbnQgPSAn0KHRgtC10L/QtdC90Ywg0L/RgNC10LLRgNCw0YnQtdC90LjRjyc7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGltZUdyb3VwLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CiAgICAgICAgICAgIGNvbmNHcm91cC5zdHlsZS5kaXNwbGF5ID0gJyc7CiAgICAgICAgICAgIHRpbWVJbnB1dC5yZW1vdmVBdHRyaWJ1dGUoJ3JlcXVpcmVkJyk7CiAgICAgICAgICAgIHRhcmdldENJbnB1dC5zZXRBdHRyaWJ1dGUoJ3JlcXVpcmVkJywgJycpOwogICAgICAgICAgICBtYWluTGFiZWwudGV4dENvbnRlbnQgPSAn0JLRgNC10LzRjyB0JzsKICAgICAgICAgICAgbWFpblVuaXQudGV4dENvbnRlbnQgPSAn0YEnOwogICAgICAgICAgICBjb252ZXJzaW9uTGFiZWwudGV4dENvbnRlbnQgPSAn0J7RgdGC0LDRgtC+0YfQvdCw0Y8g0LTQvtC70Y8gQy9D4oKAJzsKICAgICAgICB9CiAgICAgICAgY2xlYXJFcnJvcnMoKTsKICAgICAgICBjbGVhclJlc3VsdHMoKTsKICAgIH0KCiAgICBmdW5jdGlvbiBjbGVhckVycm9ycygpIHsKICAgICAgICBjMEVycm9yLnRleHRDb250ZW50ID0gJyc7CiAgICAgICAga0Vycm9yLnRleHRDb250ZW50ID0gJyc7CiAgICAgICAgdEVycm9yLnRleHRDb250ZW50ID0gJyc7CiAgICAgICAgY1RhcmdldEVycm9yLnRleHRDb250ZW50ID0gJyc7CiAgICAgICAgcmVzdWx0V2FybmluZy50ZXh0Q29udGVudCA9ICcnOwogICAgICAgIHJlc3VsdFdhcm5pbmcuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKICAgIH0KCiAgICBmdW5jdGlvbiBjbGVhclJlc3VsdHMoKSB7CiAgICAgICAgbWFpblZhbHVlLnRleHRDb250ZW50ID0gJ+KAlCc7CiAgICAgICAgaGFsZmxpZmVWYWx1ZS50ZXh0Q29udGVudCA9ICfigJQnOwogICAgICAgIGNvbnZlcnNpb25WYWx1ZS50ZXh0Q29udGVudCA9ICfigJQnOwogICAgfQoKICAgIGZ1bmN0aW9uIHNob3dFcnJvcihlbCwgbXNnKSB7CiAgICAgICAgaWYgKGVsKSB7CiAgICAgICAgICAgIGVsLnRleHRDb250ZW50ID0gbXNnOwogICAgICAgIH0KICAgIH0KCiAgICBmdW5jdGlvbiB2YWxpZGF0ZVBvc2l0aXZlKHZhbHVlLCBlcnJvckVsLCBmaWVsZE5hbWUpIHsKICAgICAgICBpZiAodmFsdWUgPT09ICcnIHx8IHZhbHVlID09PSBudWxsIHx8IGlzTmFOKHZhbHVlKSkgewogICAgICAgICAgICBzaG93RXJyb3IoZXJyb3JFbCwgJ9CS0LLQtdC00LjRgtC1INGH0LjRgdC70L7QstC+0LUg0LfQvdCw0YfQtdC90LjQtSDQtNC70Y8gJyArIGZpZWxkTmFtZSk7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgICAgaWYgKHZhbHVlIDw9IDApIHsKICAgICAgICAgICAgc2hvd0Vycm9yKGVycm9yRWwsIGZpZWxkTmFtZSArICcg0LTQvtC70LbQvdC+INCx0YvRgtGMINC/0L7Qu9C+0LbQuNGC0LXQu9GM0L3Ri9C8INGH0LjRgdC70L7QvCcpOwogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIGZ1bmN0aW9uIHZhbGlkYXRlTm9uTmVnYXRpdmUodmFsdWUsIGVycm9yRWwsIGZpZWxkTmFtZSkgewogICAgICAgIGlmICh2YWx1ZSA9PT0gJycgfHwgdmFsdWUgPT09IG51bGwgfHwgaXNOYU4odmFsdWUpKSB7CiAgICAgICAgICAgIHNob3dFcnJvcihlcnJvckVsLCAn0JLQstC10LTQuNGC0LUg0YfQuNGB0LvQvtCy0L7QtSDQt9C90LDRh9C10L3QuNC1INC00LvRjyAnICsgZmllbGROYW1lKTsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICBpZiAodmFsdWUgPCAwKSB7CiAgICAgICAgICAgIHNob3dFcnJvcihlcnJvckVsLCBmaWVsZE5hbWUgKyAnINC90LUg0LzQvtC20LXRgiDQsdGL0YLRjCDQvtGC0YDQuNGG0LDRgtC10LvRjNC90YvQvCcpOwogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIGZ1bmN0aW9uIGNhbGN1bGF0ZSgpIHsKICAgICAgICBjbGVhckVycm9ycygpOwogICAgICAgIGNsZWFyUmVzdWx0cygpOwogICAgICAgIHJlc3VsdFdhcm5pbmcuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKCiAgICAgICAgdmFyIG9yZGVyID0gZ2V0T3JkZXIoKTsKICAgICAgICB2YXIgbW9kZSA9IGdldE1vZGUoKTsKICAgICAgICB2YXIgYzAgPSBwYXJzZUZsb2F0KGMwSW5wdXQudmFsdWUpOwogICAgICAgIHZhciBrID0gcGFyc2VGbG9hdChrSW5wdXQudmFsdWUpOwogICAgICAgIHZhciB0aW1lVmFsID0gbnVsbDsKICAgICAgICB2YXIgdGFyZ2V0Q1ZhbCA9IG51bGw7CgogICAgICAgIHZhciB2YWxpZCA9IHRydWU7CiAgICAgICAgaWYgKCF2YWxpZGF0ZVBvc2l0aXZlKGMwLCBjMEVycm9yLCAn0J3QsNGH0LDQu9GM0L3QsNGPINC60L7QvdGG0LXQvdGC0YDQsNGG0LjRjyBD4oKAJykpIHZhbGlkID0gZmFsc2U7CiAgICAgICAgaWYgKCF2YWxpZGF0ZVBvc2l0aXZlKGssIGtFcnJvciwgJ9Ca0L7QvdGB0YLQsNC90YLQsCDRgdC60L7RgNC+0YHRgtC4IGsnKSkgdmFsaWQgPSBmYWxzZTsKCiAgICAgICAgaWYgKG1vZGUgPT09ICdjb25jZW50cmF0aW9uJykgewogICAgICAgICAgICB0aW1lVmFsID0gcGFyc2VGbG9hdCh0aW1lSW5wdXQudmFsdWUpOwogICAgICAgICAgICBpZiAoIXZhbGlkYXRlTm9uTmVnYXRpdmUodGltZVZhbCwgdEVycm9yLCAn0JLRgNC10LzRjyB0JykpIHZhbGlkID0gZmFsc2U7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGFyZ2V0Q1ZhbCA9IHBhcnNlRmxvYXQodGFyZ2V0Q0lucHV0LnZhbHVlKTsKICAgICAgICAgICAgaWYgKCF2YWxpZGF0ZU5vbk5lZ2F0aXZlKHRhcmdldENWYWwsIGNUYXJnZXRFcnJvciwgJ9Ca0L7QvdC10YfQvdCw0Y8g0LrQvtC90YbQtdC90YLRgNCw0YbQuNGPIEMnKSkgdmFsaWQgPSBmYWxzZTsKICAgICAgICAgICAgaWYgKHZhbGlkICYmIHRhcmdldENWYWwgPiBjMCkgewogICAgICAgICAgICAgICAgc2hvd0Vycm9yKGNUYXJnZXRFcnJvciwgJ9Ca0L7QvdC10YfQvdCw0Y8g0LrQvtC90YbQtdC90YLRgNCw0YbQuNGPINC90LUg0LzQvtC20LXRgiDQv9GA0LXQstGL0YjQsNGC0Ywg0L3QsNGH0LDQu9GM0L3Rg9GOJyk7CiAgICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoIXZhbGlkKSByZXR1cm47CgogICAgICAgIHZhciByZXN1bHRDLCByZXN1bHRULCBoYWxmTGlmZSwgY29udmVyc2lvbjsKCiAgICAgICAgaWYgKG9yZGVyID09PSAwKSB7CiAgICAgICAgICAgIGhhbGZMaWZlID0gYzAgLyAoMiAqIGspOwogICAgICAgICAgICBpZiAobW9kZSA9PT0gJ2NvbmNlbnRyYXRpb24nKSB7CiAgICAgICAgICAgICAgICB2YXIgZGVsdGEgPSBrICogdGltZVZhbDsKICAgICAgICAgICAgICAgIGlmIChkZWx0YSA+PSBjMCkgewogICAgICAgICAgICAgICAgICAgIHJlc3VsdEMgPSAwOwogICAgICAgICAgICAgICAgICAgIHJlc3VsdFdhcm5pbmcudGV4dENvbnRlbnQgPSAn0JLQvdC40LzQsNC90LjQtTog0YDQtdCw0LrRhtC40Y8g0L/QvtC70L3QvtGB0YLRjNGOINC30LDQstC10YDRiNC40LvQsNGB0Ywg0LfQsCDQstGA0LXQvNGPIHQgPSAnICsgKGMwIC8gaykudG9GaXhlZCg0KSArICcg0YEuINCa0L7QvdGG0LXQvdGC0YDQsNGG0LjRjyDQtNC+0YHRgtC40LPQu9CwINC90YPQu9GPLic7CiAgICAgICAgICAgICAgICAgICAgcmVzdWx0V2FybmluZy5zdHlsZS5kaXNwbGF5ID0gJyc7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHJlc3VsdEMgPSBjMCAtIGRlbHRhOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmVzdWx0VCA9IHRpbWVWYWw7CiAgICAgICAgICAgICAgICBjb252ZXJzaW9uID0gKChjMCAtIHJlc3VsdEMpIC8gYzApICogMTAwOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmVzdWx0QyA9IHRhcmdldENWYWw7CiAgICAgICAgICAgICAgICBpZiAodGFyZ2V0Q1ZhbCA9PT0gMCAmJiBjMCA+IDApIHsKICAgICAgICAgICAgICAgICAgICByZXN1bHRUID0gYzAgLyBrOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0YXJnZXRDVmFsID4gYzApIHsKICAgICAgICAgICAgICAgICAgICByZXN1bHRUID0gMDsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgcmVzdWx0VCA9IChjMCAtIHRhcmdldENWYWwpIC8gazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGNvbnZlcnNpb24gPSAoKGMwIC0gcmVzdWx0QykgLyBjMCkgKiAxMDA7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKG9yZGVyID09PSAxKSB7CiAgICAgICAgICAgIGhhbGZMaWZlID0gTWF0aC5sb2coMikgLyBrOwogICAgICAgICAgICBpZiAobW9kZSA9PT0gJ2NvbmNlbnRyYXRpb24nKSB7CiAgICAgICAgICAgICAgICByZXN1bHRDID0gYzAgKiBNYXRoLmV4cCgtayAqIHRpbWVWYWwpOwogICAgICAgICAgICAgICAgcmVzdWx0VCA9IHRpbWVWYWw7CiAgICAgICAgICAgICAgICBjb252ZXJzaW9uID0gKChjMCAtIHJlc3VsdEMpIC8gYzApICogMTAwOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmVzdWx0QyA9IHRhcmdldENWYWw7CiAgICAgICAgICAgICAgICBpZiAodGFyZ2V0Q1ZhbCA8PSAwIHx8IGMwIDw9IDApIHsKICAgICAgICAgICAgICAgICAgICByZXN1bHRUID0gbnVsbDsKICAgICAgICAgICAgICAgICAgICBzaG93RXJyb3IoY1RhcmdldEVycm9yLCAn0J3QtdC60L7RgNGA0LXQutGC0L3QvtC1INC30L3QsNGH0LXQvdC40LUg0LrQvtC90YbQtdC90YLRgNCw0YbQuNC4INC00LvRjyDRgNCw0YHRh9GR0YLQsCDQstGA0LXQvNC10L3QuCcpOwogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJlc3VsdFQgPSBNYXRoLmxvZyhjMCAvIHRhcmdldENWYWwpIC8gazsKICAgICAgICAgICAgICAgIGNvbnZlcnNpb24gPSAoKGMwIC0gcmVzdWx0QykgLyBjMCkgKiAxMDA7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKG9yZGVyID09PSAyKSB7CiAgICAgICAgICAgIGlmIChjMCA8PSAwKSB7CiAgICAgICAgICAgICAgICBoYWxmTGlmZSA9IG51bGw7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBoYWxmTGlmZSA9IDEgLyAoayAqIGMwKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAobW9kZSA9PT0gJ2NvbmNlbnRyYXRpb24nKSB7CiAgICAgICAgICAgICAgICByZXN1bHRDID0gYzAgLyAoMSArIGsgKiBjMCAqIHRpbWVWYWwpOwogICAgICAgICAgICAgICAgcmVzdWx0VCA9IHRpbWVWYWw7CiAgICAgICAgICAgICAgICBjb252ZXJzaW9uID0gKChjMCAtIHJlc3VsdEMpIC8gYzApICogMTAwOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmVzdWx0QyA9IHRhcmdldENWYWw7CiAgICAgICAgICAgICAgICBpZiAodGFyZ2V0Q1ZhbCA8PSAwIHx8IGMwIDw9IDApIHsKICAgICAgICAgICAgICAgICAgICByZXN1bHRUID0gbnVsbDsKICAgICAgICAgICAgICAgICAgICBzaG93RXJyb3IoY1RhcmdldEVycm9yLCAn0J3QtdC60L7RgNGA0LXQutGC0L3QvtC1INC30L3QsNGH0LXQvdC40LUg0LrQvtC90YbQtdC90YLRgNCw0YbQuNC4INC00LvRjyDRgNCw0YHRh9GR0YLQsCDQstGA0LXQvNC10L3QuCcpOwogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJlc3VsdFQgPSAoMSAvIHRhcmdldENWYWwgLSAxIC8gYzApIC8gazsKICAgICAgICAgICAgICAgIGlmIChyZXN1bHRUIDwgMCkgewogICAgICAgICAgICAgICAgICAgIHNob3dFcnJvcihjVGFyZ2V0RXJyb3IsICfQn9GA0Lgg0LfQsNC00LDQvdC90YvRhSDQv9Cw0YDQsNC80LXRgtGA0LDRhSDQstGA0LXQvNGPINC/0L7Qu9GD0YfQsNC10YLRgdGPINC+0YLRgNC40YbQsNGC0LXQu9GM0L3Ri9C8LiDQn9GA0L7QstC10YDRjNGC0LUsINGH0YLQviBDIDwgQ+KCgC4nKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBjb252ZXJzaW9uID0gKChjMCAtIHJlc3VsdEMpIC8gYzApICogMTAwOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAobW9kZSA9PT0gJ2NvbmNlbnRyYXRpb24nKSB7CiAgICAgICAgICAgIG1haW5WYWx1ZS50ZXh0Q29udGVudCA9IChyZXN1bHRDICE9PSBudWxsICYmICFpc05hTihyZXN1bHRDKSAmJiBpc0Zpbml0ZShyZXN1bHRDKSkgPyByZXN1bHRDLnRvRml4ZWQoNikgOiAn4oCUJzsKICAgICAgICAgICAgbWFpbkxhYmVsLnRleHRDb250ZW50ID0gJ9Ca0L7QvdC10YfQvdCw0Y8g0LrQvtC90YbQtdC90YLRgNCw0YbQuNGPIEMnOwogICAgICAgICAgICBtYWluVW5pdC50ZXh0Q29udGVudCA9ICfQvNC+0LvRjC/Quyc7CiAgICAgICAgICAgIGNvbnZlcnNpb25MYWJlbC50ZXh0Q29udGVudCA9ICfQodGC0LXQv9C10L3RjCDQv9GA0LXQstGA0LDRidC10L3QuNGPJzsKICAgICAgICAgICAgY29udmVyc2lvblZhbHVlLnRleHRDb250ZW50ID0gKGNvbnZlcnNpb24gIT09IG51bGwgJiYgIWlzTmFOKGNvbnZlcnNpb24pICYmIGlzRmluaXRlKGNvbnZlcnNpb24pKSA/IGNvbnZlcnNpb24udG9GaXhlZCgyKSA6ICfigJQnOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIG1haW5WYWx1ZS50ZXh0Q29udGVudCA9IChyZXN1bHRUICE9PSBudWxsICYmICFpc05hTihyZXN1bHRUKSAmJiBpc0Zpbml0ZShyZXN1bHRUKSkgPyByZXN1bHRULnRvRml4ZWQoNCkgOiAn4oCUJzsKICAgICAgICAgICAgbWFpbkxhYmVsLnRleHRDb250ZW50ID0gJ9CS0YDQtdC80Y8gdCc7CiAgICAgICAgICAgIG1haW5Vbml0LnRleHRDb250ZW50ID0gJ9GBJzsKICAgICAgICAgICAgY29udmVyc2lvbkxhYmVsLnRleHRDb250ZW50ID0gJ9Ce0YHRgtCw0YLQvtGH0L3QsNGPINC00L7Qu9GPIEMvQ+KCgCc7CiAgICAgICAgICAgIGlmIChyZXN1bHRDICE9PSBudWxsICYmIGMwID4gMCAmJiAhaXNOYU4ocmVzdWx0QykgJiYgaXNGaW5pdGUocmVzdWx0QykpIHsKICAgICAgICAgICAgICAgIGNvbnZlcnNpb25WYWx1ZS50ZXh0Q29udGVudCA9ICgocmVzdWx0QyAvIGMwKSAqIDEwMCkudG9GaXhlZCgyKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGNvbnZlcnNpb25WYWx1ZS50ZXh0Q29udGVudCA9ICfigJQnOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBoYWxmbGlmZVZhbHVlLnRleHRDb250ZW50ID0gKGhhbGZMaWZlICE9PSBudWxsICYmICFpc05hTihoYWxmTGlmZSkgJiYgaXNGaW5pdGUoaGFsZkxpZmUpKSA/IGhhbGZMaWZlLnRvRml4ZWQoNCkgOiAn4oCUJzsKICAgIH0KCiAgICBmdW5jdGlvbiByZXNldEFsbCgpIHsKICAgICAgICBjMElucHV0LnZhbHVlID0gJyc7CiAgICAgICAga0lucHV0LnZhbHVlID0gJyc7CiAgICAgICAgdGltZUlucHV0LnZhbHVlID0gJyc7CiAgICAgICAgdGFyZ2V0Q0lucHV0LnZhbHVlID0gJyc7CiAgICAgICAgb3JkZXJTZWxlY3QudmFsdWUgPSAnMSc7CiAgICAgICAgbW9kZVNlbGVjdC52YWx1ZSA9ICdjb25jZW50cmF0aW9uJzsKICAgICAgICB1cGRhdGVLVW5pdCgpOwogICAgICAgIHVwZGF0ZU1vZGVVSSgpOwogICAgICAgIGNsZWFyRXJyb3JzKCk7CiAgICAgICAgY2xlYXJSZXN1bHRzKCk7CiAgICAgICAgcmVzdWx0V2FybmluZy5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogICAgfQoKICAgIG9yZGVyU2VsZWN0LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGZ1bmN0aW9uKCkgewogICAgICAgIHVwZGF0ZUtVbml0KCk7CiAgICAgICAgY2xlYXJFcnJvcnMoKTsKICAgICAgICBjbGVhclJlc3VsdHMoKTsKICAgICAgICByZXN1bHRXYXJuaW5nLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CiAgICB9KTsKCiAgICBtb2RlU2VsZWN0LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGZ1bmN0aW9uKCkgewogICAgICAgIHVwZGF0ZU1vZGVVSSgpOwogICAgfSk7CgogICAgY2FsY0J0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGNhbGN1bGF0ZSk7CgogICAgcmVzZXRCdG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCByZXNldEFsbCk7CgogICAgdXBkYXRlS1VuaXQoKTsKICAgIHVwZGF0ZU1vZGVVSSgpOwp9KSgpOwo=