Калькулятор реакции второго порядка
Расчёт концентрации, времени, константы скорости и периода полураспада для реакций второго порядка (2A → продукты или A + B → продукты при [A]₀ = [B]₀) по интегрированному кинетическому уравнению
—
Период полураспада t₁/₂
сек
Как пользоваться
1
Выберите переключателем, какой параметр вы хотите рассчитать: концентрацию, время, константу скорости, начальную концентрацию или период полураспада.
2
Заполните три известных значения в соответствующих полях (единицы измерения указаны под каждым полем). Например, для расчёта концентрации введите [A]₀ = 0.1 моль/л, k = 0.05 л/(моль·с), t = 60 с.
3
Нажмите кнопку «Рассчитать». Результат появится в правой панели (на мобильном — ниже формы). Все вычисленные значения обновляются одновременно, а использованная формула отображается явно.
4
Для нового расчёта измените значения или нажмите «Сбросить», чтобы очистить все поля. При вводе некорректных данных (отрицательные числа, нули в знаменателе) под полем появится сообщение об ошибке.
Примеры использования
Гидролиз сложного эфира (омыление этилацетата щёлочью)
Реакция: CH₃COOC₂H₅ + OH⁻ → CH₃COO⁻ + C₂H₅OH. При равных начальных концентрациях [A]₀ = 0.05 моль/л и k = 0.108 л/(моль·с). Найти концентрацию через 120 с.
Результат: [A] = 0.05 / (1 + 0.108 × 120 × 0.05) ≈ 0.0303 моль/л. За 120 секунд прореагировало около 39.4% исходного эфира.
Диссоциация димера NO₂ (2NO₂ → 2NO + O₂)
Для реакции второго порядка с k = 0.775 л/(моль·с) при 600 К, начальная концентрация [NO₂]₀ = 0.08 моль/л. Найти время, за которое концентрация упадёт до 0.02 моль/л.
Результат: t = (1/0.02 – 1/0.08) / 0.775 = (50 – 12.5) / 0.775 ≈ 48.4 с.
Определение периода полураспада для фармацевтического препарата
Деградация препарата в растворе подчиняется кинетике второго порядка с k = 0.002 л/(моль·с). Начальная концентрация 0.15 моль/л. Период полураспада t₁/₂ = 1 / (k × [A]₀) = 1 / (0.002 × 0.15) ≈ 3333 с (около 55.6 минут). Это время, за которое концентрация уменьшится вдвое.
Важные нюансы
- Калькулятор применим для реакций типа 2A → продукты или A + B → продукты только при условии равенства начальных концентраций [A]₀ = [B]₀. Если начальные концентрации различны, уравнение усложняется и требует отдельного подхода.
- Размерность константы скорости для реакции второго порядка — л/(моль·с). Если ваши данные приведены в других единицах (например, л/(моль·мин) или см³/(моль·с)), обязательно приведите их к согласованным единицам перед вводом.
- Все концентрации должны быть положительными числами. Начальная концентрация не может быть меньше конечной (если конечная концентрация указана). При нарушении этого условия выводится ошибка.
- Уравнение 1/[A] – 1/[A]₀ = kt справедливо только для изолированной системы при постоянной температуре. Изменение температуры влияет на константу скорости в соответствии с уравнением Аррениуса (не учитывается в данном калькуляторе).
- Период полураспада для реакции второго порядка зависит от начальной концентрации: t₁/₂ = 1 / (k × [A]₀). В отличие от реакций первого порядка, где t₁/₂ постоянен, здесь он увеличивается с уменьшением начальной концентрации.
Источники данных
- IUPAC Compendium of Chemical Terminology (Gold Book). Определение «order of reaction» и «rate constant». Рекомендации по размерностям и номенклатуре констант скорости.
- NIST Chemical Kinetics Database. Обширная база экспериментально измеренных констант скорости газофазных и растворных реакций, включая реакции второго порядка.
- CRC Handbook of Chemistry and Physics, раздел «Reaction Kinetics». Сводные таблицы констант скорости для типовых органических и неорганических реакций второго порядка в растворах.
- Atkins P., de Paula J. «Physical Chemistry», глава 19 — Chemical Kinetics. Учебный материал с выводом интегрированных уравнений для реакций различных порядков и примерами расчётов.
Калькулятор реакции второго порядка позволяет быстро вычислить концентрацию реагента, время протекания реакции, константу скорости или период полураспада. Он основан на классическом интегрированном кинетическом уравнении 1/[A] – 1/[A]₀ = kt, справедливом для элементарных реакций типа 2A → продукты, а также для бимолекулярных реакций A + B → продукты при условии равенства начальных концентраций реагентов. Инструмент будет полезен студентам химических и химико-технологических специальностей при выполнении лабораторных работ и курсовых проектов, а также исследователям для экспресс-оценки кинетических параметров. Для получения корректных результатов убедитесь, что все исходные данные приведены к единой системе единиц (моль/л и секунды).
CihmdW5jdGlvbigpewogIHZhciBtb2RlUmFkaW9zID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnaW5wdXRbbmFtZT0iY2FsYy1tb2RlIl0nKTsKICB2YXIgaW5wdXRJbml0aWFsQ29uYyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbml0aWFsLWNvbmMnKTsKICB2YXIgaW5wdXRDdXJyZW50Q29uYyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjdXJyZW50LWNvbmMnKTsKICB2YXIgaW5wdXRUaW1lID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RpbWUnKTsKICB2YXIgaW5wdXRSYXRlQ29uc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmF0ZS1jb25zdGFudCcpOwoKICB2YXIgZXJyb3JJbml0aWFsQ29uYyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlcnJvci1pbml0aWFsLWNvbmMnKTsKICB2YXIgZXJyb3JDdXJyZW50Q29uYyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlcnJvci1jdXJyZW50LWNvbmMnKTsKICB2YXIgZXJyb3JUaW1lID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Vycm9yLXRpbWUnKTsKICB2YXIgZXJyb3JSYXRlQ29uc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXJyb3ItcmF0ZS1jb25zdGFudCcpOwogIHZhciBnZW5lcmFsRXJyb3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZ2VuZXJhbC1lcnJvcicpOwoKICB2YXIgdmFsQ29uY2VudHJhdGlvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2YWwtY29uY2VudHJhdGlvbicpOwogIHZhciB2YWxUaW1lID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZhbC10aW1lJyk7CiAgdmFyIHZhbFJhdGVDb25zdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2YWwtcmF0ZS1jb25zdGFudCcpOwogIHZhciB2YWxJbml0aWFsQ29uYyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2YWwtaW5pdGlhbC1jb25jZW50cmF0aW9uJyk7CiAgdmFyIHZhbEhhbGZMaWZlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZhbC1oYWxmLWxpZmUnKTsKICB2YXIgZm9ybXVsYURpc3BsYXkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZm9ybXVsYS1kaXNwbGF5Jyk7CgogIHZhciByZXN1bHRJdGVtcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5ubi1nZW4tY2FsLXJlc3VsdC1pdGVtJyk7CgogIGZ1bmN0aW9uIGdldFNlbGVjdGVkTW9kZSgpIHsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbW9kZVJhZGlvcy5sZW5ndGg7IGkrKykgewogICAgICBpZiAobW9kZVJhZGlvc1tpXS5jaGVja2VkKSByZXR1cm4gbW9kZVJhZGlvc1tpXS52YWx1ZTsKICAgIH0KICAgIHJldHVybiAnY29uY2VudHJhdGlvbic7CiAgfQoKICBmdW5jdGlvbiB1cGRhdGVGaWVsZFZpc2liaWxpdHkoKSB7CiAgICB2YXIgbW9kZSA9IGdldFNlbGVjdGVkTW9kZSgpOwogICAgdmFyIGFsbEdyb3VwSWRzID0gWydpbnB1dC1pbml0aWFsLWNvbmMnLCAnaW5wdXQtY3VycmVudC1jb25jJywgJ2lucHV0LXRpbWUnLCAnaW5wdXQtcmF0ZS1jb25zdGFudCcsICdpbnB1dC1oYWxmLWxpZmUnXTsKICAgIHZhciB2aXNpYmxlTWFwID0gewogICAgICAnY29uY2VudHJhdGlvbic6ICAgICAgIFsnaW5wdXQtaW5pdGlhbC1jb25jJywgJ2lucHV0LXRpbWUnLCAnaW5wdXQtcmF0ZS1jb25zdGFudCddLAogICAgICAndGltZSc6ICAgICAgICAgICAgICAgIFsnaW5wdXQtaW5pdGlhbC1jb25jJywgJ2lucHV0LWN1cnJlbnQtY29uYycsICdpbnB1dC1yYXRlLWNvbnN0YW50J10sCiAgICAgICdyYXRlLWNvbnN0YW50JzogICAgICAgWydpbnB1dC1pbml0aWFsLWNvbmMnLCAnaW5wdXQtY3VycmVudC1jb25jJywgJ2lucHV0LXRpbWUnXSwKICAgICAgJ2luaXRpYWwtY29uY2VudHJhdGlvbic6IFsnaW5wdXQtY3VycmVudC1jb25jJywgJ2lucHV0LXRpbWUnLCAnaW5wdXQtcmF0ZS1jb25zdGFudCddLAogICAgICAnaGFsZi1saWZlJzogICAgICAgICAgIFsnaW5wdXQtaW5pdGlhbC1jb25jJywgJ2lucHV0LXJhdGUtY29uc3RhbnQnXQogICAgfTsKCiAgICB2YXIgdmlzaWJsZVNldCA9IHZpc2libGVNYXBbbW9kZV0gfHwgW107CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFsbEdyb3VwSWRzLmxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciBncm91cCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGFsbEdyb3VwSWRzW2ldKTsKICAgICAgaWYgKCFncm91cCkgY29udGludWU7CiAgICAgIGlmICh2aXNpYmxlU2V0LmluZGV4T2YoYWxsR3JvdXBJZHNbaV0pID49IDApIHsKICAgICAgICBncm91cC5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnOwogICAgICB9IGVsc2UgewogICAgICAgIGdyb3VwLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CiAgICAgIH0KICAgIH0KCiAgICAvLyDRgdCx0YDQvtGBINC+0YjQuNCx0L7QuiDQv9GA0Lgg0YHQvNC10L3QtSDRgNC10LbQuNC80LAKICAgIGNsZWFyQWxsRXJyb3JzKCk7CiAgICBjbGVhclJlc3VsdHMoKTsKICB9CgogIGZ1bmN0aW9uIGNsZWFyQWxsRXJyb3JzKCkgewogICAgZXJyb3JJbml0aWFsQ29uYy50ZXh0Q29udGVudCA9ICcnOwogICAgZXJyb3JDdXJyZW50Q29uYy50ZXh0Q29udGVudCA9ICcnOwogICAgZXJyb3JUaW1lLnRleHRDb250ZW50ID0gJyc7CiAgICBlcnJvclJhdGVDb25zdC50ZXh0Q29udGVudCA9ICcnOwogICAgZ2VuZXJhbEVycm9yLnRleHRDb250ZW50ID0gJyc7CiAgfQoKICBmdW5jdGlvbiBjbGVhclJlc3VsdHMoKSB7CiAgICB2YWxDb25jZW50cmF0aW9uLnRleHRDb250ZW50ID0gJ+KAlCc7CiAgICB2YWxUaW1lLnRleHRDb250ZW50ID0gJ+KAlCc7CiAgICB2YWxSYXRlQ29uc3QudGV4dENvbnRlbnQgPSAn4oCUJzsKICAgIHZhbEluaXRpYWxDb25jLnRleHRDb250ZW50ID0gJ+KAlCc7CiAgICB2YWxIYWxmTGlmZS50ZXh0Q29udGVudCA9ICfigJQnOwogICAgZm9ybXVsYURpc3BsYXkudGV4dENvbnRlbnQgPSAnMS9bQV0g4oCTIDEvW0Fd4oKAID0ga3QnOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXN1bHRJdGVtcy5sZW5ndGg7IGkrKykgewogICAgICByZXN1bHRJdGVtc1tpXS5yZW1vdmVBdHRyaWJ1dGUoJ2RhdGEtaGlnaGxpZ2h0Jyk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBnZXRGbG9hdFZhbHVlKGVsKSB7CiAgICB2YXIgdmFsID0gZWwudmFsdWUudHJpbSgpOwogICAgaWYgKHZhbCA9PT0gJycpIHJldHVybiBOYU47CiAgICB2YXIgbnVtID0gcGFyc2VGbG9hdCh2YWwpOwogICAgcmV0dXJuIG51bTsKICB9CgogIGZ1bmN0aW9uIHNob3dGaWVsZEVycm9yKGVsLCBtc2cpIHsKICAgIGVsLnRleHRDb250ZW50ID0gbXNnOwogIH0KCiAgZnVuY3Rpb24gdmFsaWRhdGVQb3NpdGl2ZShudW0sIGZpZWxkTmFtZSwgZXJyb3JFbCkgewogICAgaWYgKGlzTmFOKG51bSkpIHsKICAgICAgc2hvd0ZpZWxkRXJyb3IoZXJyb3JFbCwgJ9CS0LLQtdC00LjRgtC1INGH0LjRgdC70L4nKTsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgaWYgKG51bSA8PSAwKSB7CiAgICAgIHNob3dGaWVsZEVycm9yKGVycm9yRWwsICfQl9C90LDRh9C10L3QuNC1INC00L7Qu9C20L3QviDQsdGL0YLRjCDQv9C+0LvQvtC20LjRgtC10LvRjNC90YvQvCcpOwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIGZ1bmN0aW9uIGNhbGN1bGF0ZSgpIHsKICAgIGNsZWFyQWxsRXJyb3JzKCk7CiAgICBjbGVhclJlc3VsdHMoKTsKICAgIGdlbmVyYWxFcnJvci50ZXh0Q29udGVudCA9ICcnOwoKICAgIHZhciBtb2RlID0gZ2V0U2VsZWN0ZWRNb2RlKCk7CiAgICB2YXIgaW5pdENvbmMsIGN1cnJDb25jLCB0aW1lLCBrOwoKICAgIGlmIChtb2RlID09PSAnY29uY2VudHJhdGlvbicpIHsKICAgICAgaW5pdENvbmMgPSBnZXRGbG9hdFZhbHVlKGlucHV0SW5pdGlhbENvbmMpOwogICAgICB0aW1lID0gZ2V0RmxvYXRWYWx1ZShpbnB1dFRpbWUpOwogICAgICBrID0gZ2V0RmxvYXRWYWx1ZShpbnB1dFJhdGVDb25zdCk7CiAgICAgIGlmICghdmFsaWRhdGVQb3NpdGl2ZShpbml0Q29uYywgJ1tBXeKCgCcsIGVycm9ySW5pdGlhbENvbmMpKSByZXR1cm47CiAgICAgIGlmICghdmFsaWRhdGVQb3NpdGl2ZSh0aW1lLCAndCcsIGVycm9yVGltZSkpIHJldHVybjsKICAgICAgaWYgKCF2YWxpZGF0ZVBvc2l0aXZlKGssICdrJywgZXJyb3JSYXRlQ29uc3QpKSByZXR1cm47CgogICAgICB2YXIgZGVub21pbmF0b3IgPSAxICsgayAqIHRpbWUgKiBpbml0Q29uYzsKICAgICAgdmFyIGNvbmMgPSBpbml0Q29uYyAvIGRlbm9taW5hdG9yOwogICAgICBpZiAoIWlzRmluaXRlKGNvbmMpIHx8IGNvbmMgPCAwKSB7CiAgICAgICAgZ2VuZXJhbEVycm9yLnRleHRDb250ZW50ID0gJ9Ce0YjQuNCx0LrQsCDQstGL0YfQuNGB0LvQtdC90LjRjyDQutC+0L3RhtC10L3RgtGA0LDRhtC40LggKNC30L3QsNC80LXQvdCw0YLQtdC70Ywg0YDQsNCy0LXQvSDQvdGD0LvRjiDQuNC70Lgg0L7RgtGA0LjRhtCw0YLQtdC70LXQvSknOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICB2YXIgaGFsZkxpZmUgPSAxIC8gKGsgKiBpbml0Q29uYyk7CiAgICAgIHZhbENvbmNlbnRyYXRpb24udGV4dENvbnRlbnQgPSBjb25jLnRvRml4ZWQoNik7CiAgICAgIHZhbEhhbGZMaWZlLnRleHRDb250ZW50ID0gaGFsZkxpZmUudG9GaXhlZCgyKTsKICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Jlc3VsdC1jb25jZW50cmF0aW9uJykuc2V0QXR0cmlidXRlKCdkYXRhLWhpZ2hsaWdodCcsICd0cnVlJyk7CiAgICAgIGZvcm11bGFEaXNwbGF5LnRleHRDb250ZW50ID0gJ1tBXSA9IFtBXeKCgCAvICgxICsga3RbQV3igoApID0gJyArIGluaXRDb25jICsgJyAvICgxICsgJyArIGsgKyAnIMOXICcgKyB0aW1lICsgJyDDlyAnICsgaW5pdENvbmMgKyAnKSA9ICcgKyBjb25jLnRvRml4ZWQoNikgKyAnINC80L7Qu9GML9C7JzsKCiAgICB9IGVsc2UgaWYgKG1vZGUgPT09ICd0aW1lJykgewogICAgICBpbml0Q29uYyA9IGdldEZsb2F0VmFsdWUoaW5wdXRJbml0aWFsQ29uYyk7CiAgICAgIGN1cnJDb25jID0gZ2V0RmxvYXRWYWx1ZShpbnB1dEN1cnJlbnRDb25jKTsKICAgICAgayA9IGdldEZsb2F0VmFsdWUoaW5wdXRSYXRlQ29uc3QpOwogICAgICBpZiAoIXZhbGlkYXRlUG9zaXRpdmUoaW5pdENvbmMsICdbQV3igoAnLCBlcnJvckluaXRpYWxDb25jKSkgcmV0dXJuOwogICAgICBpZiAoIXZhbGlkYXRlUG9zaXRpdmUoY3VyckNvbmMsICdbQV0nLCBlcnJvckN1cnJlbnRDb25jKSkgcmV0dXJuOwogICAgICBpZiAoIXZhbGlkYXRlUG9zaXRpdmUoaywgJ2snLCBlcnJvclJhdGVDb25zdCkpIHJldHVybjsKICAgICAgaWYgKGN1cnJDb25jID49IGluaXRDb25jKSB7CiAgICAgICAgc2hvd0ZpZWxkRXJyb3IoZXJyb3JDdXJyZW50Q29uYywgJ9Ca0L7QvdC10YfQvdCw0Y8g0LrQvtC90YbQtdC90YLRgNCw0YbQuNGPINC00L7Qu9C20L3QsCDQsdGL0YLRjCDQvNC10L3RjNGI0LUg0L3QsNGH0LDQu9GM0L3QvtC5Jyk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CgogICAgICB2YXIgaW52RGlmZiA9ICgxIC8gY3VyckNvbmMpIC0gKDEgLyBpbml0Q29uYyk7CiAgICAgIGlmIChpbnZEaWZmIDw9IDApIHsKICAgICAgICBnZW5lcmFsRXJyb3IudGV4dENvbnRlbnQgPSAn0J3QtdC60L7RgNGA0LXQutGC0L3QvtC1INC30L3QsNGH0LXQvdC40LU6ICgxL1tBXSDigJMgMS9bQV3igoApINC00L7Qu9C20L3QviDQsdGL0YLRjCDQv9C+0LvQvtC20LjRgtC10LvRjNC90YvQvCc7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIHZhciB0Q2FsYyA9IGludkRpZmYgLyBrOwogICAgICBpZiAoIWlzRmluaXRlKHRDYWxjKSkgewogICAgICAgIGdlbmVyYWxFcnJvci50ZXh0Q29udGVudCA9ICfQntGI0LjQsdC60LAg0LLRi9GH0LjRgdC70LXQvdC40Y8g0LLRgNC10LzQtdC90LgnOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICB2YXIgaGFsZkxpZmUgPSAxIC8gKGsgKiBpbml0Q29uYyk7CiAgICAgIHZhbFRpbWUudGV4dENvbnRlbnQgPSB0Q2FsYy50b0ZpeGVkKDIpOwogICAgICB2YWxIYWxmTGlmZS50ZXh0Q29udGVudCA9IGhhbGZMaWZlLnRvRml4ZWQoMik7CiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZXN1bHQtdGltZScpLnNldEF0dHJpYnV0ZSgnZGF0YS1oaWdobGlnaHQnLCAndHJ1ZScpOwogICAgICBmb3JtdWxhRGlzcGxheS50ZXh0Q29udGVudCA9ICd0ID0gKDEvW0FdIOKAkyAxL1tBXeKCgCkgLyBrID0gKCcgKyAoMS9jdXJyQ29uYykudG9GaXhlZCg0KSArICcg4oCTICcgKyAoMS9pbml0Q29uYykudG9GaXhlZCg0KSArICcpIC8gJyArIGsgKyAnID0gJyArIHRDYWxjLnRvRml4ZWQoMikgKyAnINGBJzsKCiAgICB9IGVsc2UgaWYgKG1vZGUgPT09ICdyYXRlLWNvbnN0YW50JykgewogICAgICBpbml0Q29uYyA9IGdldEZsb2F0VmFsdWUoaW5wdXRJbml0aWFsQ29uYyk7CiAgICAgIGN1cnJDb25jID0gZ2V0RmxvYXRWYWx1ZShpbnB1dEN1cnJlbnRDb25jKTsKICAgICAgdGltZSA9IGdldEZsb2F0VmFsdWUoaW5wdXRUaW1lKTsKICAgICAgaWYgKCF2YWxpZGF0ZVBvc2l0aXZlKGluaXRDb25jLCAnW0Fd4oKAJywgZXJyb3JJbml0aWFsQ29uYykpIHJldHVybjsKICAgICAgaWYgKCF2YWxpZGF0ZVBvc2l0aXZlKGN1cnJDb25jLCAnW0FdJywgZXJyb3JDdXJyZW50Q29uYykpIHJldHVybjsKICAgICAgaWYgKCF2YWxpZGF0ZVBvc2l0aXZlKHRpbWUsICd0JywgZXJyb3JUaW1lKSkgcmV0dXJuOwogICAgICBpZiAoY3VyckNvbmMgPj0gaW5pdENvbmMpIHsKICAgICAgICBzaG93RmllbGRFcnJvcihlcnJvckN1cnJlbnRDb25jLCAn0JrQvtC90LXRh9C90LDRjyDQutC+0L3RhtC10L3RgtGA0LDRhtC40Y8g0LTQvtC70LbQvdCwINCx0YvRgtGMINC80LXQvdGM0YjQtSDQvdCw0YfQsNC70YzQvdC+0LknKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KCiAgICAgIHZhciBpbnZEaWZmSyA9ICgxIC8gY3VyckNvbmMpIC0gKDEgLyBpbml0Q29uYyk7CiAgICAgIGlmIChpbnZEaWZmSyA8PSAwKSB7CiAgICAgICAgZ2VuZXJhbEVycm9yLnRleHRDb250ZW50ID0gJ9Cd0LXQutC+0YDRgNC10LrRgtC90L7QtSDQt9C90LDRh9C10L3QuNC1OiAoMS9bQV0g4oCTIDEvW0Fd4oKAKSDQtNC+0LvQttC90L4g0LHRi9GC0Ywg0L/QvtC70L7QttC40YLQtdC70YzQvdGL0LwnOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICB2YXIga0NhbGMgPSBpbnZEaWZmSyAvIHRpbWU7CiAgICAgIGlmICghaXNGaW5pdGUoa0NhbGMpKSB7CiAgICAgICAgZ2VuZXJhbEVycm9yLnRleHRDb250ZW50ID0gJ9Ce0YjQuNCx0LrQsCDQstGL0YfQuNGB0LvQtdC90LjRjyDQutC+0L3RgdGC0LDQvdGC0Ysg0YHQutC+0YDQvtGB0YLQuCc7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIHZhciBoYWxmTGlmZSA9IDEgLyAoa0NhbGMgKiBpbml0Q29uYyk7CiAgICAgIHZhbFJhdGVDb25zdC50ZXh0Q29udGVudCA9IGtDYWxjLnRvRml4ZWQoNik7CiAgICAgIHZhbEhhbGZMaWZlLnRleHRDb250ZW50ID0gaGFsZkxpZmUudG9GaXhlZCgyKTsKICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Jlc3VsdC1yYXRlLWNvbnN0YW50Jykuc2V0QXR0cmlidXRlKCdkYXRhLWhpZ2hsaWdodCcsICd0cnVlJyk7CiAgICAgIGZvcm11bGFEaXNwbGF5LnRleHRDb250ZW50ID0gJ2sgPSAoMS9bQV0g4oCTIDEvW0Fd4oKAKSAvIHQgPSAoJyArICgxL2N1cnJDb25jKS50b0ZpeGVkKDQpICsgJyDigJMgJyArICgxL2luaXRDb25jKS50b0ZpeGVkKDQpICsgJykgLyAnICsgdGltZSArICcgPSAnICsga0NhbGMudG9GaXhlZCg2KSArICcg0LsvKNC80L7Qu9GMwrfRgSknOwoKICAgIH0gZWxzZSBpZiAobW9kZSA9PT0gJ2luaXRpYWwtY29uY2VudHJhdGlvbicpIHsKICAgICAgY3VyckNvbmMgPSBnZXRGbG9hdFZhbHVlKGlucHV0Q3VycmVudENvbmMpOwogICAgICB0aW1lID0gZ2V0RmxvYXRWYWx1ZShpbnB1dFRpbWUpOwogICAgICBrID0gZ2V0RmxvYXRWYWx1ZShpbnB1dFJhdGVDb25zdCk7CiAgICAgIGlmICghdmFsaWRhdGVQb3NpdGl2ZShjdXJyQ29uYywgJ1tBXScsIGVycm9yQ3VycmVudENvbmMpKSByZXR1cm47CiAgICAgIGlmICghdmFsaWRhdGVQb3NpdGl2ZSh0aW1lLCAndCcsIGVycm9yVGltZSkpIHJldHVybjsKICAgICAgaWYgKCF2YWxpZGF0ZVBvc2l0aXZlKGssICdrJywgZXJyb3JSYXRlQ29uc3QpKSByZXR1cm47CgogICAgICB2YXIgb25lT3ZlckN1cnIgPSAxIC8gY3VyckNvbmM7CiAgICAgIHZhciBkaWZmSW5pdCA9IG9uZU92ZXJDdXJyIC0gayAqIHRpbWU7CiAgICAgIGlmIChkaWZmSW5pdCA8PSAwKSB7CiAgICAgICAgZ2VuZXJhbEVycm9yLnRleHRDb250ZW50ID0gJ9Ce0YjQuNCx0LrQsDogKDEvW0FdIOKAkyBrdCkg0LTQvtC70LbQvdC+INCx0YvRgtGMINC/0L7Qu9C+0LbQuNGC0LXQu9GM0L3Ri9C8LiDQn9GA0L7QstC10YDRjNGC0LUg0LLQstC10LTRkdC90L3Ri9C1INC30L3QsNGH0LXQvdC40Y8uJzsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgdmFyIGluaXRDYWxjID0gMSAvIGRpZmZJbml0OwogICAgICBpZiAoIWlzRmluaXRlKGluaXRDYWxjKSB8fCBpbml0Q2FsYyA8PSAwKSB7CiAgICAgICAgZ2VuZXJhbEVycm9yLnRleHRDb250ZW50ID0gJ9Ce0YjQuNCx0LrQsCDQstGL0YfQuNGB0LvQtdC90LjRjyDQvdCw0YfQsNC70YzQvdC+0Lkg0LrQvtC90YbQtdC90YLRgNCw0YbQuNC4JzsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgaWYgKGluaXRDYWxjIDw9IGN1cnJDb25jKSB7CiAgICAgICAgZ2VuZXJhbEVycm9yLnRleHRDb250ZW50ID0gJ9CS0YvRh9C40YHQu9C10L3QvdCw0Y8g0L3QsNGH0LDQu9GM0L3QsNGPINC60L7QvdGG0LXQvdGC0YDQsNGG0LjRjyDQvNC10L3RjNGI0LUg0LjQu9C4INGA0LDQstC90LAg0LrQvtC90LXRh9C90L7QuS4g0J/RgNC+0LLQtdGA0YzRgtC1INC00LDQvdC90YvQtS4nOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICB2YXIgaGFsZkxpZmUgPSAxIC8gKGsgKiBpbml0Q2FsYyk7CiAgICAgIHZhbEluaXRpYWxDb25jLnRleHRDb250ZW50ID0gaW5pdENhbGMudG9GaXhlZCg2KTsKICAgICAgdmFsSGFsZkxpZmUudGV4dENvbnRlbnQgPSBoYWxmTGlmZS50b0ZpeGVkKDIpOwogICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmVzdWx0LWluaXRpYWwtY29uY2VudHJhdGlvbicpLnNldEF0dHJpYnV0ZSgnZGF0YS1oaWdobGlnaHQnLCAndHJ1ZScpOwogICAgICBmb3JtdWxhRGlzcGxheS50ZXh0Q29udGVudCA9ICdbQV3igoAgPSAxIC8gKDEvW0FdIOKAkyBrdCkgPSAxIC8gKCcgKyAoMS9jdXJyQ29uYykudG9GaXhlZCg0KSArICcg4oCTICcgKyBrICsgJyDDlyAnICsgdGltZSArICcpID0gJyArIGluaXRDYWxjLnRvRml4ZWQoNikgKyAnINC80L7Qu9GML9C7JzsKCiAgICB9IGVsc2UgaWYgKG1vZGUgPT09ICdoYWxmLWxpZmUnKSB7CiAgICAgIGluaXRDb25jID0gZ2V0RmxvYXRWYWx1ZShpbnB1dEluaXRpYWxDb25jKTsKICAgICAgayA9IGdldEZsb2F0VmFsdWUoaW5wdXRSYXRlQ29uc3QpOwogICAgICBpZiAoIXZhbGlkYXRlUG9zaXRpdmUoaW5pdENvbmMsICdbQV3igoAnLCBlcnJvckluaXRpYWxDb25jKSkgcmV0dXJuOwogICAgICBpZiAoIXZhbGlkYXRlUG9zaXRpdmUoaywgJ2snLCBlcnJvclJhdGVDb25zdCkpIHJldHVybjsKCiAgICAgIHZhciBobCA9IDEgLyAoayAqIGluaXRDb25jKTsKICAgICAgaWYgKCFpc0Zpbml0ZShobCkpIHsKICAgICAgICBnZW5lcmFsRXJyb3IudGV4dENvbnRlbnQgPSAn0J7RiNC40LHQutCwINCy0YvRh9C40YHQu9C10L3QuNGPINC/0LXRgNC40L7QtNCwINC/0L7Qu9GD0YDQsNGB0L/QsNC00LAnOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICB2YWxIYWxmTGlmZS50ZXh0Q29udGVudCA9IGhsLnRvRml4ZWQoMik7CiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZXN1bHQtaGFsZi1saWZlJykuc2V0QXR0cmlidXRlKCdkYXRhLWhpZ2hsaWdodCcsICd0cnVlJyk7CiAgICAgIGZvcm11bGFEaXNwbGF5LnRleHRDb250ZW50ID0gJ3TigoEv4oKCID0gMSAvIChrIMOXIFtBXeKCgCkgPSAxIC8gKCcgKyBrICsgJyDDlyAnICsgaW5pdENvbmMgKyAnKSA9ICcgKyBobC50b0ZpeGVkKDIpICsgJyDRgSc7CiAgICB9CiAgfQoKICBmdW5jdGlvbiByZXNldEZvcm0oKSB7CiAgICBpbnB1dEluaXRpYWxDb25jLnZhbHVlID0gJyc7CiAgICBpbnB1dEN1cnJlbnRDb25jLnZhbHVlID0gJyc7CiAgICBpbnB1dFRpbWUudmFsdWUgPSAnJzsKICAgIGlucHV0UmF0ZUNvbnN0LnZhbHVlID0gJyc7CiAgICBjbGVhckFsbEVycm9ycygpOwogICAgY2xlYXJSZXN1bHRzKCk7CiAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdpbnB1dFtuYW1lPSJjYWxjLW1vZGUiXVt2YWx1ZT0iY29uY2VudHJhdGlvbiJdJykuY2hlY2tlZCA9IHRydWU7CiAgICB1cGRhdGVGaWVsZFZpc2liaWxpdHkoKTsKICB9CgogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjYWxjdWxhdGUtYnRuJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBjYWxjdWxhdGUpOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZXNldC1idG4nKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHJlc2V0Rm9ybSk7CgogIGZvciAodmFyIGkgPSAwOyBpIDwgbW9kZVJhZGlvcy5sZW5ndGg7IGkrKykgewogICAgbW9kZVJhZGlvc1tpXS5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCB1cGRhdGVGaWVsZFZpc2liaWxpdHkpOwogIH0KCiAgdXBkYXRlRmllbGRWaXNpYmlsaXR5KCk7Cn0pKCk7Cg==