{"version":3,"file":"main.js","mappings":"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","sources":["webpack:///webpack/runtime/chunk loaded","webpack:///./src/blocks/footer/footer.js","webpack:///./src/blocks/header/header.js","webpack:///./src/blocks/menu-mob/menu-mob.js","webpack:///./src/blocks/slider-gallery/slider-gallery.js","webpack:///./src/blocks/slider-news/slider-news.js","webpack:///./src/blocks/slider-order/slider-order.js","webpack:///./src/blocks/slider-pane/slider-pane.js","webpack:///./src/blocks/slider-privilege/slider-privilege.js","webpack:///./src/blocks/slider-reviews/slider-reviews.js","webpack:///./src/blocks/slider-team/slider-team.js","webpack:///./src/blocks/slider-text/slider-text.js","webpack:///./src/blocks/form-block/form-block.js","webpack:///./src/utils/i18n.js","webpack:///./src/blocks/common/map.js","webpack:///./src/blocks/map/map.js","webpack:///./src/blocks/map-contacts/map-contacts.js","webpack:///./src/blocks/endless-pagination/endless-pagination.js","webpack:///./src/blocks/phone-validator/phone-validator.js","webpack:///./src/blocks/popup/popup.js","webpack:///./src/blocks/reviews/reviews.js","webpack:///./src/blocks/search-result/search-result.js","webpack:///./src/blocks/select/select.js","webpack:///./src/blocks/sentry/sentry.js","webpack:///./src/blocks/share/share.js","webpack:///./src/blocks/suggestions/suggestions.js","webpack:///./src/blocks/video-js/kk.js","webpack:///./src/blocks/video-js/video-js.js","webpack:///./src/blocks/stepper/stepper.js","webpack:///./src/vendor/nice-select2/js/nice-select2.js","webpack:///./src/blocks/nice-select/nice-select.js","webpack:///./src/utils/format.js","webpack:///./src/blocks/tariff-calc/tariff-calc-vats.js","webpack:///./src/blocks/cookie-consent/cookie-consent.js","webpack:///./src/utils/gtm.js","webpack:///./src/utils/i18n-fallback.js","webpack:///webpack/bootstrap","webpack:///webpack/runtime/amd options","webpack:///webpack/runtime/compat get default export","webpack:///webpack/runtime/define property getters","webpack:///webpack/runtime/global","webpack:///webpack/runtime/harmony module decorator","webpack:///webpack/runtime/hasOwnProperty shorthand","webpack:///webpack/runtime/make namespace object","webpack:///webpack/runtime/jsonp chunk loading","webpack:///webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar [chunkIds, fn, priority] = deferred[i];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","$('.footer__go-top').on('click', function () {\n  $('body, html').animate(\n    {\n      scrollTop: 0,\n    },\n    1000\n  );\n});\n","function fancyboxClose() {\n  $.fancybox.close(true);\n}\nwindow.fancyboxClose = fancyboxClose;\n\n$(document).ready(function () {\n  var header = $('.header--home,.header--white');\n  var h = 1;\n  if (header.length > 0) {\n    $(window).scroll(function () {\n      var scroll = $(window).scrollTop();\n      if ($(window).width() >= 768) {\n        if (scroll >= h) {\n          if (!header.hasClass('is-sticky')) {\n            header.addClass('is-sticky');\n          }\n        } else {\n          header.removeClass('is-sticky');\n        }\n      }\n    });\n  }\n});\n\n$('[data-src=\"#menu-mob\"]').fancybox({\n  afterLoad: function () {\n    $('body').addClass('body--menu');\n  },\n  afterClose: function () {\n    $('body').removeClass('body--menu');\n  },\n});\n","$(document).on('click', '.js-drop-mob', function () {\n  var btn = $(this);\n  if ($(window).width() >= 768) {\n    btn.toggleClass('is-active').next().slideToggle('is-active');\n  } else {\n    btn.toggleClass('is-active').next().fadeToggle('is-active');\n  }\n});\n\n$(document).on('click', '.js-drop-back', function () {\n  $($(this).parents('.menu-mob__drop')[0]).hide(0).prev().removeClass('is-active');\n});\n","$('.slider-gallery').slick({\n  infinite: false,\n  slidesToShow: 1,\n  slidesToScroll: 1,\n  dots: true,\n  customPaging: function (slider, i) {\n    return $('.slider-gallery__nav li:nth-child(' + (i + 1) + ')').html();\n  },\n  responsive: [\n    {\n      breakpoint: 576,\n      settings: {\n        dots: false,\n      },\n    },\n  ],\n});\n","$('.slider-news').slick({\n  infinite: false,\n  dots: false,\n  slidesToShow: 3,\n  slidesToScroll: 1,\n  rows: 0,\n  responsive: [\n    {\n      breakpoint: 992,\n      settings: {\n        slidesToShow: 2,\n        slidesToScroll: 1,\n      },\n    },\n    {\n      breakpoint: 576,\n      settings: {\n        slidesToShow: 1,\n        slidesToScroll: 1,\n      },\n    },\n  ],\n});\n","$('.slider-order__body').slick({\n  infinite: true,\n  dots: false,\n  arrows: true,\n  slidesToShow: 1,\n  slidesToScroll: 1,\n});\n","$(document).ready(function () {\n  $('.slider-pane').slick({\n    infinite: false,\n    dots: true,\n    arrows: false,\n    slidesToShow: 2,\n    slidesToScroll: 2,\n    rows: 0,\n    responsive: [\n      {\n        breakpoint: 576,\n        settings: {\n          slidesToShow: 1,\n          slidesToScroll: 1,\n        },\n      },\n    ],\n  });\n\n  var sliderHeight = $('.slider-pane .slick-track').height();\n  $('.slider-pane .slick-slide').css('height', sliderHeight + 'px');\n});\n","$('.slider-privilege').slick({\n  infinite: false,\n  dots: true,\n  slidesToShow: 4,\n  slidesToScroll: 4,\n  rows: 0,\n  responsive: [\n    {\n      breakpoint: 992,\n      settings: {\n        slidesToShow: 3,\n        slidesToScroll: 3,\n      },\n    },\n    {\n      breakpoint: 768,\n      settings: {\n        slidesToShow: 2,\n        slidesToScroll: 2,\n      },\n    },\n    {\n      breakpoint: 576,\n      settings: {\n        slidesToShow: 1,\n        slidesToScroll: 1,\n      },\n    },\n  ],\n});\n","$(document).ready(function () {\n  $('#slider-reviews').slick({\n    infinite: true,\n    dots: false,\n    slidesToShow: 2,\n    slidesToScroll: 1,\n    responsive: [\n      {\n        breakpoint: 768,\n        settings: {\n          slidesToShow: 1,\n        },\n      },\n    ],\n  });\n\n  $('#slider-reviews-center').slick({\n    infinite: true,\n    dots: false,\n    slidesToShow: 2,\n    slidesToScroll: 1,\n    responsive: [\n      {\n        breakpoint: 992,\n        settings: {\n          slidesToShow: 1,\n        },\n      },\n    ],\n  });\n});\n","$(document).ready(function () {\n  $('.slider-team').slick({\n    infinite: false,\n    dots: false,\n    arrows: true,\n    fade: true,\n    slidesToShow: 1,\n    slidesToScroll: 1,\n  });\n});\n","$(document).ready(function () {\n  $('.slider-text').slick({\n    infinite: true,\n    dots: false,\n    slidesToShow: 1,\n    slidesToScroll: 1,\n    adaptiveHeight: true,\n  });\n});\n","(function () {\n  'use strict';\n  window.addEventListener(\n    'load',\n    function () {\n      // Fetch all the forms we want to apply custom Bootstrap validation styles to\n      var forms = document.querySelectorAll('.form-block,.js-form-block');\n      // Loop over them and prevent submission\n      Array.prototype.filter.call(forms, function (form) {\n        form.addEventListener(\n          'submit',\n          function (event) {\n            if (form.checkValidity() === false) {\n              if (!$('.custom-file').hasClass('custom-file__has-file')) {\n                $('#file-input .custom-file-label__file-name').css({\n                  border: '1px solid #e15c39',\n                  padding: '2px',\n                  'border-radius': '2px',\n                });\n              }\n              event.preventDefault();\n              event.stopPropagation();\n            } else {\n              if ($(this)[0].vacancy) {\n                $(this)[0].text.value =\n                  'Вакансия: ' +\n                $(this)[0].vacancy.value +\n                '. Текст сообщения: ' +\n                $(this)[0].text.value;\n              }\n              var formData = new FormData($(this)[0]);\n              event.preventDefault();\n              $.ajax({\n                url: $(this).attr('action'),\n                type: $(this).attr('method'),\n                data: formData,\n                contentType: false,\n                processData: false,\n\n                // handle a successful response\n                success: function (data) {\n                  if (data['status'] === 'success') {\n                    var errorMsg = form.querySelector('.form-block__error-message');\n                    if (errorMsg) {\n                      errorMsg.classList.add('d-none');\n                    }\n                    // Получили ответ от сервера, что форма валидна и запрос прошел.\n                    // удалили признаки валидации\n                    form.classList.remove('was-validated');\n\n                    // очищаем признаки валидации на полях ввода\n                    var inputs = form.querySelectorAll('input');\n                    for (let i = 0; i < inputs.length; i++) {\n                      inputs[i].classList.remove('is-invalid');\n                      inputs[i].classList.remove('is-valid');\n                    }\n                    // сбрасываем поля формы\n                    form.reset();\n                    // Закрываем активный fancybox, если он есть\n                    $.fancybox.close();\n                    // выводим сообщение пользователю\n                    $.fancybox.open($('#success_send'), {\n                      touch: false,\n                    });\n                    // после того как ошибки были скрыты, заменим их\n                    var divs = form.querySelectorAll('.invalid-feedback');\n                    for (let i = 0; i < divs.length; i++) {\n                      var attr = divs[i].getAttribute('data-original-text');\n                      if (attr) {\n                        divs[i].innerHTML = attr;\n                      }\n                    }\n                    return;\n                  } else {\n                    // в форме имеются ошибки\n                    Object.keys(data['message']).forEach(function (key) {\n                      // получаем поле ввода\n                      var input = form.querySelector('[name=' + key + ']');\n                      // если ошибок с полем нету, отмечаем его валидным\n                      if (data['message'][key].errors.length === 0) {\n                        input.classList.remove('is-invalid');\n                        input.classList.add('is-valid');\n                      }\n                      // при наличии ошибок, выводим их в заготовленное поле\n                      if (data['message'][key].errors.length !== 0) {\n                        var div = form.querySelector('[data-id=\"' + input.id + '\"]');\n                        if (div) {\n                          // добавляем ошибки с переносом строки\n                          div.innerHTML = data['message'][key].errors.join('<br>');\n                          input.classList.add('is-invalid');\n                        }\n                      }\n                    });\n                  }\n                },\n                // handle a non-successful response\n                error: function (_xhr, _errmsg, _err) {\n                  // выводим сообщение пользователю\n                  var errorMsg = form.querySelector('.form-block__error-message');\n                  if (errorMsg) {\n                    errorMsg.innerHTML = gettext('Отправить запрос не удалось, попробуйте позже.');\n                    errorMsg.classList.remove('d-none');\n                  }\n                },\n              });\n            }\n            form.classList.add('was-validated');\n          },\n          false\n        );\n      });\n    },\n    false\n  );\n})();\n\n$(document).ready(function () {\n  $('.smooth').on('click', function (event) {\n    event.preventDefault();\n    var id = $(this).attr('href'),\n        elem = $(id);\n    if (!elem) return;\n    $('body,html').animate({scrollTop: $(id).offset().top - 80}, 1000);\n  });\n\n  $('.js-select').select2({\n    minimumResultsForSearch: Infinity,\n    dropdownParent: '.select',\n  });\n\n  if ($('.custom-file-input').length) {\n    $('.custom-file-input').on('change', function () {\n      var fileName = $(this).val().split('\\\\').pop();\n      $('.custom-file-label span.custom-file-label__file-name').text(fileName);\n      $('.custom-file').addClass('custom-file__has-file');\n      $('.custom-file-label span.custom-file-label__file-name').removeAttr('style');\n    });\n    $('.custom-file__delete').on('click', function () {\n      $('.custom-file-label span.custom-file-label__file-name').text(gettext('Прикрепить резюме'));\n      $('.custom-file').removeClass('custom-file__has-file');\n      $('.custom-file-input').val('');\n      $(this).hide();\n    });\n  }\n});\n\n$(window).on('load', function () {\n  if ($('.custom-file-input').length) {\n    var defaultText = $('.custom-file-input').val();\n    if (defaultText !== '') {\n      var fileName = $('.custom-file-input').val().split('\\\\').pop();\n      $('.custom-file-label span.custom-file-label__file-name').text(fileName);\n      $('.custom-file').addClass('custom-file__has-file');\n    }\n  }\n});\n","export function getCurrentLanguage() {\n    const html = document.querySelector(\"html\");\n    const lang = html.getAttribute(\"lang\");\n    return lang || \"ru\";\n}\n\nconst phoneFormats = {\n    ru: {mask: \"+7 (000) 000-00-00\", placeholder: \"+7 (123) 456-78-90\"},\n    kk: {mask: \"+7 (000) 000-00-00\", placeholder: \"+7 (123) 456-78-90\"},\n    uz: {mask: \"+998 (00) 000-00-00\", placeholder: \"+998 (12) 345-67-89\"},\n};\n\nexport function getPhoneInputFormat() {\n    const html = document.querySelector(\"html\");\n    const formatName = html.getAttribute(\"data-phone-input-format\");\n    return phoneFormats[formatName || \"ru\"];\n}\n","import {getCurrentLanguage} from '../../utils/i18n';\n\nlet yandexMapsApiPromise;\n\nfunction installYandexMapsApi() {\n  if (yandexMapsApiPromise) {\n    return yandexMapsApiPromise;\n  }\n\n  yandexMapsApiPromise = new Promise((resolve) => {\n    if ('ymaps' in window) {\n      resolve(true);\n      return;\n    }\n\n    const lang = getCurrentLanguage();\n    let scriptElement = document.createElement('script');\n    scriptElement.src = `https://api-maps.yandex.ru/2.1/?lang=${lang}`;\n    scriptElement.onload = () => {\n      resolve('ymaps' in window);\n    };\n    scriptElement.onerror = () => {\n      resolve(false);\n    };\n    document.body.append(scriptElement);\n  });\n\n  return yandexMapsApiPromise;\n}\n\nexport default class BaseMapBlock {\n  constructor(baseElement) {\n    this.baseElement = baseElement;\n    installYandexMapsApi().then((isAvailable) => {\n      if (!isAvailable) {\n        return;\n      }\n\n      window.ymaps.ready(() => {\n        this.initMap();\n      });\n    });\n  }\n\n  initMap() {}\n}\n","import BaseMapBlock from '../common/map';\nimport mapMarkerUrl from '../../images/map-marker.png';\n\nclass MapBlock extends BaseMapBlock {\n  initMap() {\n    let iconConfig = {\n      iconLayout: 'default#image',\n      iconImageHref: mapMarkerUrl,\n      iconImageSize: [60, 87],\n      iconImageOffset: [-30, -87],\n    };\n\n    let placemarkLat = Number(this.baseElement.getAttribute('data-lat'));\n    let placemarkLong = Number(this.baseElement.getAttribute('data-long'));\n\n    let map = new ymaps.Map(this.baseElement, {\n      center: [placemarkLat + 0.000085, placemarkLong - 0.003388],\n      controls: ['zoomControl'],\n      zoom: 17,\n    });\n    map.behaviors.disable('scrollZoom');\n    map.behaviors.disable('multiTouch');\n    if (\n      /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)\n    ) {\n      map.behaviors.disable('drag');\n    }\n    let adr1 = new ymaps.Placemark([placemarkLat, placemarkLong], {}, iconConfig);\n    map.geoObjects.add(adr1);\n  }\n}\n\n(function () {\n  let baseElement = document.querySelector('#map');\n  if (baseElement) {\n    new MapBlock(baseElement);\n  }\n})();\n","import BaseMapBlock from '../common/map';\n\nclass MapBlock extends BaseMapBlock {\n  initMap() {\n    let centerLat = Number(this.baseElement.getAttribute('data-center-lat'));\n    let centerLong = Number(this.baseElement.getAttribute('data-center-long'));\n    let zoomLevel = Number(this.baseElement.getAttribute('data-zoom-level'));\n    let officeLat = Number(this.baseElement.getAttribute('data-office-lat'));\n    let officeLong = Number(this.baseElement.getAttribute('data-office-long'));\n    let footLinePoints = JSON.parse(this.baseElement.getAttribute('data-foot-line-points'));\n    let busLinePoints = JSON.parse(this.baseElement.getAttribute('data-bus-line-points'));\n\n    let map = new ymaps.Map(this.baseElement, {\n      center: [centerLat, centerLong],\n      controls: ['zoomControl'],\n      zoom: zoomLevel,\n    });\n    map.behaviors.disable('scrollZoom');\n    map.behaviors.disable('multiTouch');\n    if (\n      /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)\n    ) {\n      map.behaviors.disable('drag');\n    }\n    let footLine = new ymaps.Polyline(\n      footLinePoints,\n      {},\n      {\n        strokeColor: '#cc3d00',\n        strokeWidth: 4,\n        strokeOpacity: 0.5,\n      }\n    );\n    let busLine = new ymaps.Polyline(\n      busLinePoints,\n      {},\n      {\n        strokeColor: '#00ff00',\n        strokeWidth: 4,\n        strokeOpacity: 0.5,\n      }\n    );\n    let adr = new ymaps.Placemark(\n      [officeLat, officeLong],\n      {\n        iconCaption: 'Синтоник',\n      },\n      {\n        preset: 'islands#yellowDotIconWithCaption',\n      }\n    );\n    map.geoObjects.add(adr).add(footLine).add(busLine);\n  }\n}\n\n(function () {\n  let baseElement = document.querySelector('#map-contacts');\n  if (baseElement) {\n    new MapBlock(baseElement);\n  }\n})();\n","(function ($) {\n  $.fn.endlessPaginate = function (options) {\n    var defaults = {\n        // Twitter-style pagination container selector.\n      containerSelector: '.endless_container',\n        // Twitter-style pagination link selector.\n      moreSelector: 'a.endless_more',\n        // Twitter-style pagination content wrapper selector.\n      contentSelector: null,\n        // Digg-style pagination page template selector.\n      pageSelector: '.endless_page_template',\n        // Digg-style pagination link selector.\n      pagesSelector: 'a.endless_page_link',\n        // Callback called when the user clicks to get another page.\n      onClick: function () {},\n        // Callback called when the new page is correctly displayed.\n      onCompleted: function () {},\n        // Set this to true to use the paginate-on-scroll feature.\n      paginateOnScroll: false,\n        // If paginate-on-scroll is on, this margin will be used.\n      paginateOnScrollMargin: 1,\n        // If paginate-on-scroll is on, it is possible to define chunks.\n      paginateOnScrollChunkSize: 0,\n    },\n        settings = $.extend(defaults, options);\n\n    var getContext = function (link) {\n      return {\n        key: (link.data('el-querystring-key') || 'page').split(' ')[0],\n        url: link.attr('href'),\n      };\n    };\n\n    function startLoading(link) {\n      if (!link.data('original-text')) {\n        link.data('original-text', link.innerText);\n      }\n\n      let currentWidth = link[0].getBoundingClientRect().width;\n      link.css('width', `${currentWidth}px`);\n      link.text('Загрузка...');\n      link.data('is-loading', true);\n    }\n\n    function stopLoading(link) {\n      let originalText = link.data('original-text') || 'Загрузить ещё';\n      link.css('width', '');\n      link.text(originalText);\n      link.data('is-loading', false);\n    }\n\n    function isLoading(link) {\n      return link.data('is-loading');\n    }\n\n    return this.each(function () {\n      var element = $(this),\n          loadedPages = 1;\n\n      // Twitter-style pagination.\n      element.on('click', settings.moreSelector, function () {\n        var link = $(this),\n            html_link = link.get(0),\n            content_wrapper = element.find(settings.contentSelector),\n            container = link.closest(settings.containerSelector);\n        // Avoid multiple Ajax calls.\n        if (isLoading(link)) {\n          return false;\n        }\n        startLoading(link);\n        var context = getContext(link);\n        // Fire onClick callback.\n        if (settings.onClick.apply(html_link, [context]) !== false) {\n          var data = 'querystring_key=' + context.key;\n          // Send the Ajax request.\n          $.get(context.url, data, function (fragment) {\n            // Increase the number of loaded pages.\n            loadedPages += 1;\n\n            if (!content_wrapper.length) {\n              // Replace pagination container (the default behavior)\n              container.before(fragment);\n              container.remove();\n            } else {\n              // Insert the content in the specified wrapper and increment link\n              content_wrapper.append(fragment);\n              var nextPage = 'page=' + (loadedPages + 1);\n              link.attr('href', link.attr('href').replace(/page=\\d+/, nextPage));\n              stopLoading(link);\n            }\n\n            // Fire onCompleted callback.\n            settings.onCompleted.apply(html_link, [context, $.trim(fragment)]);\n          }).fail(function (_xhr, _textStatus, _error) {\n            // Remove the container left if any\n            container.remove();\n          });\n        }\n        return false;\n      });\n\n      // On scroll pagination.\n      if (settings.paginateOnScroll) {\n        var win = $(window),\n            doc = $(document);\n        doc.on('scroll', function () {\n          if (doc.height() - win.height() - win.scrollTop() <= settings.paginateOnScrollMargin) {\n            // Do not paginate on scroll if chunks are used and\n            // the current chunk is complete.\n            var chunkSize = settings.paginateOnScrollChunkSize;\n            if (!chunkSize || loadedPages % chunkSize) {\n              element.find(settings.moreSelector).trigger('click');\n            } else {\n              element.find(settings.moreSelector).addClass('endless_chunk_complete');\n            }\n          }\n        });\n      }\n\n      // Digg-style pagination.\n      element.on('click', settings.pagesSelector, function () {\n        var link = $(this),\n            html_link = link.get(0),\n            context = getContext(link);\n        // Fire onClick callback.\n        if (settings.onClick.apply(html_link, [context]) !== false) {\n          var page_template = link.closest(settings.pageSelector),\n              data = 'querystring_key=' + context.key;\n          // Send the Ajax request.\n          page_template.load(context.url, data, function (fragment) {\n            // Fire onCompleted callback.\n            settings.onCompleted.apply(html_link, [context, $.trim(fragment)]);\n          });\n        }\n        return false;\n      });\n    });\n  };\n\n  $.endlessPaginate = function (options) {\n    return $('body').endlessPaginate(options);\n  };\n})($);\n\n$.endlessPaginate();\n","import {getPhoneInputFormat} from \"../../utils/i18n\";\n\n$(document).ready(function () {\n  const format = getPhoneInputFormat();\n  if (format) {\n    $('input[type=\"tel\"]').mask(format.mask, {\n      placeholder: format.placeholder,\n    });\n  }\n});\n","$(document).ready(function () {\n  var popup = $('#change-popup');\n\n  function getPopupTitle(popup) {\n    return popup.find('[data-anchor=\"title\"');\n  }\n\n  if (!popup) return;\n\n  var titles = {\n    service: gettext('Заказать услугу'),\n    solution: gettext('Заказать готовое решение'),\n  };\n\n  function changeTitle(popupType) {\n    var popupTitle = getPopupTitle(popup);\n    if (!popupTitle) return;\n    popupTitle.html(titles[popupType]);\n  }\n\n  $('.call-change-popup').on('click', function (e) {\n    var popupType = $(e.target).attr('data-popup-type');\n    changeTitle(popupType);\n    $.fancybox.open(popup, {\n      touch: false,\n    });\n  });\n});\n","$(document).ready(function () {\n  $('.filter-component').each(function (index, htmlElement) {\n    var baseElement = $(htmlElement);\n    if (!baseElement) {\n      return;\n    }\n\n    var submitButton = baseElement.find('.filter-submit-button');\n    if (submitButton) {\n      submitButton.on('click', function () {\n        var formArray = baseElement.serializeArray();\n        var normalizedInputData = {};\n        for (var i = 0; i < formArray.length; i++) {\n          var inputValue = formArray[i].name.split('-');\n          if (inputValue[0] in normalizedInputData) {\n            normalizedInputData[inputValue[0]] = normalizedInputData[inputValue[0]].concat([\n              inputValue[inputValue.length - 1],\n            ]);\n          } else {\n            normalizedInputData[inputValue[0]] = [inputValue[inputValue.length - 1]];\n          }\n        }\n        var url = new URL(window.location);\n        url.search = ''; // Стираем старые параметры URL\n        for (var key in normalizedInputData) {\n          url.searchParams.set(key, normalizedInputData[key].join('-'));\n        }\n        window.location.href = url;\n      });\n    }\n\n    var clearButton = baseElement.find('.filter-clear-button');\n    if (clearButton) {\n      clearButton.on('click', function () {\n        baseElement.find('input:checkbox').prop('checked', false);\n      });\n    }\n\n    var url = new URL(window.location);\n    url.searchParams.forEach(function (value, key) {\n      value.split('-').forEach(function (value) {\n        baseElement\n          .find('[name=\"' + key + '-' + value + '\"]')\n          .parents('.collapse')\n          .collapse('show');\n      });\n    });\n  });\n\n  function renderReview(data) {\n    var header = '<div class=\"reviews mb-30 mb-md-50\">' + '<div class=\"reviews__head\">';\n    if (data.icon) {\n      header += '<div class=\"reviews__icon\">' + '<img src=\"' + data.icon + '\" alt=\"\">' + '</div>';\n    }\n    return (\n      header +\n      '<div class=\"reviews__author\">' +\n      '<b>' +\n      data.fio +\n      '.</b> ' +\n      data.office_position +\n      '. ' +\n      data.title +\n      '</div>' +\n      '</div>' +\n      '<p>' +\n      data.text +\n      '</p>' +\n      '<a class=\"btn btn-link reviews__btn\" href=\"' +\n      data.url +\n      '\">Читать весь отзыв </a>' +\n      '</div>'\n    );\n  }\n\n  var _isLoading = false;\n  $('.load_more').on('click', function (e) {\n    if (_isLoading) return;\n    _isLoading = true;\n\n    var dataURL = $(e.target).attr('data-url');\n    if (!dataURL) {\n      return;\n    }\n\n    var newURL = new URL(window.location.origin + dataURL);\n    // Копируем параметры чтобы в пагинации учитывался фильтр\n    var searchParams = new URLSearchParams(window.location.search);\n    searchParams.set('offset', $('.reviews').length);\n    // TODO: Перейти на ES5\n    $.ajax({\n      url: newURL + '?' + searchParams.toString(),\n      method: 'get',\n      dataType: 'json',\n    })\n      .done(function (data) {\n        var has_more = data.has_more;\n        var reviews = data.reviews;\n        if (reviews.length === 0) return;\n        for (var i = 0; i < reviews.length; i++) {\n          $('.reviews__container').append(renderReview(reviews[i]));\n        }\n        if (!has_more) {\n          $(e.target).remove();\n        }\n      })\n      .fail(function (data) {\n        console.log(data);\n      })\n      .always(function () {\n        _isLoading = false;\n      });\n  });\n});\n","$(document).ready(function () {\n  function renderSearchResult(data) {\n    var start =\n      '<tr>' +\n    '         <td>' +\n    '             <span class=\"search-result__num\">' +\n    data.number +\n    '.</span>' +\n    '         </td>' +\n    '         <td>' +\n    '             <a class=\"search-result__link\" href=\"' +\n    data.url +\n    '\">' +\n    data.title +\n    '</a>';\n    if (data.parent_title && data.parent_url) {\n      start +=\n        '       <div class=\"text-muted\">Раздел: ' +\n      '                   <a href=\"' +\n      data.parent_url +\n      '\" class=\"text-muted\">' +\n      data.parent_title +\n      '</a>' +\n      '                </div>';\n    }\n    return start + '              </td>' + '            </tr>';\n  }\n\n  var _isLoading = false;\n  $('.load-more-search').on('click', function (e) {\n    e.preventDefault();\n\n    if (_isLoading) return;\n    _isLoading = true;\n\n    var dataURL = $(e.target).attr('data-url');\n    if (!dataURL) {\n      return;\n    }\n\n    var url = new URL(window.location.origin + dataURL);\n\n    var searchParams = new URLSearchParams(window.location.search);\n    searchParams.set('offset', $('.search-result__num').length);\n\n    $.ajax({\n      url: url + '?' + searchParams.toString(),\n      method: 'get',\n      dataType: 'json',\n    })\n      .done(function (data) {\n        var has_more = data.has_more;\n        var results = data.results;\n        if (results.length === 0) return;\n        for (var i = 0; i < results.length; i++) {\n          $('.search-result__table').append(renderSearchResult(results[i]));\n        }\n        if (!has_more) {\n          $(e.target).remove();\n        }\n      })\n      .fail(function (data) {\n        console.log(data);\n      })\n      .always(function () {\n        _isLoading = false;\n      });\n  });\n});\n","$(document).ready(function () {\n  $('.js-select-tab').change(function () {\n    $('[data-toggle=\"tab\"]')\n      .filter('[href=\"' + $(this).val() + '\"]')\n      .tab('show');\n  });\n});\n","import * as Sentry from '@sentry/browser';\n\n$(document).ready(function () {\n  if (window.sentry_dsn !== '') {\n    Sentry.init({dsn: window.sentry_dsn});\n  }\n  var testJSError = document.getElementById('test-js-error');\n  if (testJSError) {\n    testJSError.addEventListener('click', function (ev) {\n      ev.preventDefault();\n      throw new Error('Исключение JS вызванное вручную!');\n    });\n  }\n});\n","const SHARE_SERVICES = {\n  vkontakte: {\n    label: 'Вконтакте',\n    getUrl: (url, title) => `https://vk.com/share.php?url=${url}&title=${title}`,\n  },\n  facebook: {\n    label: 'Facebook',\n    getUrl: (url) => `https://www.facebook.com/sharer/sharer.php?u=${url}`,\n  },\n  odnoklassniki: {\n    label: 'Одноклассники',\n    getUrl: (url, title) => `https://connect.ok.ru/offer?url=${url}&title=${title}`,\n  },\n  twitter: {\n    label: 'Twitter',\n    getUrl: (url, title) => `https://twitter.com/intent/tweet?url=${url}&text=${title}`,\n  },\n  whatsapp: {\n    label: 'WhatsApp',\n    getUrl: (url, title) => `https://wa.me/?text=${title}%20${url}`,\n  },\n  viber: {\n    label: 'Viber',\n    getUrl: (url, title) => `viber://forward?text=${title}%20${url}`,\n  },\n  telegram: {\n    label: 'Telegram',\n    getUrl: (url, title) => `https://t.me/share/url?url=${url}&text=${title}`,\n  },\n};\n\nfunction createShareButton(serviceName, pageUrl, pageTitle) {\n  const service = SHARE_SERVICES[serviceName];\n  if (!service) {\n    return null;\n  }\n\n  const item = document.createElement('li');\n  item.className = `ya-share2__item ya-share2__item_service_${serviceName}`;\n\n  const link = document.createElement('a');\n  link.className = 'ya-share2__link';\n  link.href = service.getUrl(pageUrl, pageTitle);\n  link.target = '_blank';\n  link.rel = 'noopener noreferrer';\n  link.setAttribute('aria-label', service.label);\n\n  const badge = document.createElement('span');\n  badge.className = 'ya-share2__badge';\n\n  const icon = document.createElement('span');\n  icon.className = 'ya-share2__icon';\n\n  const title = document.createElement('span');\n  title.className = 'ya-share2__title';\n  title.textContent = service.label;\n\n  badge.appendChild(icon);\n  link.appendChild(badge);\n  link.appendChild(title);\n  item.appendChild(link);\n\n  return item;\n}\n\nfunction initShareBlock(baseElement) {\n  const services = (baseElement.dataset.services || '').split(',').filter(Boolean);\n  if (!services.length) {\n    return;\n  }\n\n  const container = document.createElement('div');\n  container.className = 'ya-share2__container';\n\n  const list = document.createElement('ul');\n  list.className = 'ya-share2__list';\n\n  const pageUrl = encodeURIComponent(window.location.href);\n  const pageTitle = encodeURIComponent(document.title);\n  services.forEach((serviceName) => {\n    const item = createShareButton(serviceName.trim(), pageUrl, pageTitle);\n    if (item) {\n      list.appendChild(item);\n    }\n  });\n\n  container.appendChild(list);\n  baseElement.appendChild(container);\n}\n\ndocument.querySelectorAll('.ya-share2').forEach(initShareBlock);\n","import Cookies from 'js-cookie';\n\nlet containerInputs = null;\n\nfunction initContainerInputs() {\n  if ('Map' in window) {\n    containerInputs = new Map();\n  }\n}\n\nfunction setContainerInput(container, input) {\n  if (containerInputs) {\n    containerInputs.set(container, input);\n  }\n}\n\nfunction updateAllContainerPositions() {\n  if (containerInputs) {\n    containerInputs.forEach((input, container) => {\n      updateContainerPosition(container, input);\n    });\n  }\n}\n\nfunction updateContainerPosition(container, input, options) {\n  const defaultOptions = {force: false};\n  options = Object.assign({}, defaultOptions, options);\n\n  if (container.style.display === 'none' && !options.force) return;\n\n  let inputRect = input.getBoundingClientRect();\n  container.style.left = `${window.scrollX + inputRect.left}px`;\n  container.style.top = `${window.scrollY + inputRect.top + inputRect.height}px`;\n  container.style.width = `${inputRect.width}px`;\n}\n\n$(document).ready(function () {\n  if (window.suggestEmailEnabled) {\n    initContainerInputs();\n\n    $('input[type=\"email\"]').suggestions({\n      url: window.suggestEmailUrl,\n      headers: {\n        'X-CSRFToken': Cookies.get('csrftoken'),\n      },\n      type: 'EMAIL',\n      hint: gettext(\"Выберите вариант или продолжите ввод\"),\n      floating: true,\n      beforeRender: function ($container) {\n        // suggestions-jquery не размещает выпадающий список под инпутом при floating: true,\n        // делаем это сами.\n        let input = this;\n        let container = $container[0];\n        updateContainerPosition(container, input, {force: true});\n        setContainerInput(container, input);\n      },\n    });\n\n    window.addEventListener('resize', () => {\n      updateAllContainerPositions();\n    });\n    window.addEventListener(\n      'scroll',\n      () => {\n        updateAllContainerPositions();\n      },\n      true\n    );\n  }\n});\n","import ru from 'video.js/dist/lang/ru.json';\n// На момент версии 8.3.0 в video.js не казахской локализации. Добавляем сами.\n// Переводим только тексты, которые выводятся в интерфейсе в нашем случае. Остальные подхватятся из ru.json как дефолты.\nconst kk = {\n    ...ru,\n    \"Play\": gettext(\"Воспроизвести\"),\n    \"Pause\": gettext(\"Приостановить\"),\n};\nexport default kk;\n","import videojs from 'video.js';\nimport ru from 'video.js/dist/lang/ru.json';\nimport kk from './kk';\n\nconst Component = videojs.getComponent(\"Component\");\nclass AudioTitle extends Component {\n    constructor(player, options = {}) {\n        super(player, options);\n        if (options.title) {\n            this.updateTitle(options.title);\n        }\n    }\n\n    createEl() {\n        return videojs.dom.createEl('div', {className: 'vjs-x-audio-title'});\n    }\n\n    updateTitle(title) {\n        videojs.emptyEl(this.el());\n        videojs.appendContent(this.el(), title);\n    }\n}\n\nfunction initPlain(element) {\n    const title = element.getAttribute(\"data-title\");\n    const video = videojs(element, {\n        audioOnlyMode: true,\n        controlBar: {\n            volumePanel: false,\n            audioTitle: {title},\n        },\n    });\n\n    video.ready(() => {\n        // Переставляем элементы, чтобы позволить нам сверстать плеер.\n        const progressBarContainer = document.createElement(\"div\");\n        progressBarContainer.classList.add(\"vjs-x-progress-bar-container\");\n\n        const curTime = video.el().querySelector(\".vjs-current-time\");\n        const progressBar = video.el().querySelector(\".vjs-progress-control\");\n        const dur = video.el().querySelector(\".vjs-duration\");\n        progressBarContainer.append(curTime, progressBar, dur);\n\n        const controlsContainer = document.createElement(\"div\");\n        controlsContainer.classList.add(\"vjs-x-controls-container\");\n\n        const audioTitle = video.el().querySelector(\".vjs-x-audio-title\");\n        controlsContainer.append(audioTitle, progressBarContainer);\n\n        video.el().querySelector(\".vjs-control-bar\").append(controlsContainer);\n\n        const errorMessage = document.createElement(\"div\");\n        errorMessage.classList.add(\"vjs-x-error-message\");\n        errorMessage.innerText = gettext(\"Аудиозапись недоступна\");\n        video.el().append(errorMessage);\n    });\n\n    video.on(\"play\", () => {\n        const players = videojs.getPlayers();\n        for (const playerId in players) {\n            if (!players.hasOwnProperty(playerId)) continue;\n            if (playerId === video.id()) continue;\n\n            const player = players[playerId];\n            player.pause();\n            player.currentTime(0);\n            player.hasStarted(false);\n        }\n    });\n}\n\nfunction initBlocks(selector, init) {\n    const elements = document.querySelectorAll(selector);\n    for (let i = 0; i < elements.length; i++) {\n        const element = elements[i];\n        init(element);\n    }\n}\n\nfunction initVideoJs() {\n    videojs.addLanguage('ru', ru);\n    videojs.addLanguage('kk', kk);\n    videojs.registerComponent(\"AudioTitle\", AudioTitle);\n    initBlocks(\".vjs-x-plain-player\", initPlain);\n}\n\ninitVideoJs();\n","class Stepper {\n  constructor(root) {\n    this.root = root;\n    this.input = this.root.querySelector(\".stepper__input\");\n    this.minValue = cleanInt(this.input.getAttribute(\"min\"));  // может быть undefined\n    this.maxValue = cleanInt(this.input.getAttribute(\"max\")); // может быть undefined\n    this.minusButton = this.root.querySelector(\".stepper__button--minus\");\n    this.plusButton = this.root.querySelector(\".stepper__button--plus\");\n\n    this.input.addEventListener(\"blur\", () => this.onBlur());\n    this.input.addEventListener(\"keydown\", e => this.onKeyDown(e));\n    this.input.addEventListener(\"change\", () => this.onChange());\n\n    this.minusButton.addEventListener(\"click\", () => this.decrement());\n    this.plusButton.addEventListener(\"click\", () => this.increment());\n\n    this.updateButtons();\n\n    this.root.addEventListener(\"x:attrchange\", () => {\n      this.reloadAttrs();\n    });\n  }\n\n  reloadAttrs() {\n    this.minValue = cleanInt(this.input.getAttribute(\"min\"));  // может быть undefined\n    this.maxValue = cleanInt(this.input.getAttribute(\"max\")); // может быть undefined\n    this.updateButtons();\n    this.setValueAndDispatch(this.cleanValue(this.input.value));\n  }\n\n  cleanValue(val) {\n    let int = cleanInt(val, 0);\n    int = this.clampInt(int);\n    return int;\n  }\n\n  clampInt(int) {\n    if (this.minValue !== undefined && int < this.minValue) {\n      int = this.minValue;\n    }\n    if (this.maxValue !== undefined && int > this.maxValue) {\n      int = this.maxValue;\n    }\n    return int;\n  }\n\n  onBlur() {\n    this.setValueAndDispatch(this.cleanValue(this.input.value));\n  }\n\n  onKeyDown(event) {\n    if (event.key === \"Enter\") {\n      this.input.blur();\n    }\n  }\n\n  onChange() {\n    this.updateButtons();\n  }\n\n  updateButtons() {\n    const val = this.cleanValue(this.input.value);\n\n    const isMin = (this.minValue !== undefined && val <= this.minValue);\n    this.minusButton.disabled = isMin;\n\n    const isMax = (this.maxValue !== undefined && val >= this.maxValue);\n    this.plusButton.disabled = isMax;\n  }\n\n  increment() {\n    const val = this.cleanValue(this.input.value);\n    this.setValueAndDispatch(this.clampInt(val + 1));\n  }\n\n  decrement() {\n    const val = this.cleanValue(this.input.value);\n    this.setValueAndDispatch(this.clampInt(val - 1));\n  }\n\n  setValueAndDispatch(val) {\n    const oldInputValue = this.input.value;\n    this.input.value = this.cleanValue(val);\n\n    if (this.input.value !== oldInputValue) {\n      this.input.dispatchEvent(new Event(\"input\", {bubbles: true}));\n      this.input.dispatchEvent(new Event(\"change\", {bubbles: true}));\n    }\n  }\n}\n\nfunction cleanInt(...vals) {\n  for (const val of vals) {\n    const int = parseInt(val);\n    if (!Number.isNaN(int)) {\n      return int;\n    }\n  }\n  return undefined;\n}\n\n(function () {\n  const elements = Array.prototype.slice.apply(document.querySelectorAll(\".stepper\"));\n  elements.forEach(e => {\n    new Stepper(e);\n  })\n})();\n","// import \"../scss/nice-select2.scss\";\n\n// utility functions\nfunction triggerClick(el) {\n  var event = document.createEvent(\"MouseEvents\");\n  event.initEvent(\"click\", true, false);\n  el.dispatchEvent(event);\n}\n\nfunction triggerChange(el) {\n  var event = document.createEvent(\"HTMLEvents\");\n  event.initEvent(\"change\", true, false);\n  el.dispatchEvent(event);\n}\n\nfunction triggerFocusIn(el) {\n  var event = document.createEvent(\"FocusEvent\");\n  event.initEvent(\"focusin\", true, false);\n  el.dispatchEvent(event);\n}\n\nfunction triggerFocusOut(el) {\n  var event = document.createEvent(\"FocusEvent\");\n  event.initEvent(\"focusout\", true, false);\n  el.dispatchEvent(event);\n}\n\nfunction triggerModalOpen(el) {\n  var event = document.createEvent(\"UIEvent\");\n  event.initEvent(\"modalopen\", true, false);\n  el.dispatchEvent(event);\n}\n\nfunction triggerModalClose(el) {\n  var event = document.createEvent(\"UIEvent\");\n  event.initEvent(\"modalclose\", true, false);\n  el.dispatchEvent(event);\n}\n\nfunction triggerValidationMessage(el, type) {\n  if(type == 'invalid'){\n    addClass(this.dropdown, 'invalid');\n    removeClass(this.dropdown, 'valid');\n  }else{\n    addClass(this.dropdown, 'valid');\n    removeClass(this.dropdown, 'invalid');\n  }\n}\n\nfunction attr(el, key) {\n  if(el[key] != undefined){\n    return el[key];\n  }\n  return el.getAttribute(key);\n}\n\nfunction data(el, key) {\n  return el.getAttribute(\"data-\" + key);\n}\n\nfunction hasClass(el, className) {\n  if (el){\n    return el.classList.contains(className);\n  }else{\n    return false;\n  }\n}\n\nfunction addClass(el, className) {\n  if (el) return el.classList.add(className);\n}\n\nfunction removeClass(el, className) {\n  if (el) return el.classList.remove(className);\n}\n\nvar defaultOptions = {\n  data: null,\n  searchable: false,\n  showSelectedItems: false\n};\n\nexport default function NiceSelect(element, options) {\n  this.el               = element;\n  this.config           = Object.assign({}, defaultOptions, options || {});\n  this.data             = this.config.data;\n  this.selectedOptions  = [];\n\n  this.placeholder      = attr(this.el, \"placeholder\") || this.config.placeholder || \"Select an option\";\n  this.searchtext       = attr(this.el, \"searchtext\") || this.config.searchtext || \"Search\";\n  this.selectedtext     = attr(this.el, \"selectedtext\") || this.config.selectedtext || \"selected\";\n\n  this.dropdown         = null;\n  this.multiple         = attr(this.el, \"multiple\");\n  this.disabled         = attr(this.el, \"disabled\");\n\n  this.create();\n}\n\nNiceSelect.prototype.create = function() {\n  this.el.style.opacity   = \"0\";\n  this.el.style.width     = \"0\";\n  this.el.style.padding   = \"0\";\n  this.el.style.height    = \"0\";\n  if (this.data) {\n    this.processData(this.data);\n  } else {\n    this.extractData();\n  }\n\n  this.renderDropdown();\n  this.bindEvent();\n};\n\nNiceSelect.prototype.processData = function(data) {\n  var options = [];\n  data.forEach(item=> {\n    options.push({\n      data: item,\n      attributes: {\n        selected: !!item.selected,\n        disabled: !!item.disabled,\n        optgroup: item.value == 'optgroup'\n      }\n    });\n  });\n  this.options = options;\n};\n\nNiceSelect.prototype.extractData = function() {\n  var options         = this.el.querySelectorAll(\"option,optgroup\");\n  var data            = [];\n  var allOptions      = [];\n  var selectedOptions = [];\n\n  options.forEach(item => {\n    if(item.tagName == 'OPTGROUP'){\n      var itemData = {\n        text: item.label,\n        value: 'optgroup'\n      };\n    }else{\n      var itemData = {\n        text: item.innerText,\n        value: item.value,\n        selected: item.getAttribute(\"selected\") != null || this.el.value == item.value,\n        disabled: item.getAttribute(\"disabled\") != null\n      };\n    }\n\n    var attributes = {\n      selected: item.selected,\n      disabled: item.disabled,\n      optgroup: item.tagName == 'OPTGROUP'\n    };\n\n    data.push(itemData);\n    allOptions.push({ data: itemData, attributes: attributes });\n  });\n\n  this.data     = data;\n  this.options  = allOptions;\n  this.options.forEach(item => {\n    if (item.attributes.selected){\n      selectedOptions.push(item);\n    }\n  });\n\n  this.selectedOptions = selectedOptions;\n};\n\nNiceSelect.prototype.renderDropdown = function() {\n  var classes = [\n    \"nice-select\",\n    attr(this.el, \"class\") || \"\",\n    this.disabled ? \"disabled\" : \"\",\n    this.multiple ? \"has-multiple\" : \"\"\n  ];\n\n  let searchHtml = `<div class=\"nice-select-search-box\">`;\n  searchHtml  += `<input type=\"text\" class=\"nice-select-search\" placeholder=\"${this.searchtext}...\" title=\"search\"/>`;\n  searchHtml  += `</div>`;\n\n  var html = `<div class=\"${classes.join(\" \")}\" tabindex=\"${this.disabled ? null : 0}\">`;\n  html += `<span class=\"${this.multiple ? \"multiple-options\" : \"current\"}\"></span>`;\n  html += `<div class=\"nice-select-dropdown\">`;\n  html += `${this.config.searchable ? searchHtml : \"\"}`;\n  html += `<ul class=\"list\"></ul>`;\n  html += `</div>`;\n  html += `</div>`;\n\n  this.el.insertAdjacentHTML(\"afterend\", html);\n\n  this.dropdown = this.el.nextElementSibling;\n  this._renderSelectedItems();\n  this._renderItems();\n};\n\nNiceSelect.prototype._renderSelectedItems = function() {\n  if (this.multiple) {\n    var selectedHtml = \"\";\n    if(this.config.showSelectedItems || this.config.showSelectedItems || window.getComputedStyle(this.dropdown).width == 'auto' || this.selectedOptions.length < 2){\n      this.selectedOptions.forEach(function(item) {\n        selectedHtml += `<span class=\"current\">${item.data.text}</span>`;\n      });\n\n      selectedHtml = selectedHtml == \"\" ? this.placeholder : selectedHtml;\n    }else{\n      selectedHtml = this.selectedOptions.length+' '+this.selectedtext;\n    }\n\n    this.dropdown.querySelector(\".multiple-options\").innerHTML = selectedHtml;\n  } else {\n    var html = this.selectedOptions.length > 0 ? this.selectedOptions[0].data.text : this.placeholder;\n\n    this.dropdown.querySelector(\".current\").innerHTML = html;\n  }\n};\n\nNiceSelect.prototype._renderItems = function() {\n  var ul = this.dropdown.querySelector(\"ul\");\n  this.options.forEach(item => {\n    ul.appendChild(this._renderItem(item));\n  });\n};\n\nNiceSelect.prototype._renderItem = function(option) {\n  var el        = document.createElement(\"li\");\n  el.innerHTML  = option.data.text;\n\n  if(option.attributes.optgroup){\n    addClass(el, 'optgroup');\n  }else{\n    el.setAttribute(\"data-value\", option.data.value);\n    var classList = [\n      \"option\",\n      option.attributes.selected ? \"selected\" : null,\n      option.attributes.disabled ? \"disabled\" : null,\n    ];\n\n    el.addEventListener(\"click\", this._onItemClicked.bind(this, option));\n    el.classList.add(...classList);\n  }\n\n  option.element = el;\n  return el;\n};\n\nNiceSelect.prototype.update = function() {\n  this.extractData();\n  if (this.dropdown) {\n    var open = hasClass(this.dropdown, \"open\");\n    this.dropdown.parentNode.removeChild(this.dropdown);\n    this.create();\n\n    if (open) {\n      triggerClick(this.dropdown);\n    }\n  }\n\n  if(attr(this.el, \"disabled\")) {\n    this.disable();\n  } else {\n    this.enable();\n  }\n};\n\nNiceSelect.prototype.disable = function() {\n  if (!this.disabled) {\n    this.disabled = true;\n    addClass(this.dropdown, \"disabled\");\n  }\n};\n\nNiceSelect.prototype.enable = function() {\n  if (this.disabled) {\n    this.disabled = false;\n    removeClass(this.dropdown, \"disabled\");\n  }\n};\n\nNiceSelect.prototype.clear = function() {\n  this.resetSelectValue();\n  this.selectedOptions = [];\n  this._renderSelectedItems();\n  this.update();\n\n  triggerChange(this.el);\n};\n\nNiceSelect.prototype.destroy = function() {\n  if (this.dropdown) {\n    this.dropdown.parentNode.removeChild(this.dropdown);\n    this.el.style.display = \"\";\n  }\n};\n\nNiceSelect.prototype.bindEvent = function() {\n  var $this = this;\n  this.dropdown.addEventListener(\"click\", this._onClicked.bind(this));\n  this.dropdown.addEventListener(\"keydown\", this._onKeyPressed.bind(this));\n  this.dropdown.addEventListener(\"focusin\", triggerFocusIn.bind(this, this.el));\n  this.dropdown.addEventListener(\"focusout\", triggerFocusOut.bind(this, this.el));\n  this.el.addEventListener(\"invalid\", triggerValidationMessage.bind(this, this.el, 'invalid'));\n  window.addEventListener(\"click\", this._onClickedOutside.bind(this));\n\n  if (this.config.searchable) {\n    this._bindSearchEvent();\n  }\n};\n\nNiceSelect.prototype._bindSearchEvent = function() {\n  var searchBox = this.dropdown.querySelector(\".nice-select-search\");\n  if (searchBox){\n    searchBox.addEventListener(\"click\", function(e) {\n      e.stopPropagation();\n      return false;\n    });\n  }\n\n  searchBox.addEventListener(\"input\", this._onSearchChanged.bind(this));\n};\n\nNiceSelect.prototype._onClicked = function(e) {\n  e.preventDefault();\n  if (!hasClass(this.dropdown, \"open\") ) {\n    addClass(this.dropdown, \"open\");\n    triggerModalOpen(this.el);\n  }else if(!this.multiple){\n    removeClass(this.dropdown, \"open\");\n    triggerModalClose(this.el);\n  }\n\n  if (hasClass(this.dropdown, \"open\")) {\n    var search = this.dropdown.querySelector(\".nice-select-search\");\n    if (search) {\n      search.value = \"\";\n      search.focus();\n    }\n\n    var t = this.dropdown.querySelector(\".focus\");\n    removeClass(t, \"focus\");\n    t = this.dropdown.querySelector(\".selected\");\n    addClass(t, \"focus\");\n    this.dropdown.querySelectorAll(\"ul li\").forEach(function(item) {\n      item.style.display = \"\";\n    });\n  } else {\n    this.dropdown.focus();\n  }\n};\n\nNiceSelect.prototype._onItemClicked = function(option, e) {\n  var optionEl = e.target;\n\n  if (!hasClass(optionEl, \"disabled\")) {\n    if (this.multiple) {\n      if (hasClass(optionEl, \"selected\")) {\n        removeClass(optionEl, \"selected\");\n        this.selectedOptions.splice(this.selectedOptions.indexOf(option), 1);\n        this.el.querySelector(`option[value=\"${optionEl.dataset.value}\"]`).removeAttribute('selected');\n      }else{\n        addClass(optionEl, \"selected\");\n        this.selectedOptions.push(option);\n      }\n    } else {\n      this.selectedOptions.forEach(function(item) {\n        removeClass(item.element, \"selected\");\n      });\n\n      addClass(optionEl, \"selected\");\n      this.selectedOptions = [option];\n    }\n\n    this._renderSelectedItems();\n    this.updateSelectValue();\n  }\n};\n\nNiceSelect.prototype.updateSelectValue = function() {\n  if (this.multiple) {\n    var select = this.el;\n    this.selectedOptions.forEach(function(item) {\n      var el = select.querySelector(`option[value=\"${item.data.value}\"]`);\n      if (el){\n        el.setAttribute(\"selected\", true);\n      }\n    });\n  } else if (this.selectedOptions.length > 0) {\n    this.el.value = this.selectedOptions[0].data.value;\n  }\n  triggerChange(this.el);\n};\n\nNiceSelect.prototype.resetSelectValue = function() {\n  if (this.multiple) {\n    var select = this.el;\n    this.selectedOptions.forEach(function(item) {\n      var el = select.querySelector(`option[value=\"${item.data.value}\"]`);\n      if (el){\n        el.removeAttribute(\"selected\");\n      }\n    });\n  } else if (this.selectedOptions.length > 0) {\n    this.el.selectedIndex = -1;\n  }\n\n  triggerChange(this.el);\n};\n\nNiceSelect.prototype._onClickedOutside = function(e) {\n  if (!this.dropdown.contains(e.target)) {\n    removeClass(this.dropdown, \"open\");\n    triggerModalClose(this.el);\n  }\n};\n\nNiceSelect.prototype._onKeyPressed = function(e) {\n  // Keyboard events\n\n  var focusedOption = this.dropdown.querySelector(\".focus\");\n\n  var open = hasClass(this.dropdown, \"open\");\n\n  // Enter\n  if (e.keyCode == 13) {\n    if (open) {\n      triggerClick(focusedOption);\n    } else {\n      triggerClick(this.dropdown);\n    }\n  } else if (e.keyCode == 40) {\n    // Down\n    if (!open) {\n      triggerClick(this.dropdown);\n    } else {\n      var next = this._findNext(focusedOption);\n      if (next) {\n        var t = this.dropdown.querySelector(\".focus\");\n        removeClass(t, \"focus\");\n        addClass(next, \"focus\");\n      }\n    }\n    e.preventDefault();\n  } else if (e.keyCode == 38) {\n    // Up\n    if (!open) {\n      triggerClick(this.dropdown);\n    } else {\n      var prev = this._findPrev(focusedOption);\n      if (prev) {\n        var t = this.dropdown.querySelector(\".focus\");\n        removeClass(t, \"focus\");\n        addClass(prev, \"focus\");\n      }\n    }\n    e.preventDefault();\n  } else if (e.keyCode == 27 && open) {\n    // Esc\n    triggerClick(this.dropdown);\n  } else if(e.keyCode === 32 && open) {\n    // Space\n    return false;\n  }\n  return false;\n};\n\nNiceSelect.prototype._findNext = function(el) {\n  if (el) {\n    el = el.nextElementSibling;\n  } else {\n    el = this.dropdown.querySelector(\".list .option\");\n  }\n\n  while (el) {\n    if (!hasClass(el, \"disabled\") && el.style.display != \"none\") {\n      return el;\n    }\n    el = el.nextElementSibling;\n  }\n\n  return null;\n};\n\nNiceSelect.prototype._findPrev = function(el) {\n  if (el) {\n    el = el.previousElementSibling;\n  } else {\n    el = this.dropdown.querySelector(\".list .option:last-child\");\n  }\n\n  while (el) {\n    if (!hasClass(el, \"disabled\") && el.style.display != \"none\") {\n      return el;\n    }\n    el = el.previousElementSibling;\n  }\n\n  return null;\n};\n\nNiceSelect.prototype._onSearchChanged = function(e) {\n  var open = hasClass(this.dropdown, \"open\");\n  var text = e.target.value;\n  text = text.toLowerCase();\n\n  if (text == \"\") {\n    this.options.forEach(function(item) {\n      item.element.style.display = \"\";\n    });\n  } else if (open) {\n    var matchReg = new RegExp(text);\n    this.options.forEach(function(item) {\n      var optionText = item.data.text.toLowerCase();\n      var matched = matchReg.test(optionText);\n      item.element.style.display = matched ? \"\" : \"none\";\n    });\n  }\n\n  this.dropdown.querySelectorAll(\".focus\").forEach(function(item) {\n    removeClass(item, \"focus\");\n  });\n\n  var firstEl = this._findNext(null);\n  addClass(firstEl, \"focus\");\n};\n\nexport function bind(el, options) {\n  return new NiceSelect(el, options);\n}\n","import NiceSelect from \"../../vendor/nice-select2/js/nice-select2\";\n\nconst initElements = new WeakSet();\n\nexport function createNiceSelect(baseElement) {\n  if (initElements.has(baseElement)) {\n    return;\n  }\n  new NiceSelect(baseElement);\n  initElements.add(baseElement);\n  baseElement.classList.add(\"nice-select-hidden\");\n}\n\n(function () {\n  let elements = document.querySelectorAll(\".nice-select-init\");\n  for (let i = 0; i < elements.length; i++) {\n    const element = elements[i];\n    createNiceSelect(element);\n  }\n})();\n","/**\n * \"123.00\" => \"123\"\n * \"123.10\" => \"123.1\"\n * \"123.11\" => \"123.11\"\n * \"10000\" => \"10 000\"\n * @param price\n * @returns {string}\n */\nexport function formatPrice(price) {\n  price = price.toString();\n  if (!price) {\n    return price;\n  }\n\n  const parts = price.split(\".\")\n  let int, frac;\n  if (parts.length >= 2) {\n    int = parts[0]\n    frac = parts[1]\n  } else {\n    int = parts[0]\n    frac = \"\"\n  }\n\n  // \"12345\" -> [\"345\", \"12\"]\n  const intSegs = [];\n  while (int.length > 0) {\n    intSegs.push(int.slice(-3));\n    int = int.slice(0, -3);\n  }\n  // [\"345\", \"12\"] -> \"12 345\"\n  int = intSegs.reverse().join(\" \");\n\n  if (frac.length > 2) {\n    frac = frac.slice(0, 2)\n  }\n\n  if (frac) {\n    return `${int}.${frac}`\n  } else {\n    return int;\n  }\n}\n","import {formatPrice} from \"../../utils/format\";\n\nclass TariffCalcVats {\n  constructor(root) {\n    this.root = root;\n\n    this.baseCost = Number(this.root.getAttribute(\"data-base-cost\"));\n    this.employeesMin = Number(this.root.getAttribute(\"data-employees-min\"));\n    this.employeeCost = Number(this.root.getAttribute(\"data-employee-cost\"));\n    this.fmcCost = Number(this.root.getAttribute(\"data-fmc-cost\"));\n    this.currencySymbol = this.root.getAttribute(\"data-currency-symbol\");\n\n    this.inputs = {\n      employeeCount: this.root.querySelector(\"[name=employee_count]\"),\n      recordStoragePeriod: this.root.querySelector(\"[name=record_storage_period]\"),\n      fmtCount: this.root.querySelector(\"[name=fmc_count]\"),\n    }\n\n    const storageOptions = Array.prototype.slice.apply(this.root.querySelectorAll(\"[name=record_storage_period] option\"));\n    this.storagePeriods = storageOptions.map(option => {\n      const id = option.value;\n      const name = option.innerText.trim();\n      const cost = Number(option.getAttribute(\"data-cost\"));\n      return {id, name, cost};\n    });\n\n    this.storagePeriodDescriptions = Array.prototype.slice.apply(this.root.querySelectorAll(\".tariff-calc__label-description[data-storage-period]\"));\n\n    const optInputs = Array.prototype.slice.apply(this.root.querySelectorAll(\"input[data-option-name]\"));\n    this.options = optInputs.map(input => {\n      const name = input.getAttribute(\"data-option-name\");\n      const cost = Number(input.getAttribute(\"data-option-cost\"));\n      const isPerEmployee = input.getAttribute(\"data-option-per-employee\") === \"1\";\n      const getTotal = () => {\n        if (isPerEmployee) {\n          return this.employeeCount * cost;\n        } else {\n          return cost;\n        }\n      };\n      return {name, cost, isPerEmployee, input, getTotal};\n    });\n\n    this.invoiceRoot = this.root.querySelector(\".tariff-calc__invoice\");\n    this.form = this.root.querySelector(\".tariff-calc__submission-form\");\n\n    this.update();\n    this.root.addEventListener(\"change\", () => { this.update(); });\n  }\n\n  get employeeCount() {\n    const cnt = Number(this.inputs.employeeCount.value);\n    if (Number.isNaN(cnt)) {\n      return this.employeesMin;\n    } else {\n      return cnt;\n    }\n  }\n\n  get extraEmployeeCount() {\n    const c = (this.employeeCount || 0) - (this.employeesMin || 0);\n    return Math.max(c, 0);\n  }\n\n  get extraEmployeeTotalCost() {\n    return this.extraEmployeeCount * this.employeeCost;\n  }\n\n  get fmcCount() {\n    const cnt = Number(this.inputs.fmtCount.value);\n    if (Number.isNaN(cnt)) {\n      return 0;\n    } else {\n      return cnt;\n    }\n  }\n\n  get fmcTotalCost() {\n    const c = this.fmcCount * this.fmcCost;\n    if (Number.isNaN(c)) {\n      return 0;\n    }\n    return c;\n  }\n\n  get selectedStoragePeriod() {\n    const id = this.inputs.recordStoragePeriod.value;\n    for (const period of this.storagePeriods) {\n      if (period.id === id) {\n        return period;\n      }\n    }\n    return undefined;\n  }\n\n  get selectedStoragePeriodTotalCost() {\n    if (this.selectedStoragePeriod && this.selectedStoragePeriod.cost) {\n      return this.selectedStoragePeriod.cost * this.employeeCount;\n    } else {\n      return 0;\n    }\n  }\n\n  update() {\n    this.updateInvoice();\n    this.setFormValues();\n    this.updateStoragePeriodDescription();\n    this.updateFmcMax();\n  }\n\n  getTotal() {\n    let total = unnan(this.baseCost);\n\n    if (this.extraEmployeeCount > 0) {\n      total += this.extraEmployeeTotalCost;\n    }\n\n    if (this.selectedStoragePeriod && this.selectedStoragePeriodTotalCost) {\n      total += this.selectedStoragePeriodTotalCost;\n    }\n\n    if (this.fmcCount > 0) {\n      total += this.fmcTotalCost;\n    }\n\n    this.options.forEach(option => {\n      if (option.input.checked) {\n        total += option.getTotal();\n      }\n    });\n\n    return total;\n  }\n\n  updateInvoice() {\n    const items = [\n      {\n        label: gettext(\"Базовый пакет услуг\"),\n        value: `${formatPrice(this.baseCost)}${this.currencySymbol}`,\n      },\n    ];\n\n    if (this.extraEmployeeCount > 0) {\n      items.push({\n        label: `${gettext(\"Дополнительные сотрудники\")} (${this.extraEmployeeCount})`,\n        value: `${formatPrice(this.extraEmployeeTotalCost)}${this.currencySymbol}`,\n      });\n    }\n\n    if (this.selectedStoragePeriod && this.selectedStoragePeriodTotalCost) {\n      items.push({\n        label: gettext(\"Хранение записей разговоров\"),\n        value: `${formatPrice(this.selectedStoragePeriodTotalCost)}${this.currencySymbol}`,\n      });\n    }\n\n    if (this.fmcCount > 0) {\n      items.push({\n        label: gettext(\"Сотовые FMC\"),\n        value: `${formatPrice(this.fmcTotalCost)}${this.currencySymbol}`,\n      });\n    }\n\n    this.options.forEach(option => {\n      if (!option.input.checked) {\n        return;\n      }\n\n      items.push({\n        label: option.name,\n        value: `${formatPrice(option.getTotal())}${this.currencySymbol}`,\n      });\n    });\n\n    items.push({\n      label: gettext(\"Итого\"),\n      value: `${formatPrice(this.getTotal())}${this.currencySymbol}/${gettext(\"мес.\")}`,\n      isTotal: true,\n    });\n\n    items.push({footnote: gettext(\"Все цены указаны без НДС\")});\n\n    this.renderInvoice(items);\n  }\n\n  setFormValues() {\n    const set = (name, value) => {\n      const input = this.form.querySelector(`[name=${name}]`);\n      if (input) {\n        input.value = value;\n      }\n    }\n\n    set(\"base_cost\", this.baseCost.toString());\n    set(\"employee_count\", this.employeeCount.toString());\n    set(\"extra_employees_cost\", this.extraEmployeeTotalCost.toString());\n\n    if (this.selectedStoragePeriod && this.selectedStoragePeriodTotalCost) {\n      set(\"record_storage_cost\", this.selectedStoragePeriodTotalCost.toString());\n      set(\"record_storage_period_text\", this.selectedStoragePeriod.name);\n    } else {\n      set(\"record_storage_cost\", \"\");\n      set(\"record_storage_period_text\", \"\");\n    }\n\n    set(\"fmc_count\", this.fmcCount.toString());\n    set(\"fmc_cost\", this.fmcTotalCost.toString());\n\n    const optionsJson = {options: []};\n    this.options.forEach(option => {\n      if (option.input.checked) {\n        optionsJson.options.push({\n          name: option.name,\n          cost: option.getTotal().toString(),\n        });\n      }\n    });\n    set(\"options_json\", JSON.stringify(optionsJson));\n\n    set(\"total\", this.getTotal().toString());\n  }\n\n  updateStoragePeriodDescription() {\n    const id = this.selectedStoragePeriod ? this.selectedStoragePeriod.id : \"0\";\n    this.storagePeriodDescriptions.forEach(desc => {\n      if (desc.getAttribute(\"data-storage-period\") === id) {\n        desc.style.display = \"\";\n      } else {\n        desc.style.display = \"none\";\n      }\n    });\n  }\n\n  updateFmcMax() {\n    this.inputs.fmtCount.setAttribute(\"max\", this.employeeCount);\n    this.inputs.fmtCount.dispatchEvent(new CustomEvent(\"x:attrchange\", {bubbles: true}));\n  }\n\n  renderInvoice(items) {\n    this.invoiceRoot.innerHTML = \"\";\n\n    for (const item of items) {\n      if (item.footnote) {\n        this.invoiceRoot.appendChild(this.renderFootnote(item));\n      } else {\n        this.invoiceRoot.appendChild(this.renderInvoiceItem(item));\n      }\n    }\n  }\n\n  renderInvoiceItem(item) {\n    const labelElem = document.createElement(\"div\");\n    labelElem.classList.add(\"invoice-list__item-label\");\n    labelElem.innerText = item.label;\n\n    const valueElem = document.createElement(\"div\");\n    valueElem.classList.add(\"invoice-list__item-value\");\n    valueElem.innerText = item.value;\n\n    const elem = document.createElement(\"li\");\n    elem.classList.add(\"invoice-list__item\");\n    if (item.isTotal) {\n      elem.classList.add(\"invoice-list__item--total\");\n    }\n    elem.appendChild(labelElem);\n    elem.appendChild(valueElem);\n    return elem;\n  }\n\n  renderFootnote(item) {\n    const elem = document.createElement(\"li\");\n    elem.classList.add(\"invoice-list__footnote\");\n    elem.innerText = item.footnote;\n    return elem;\n  }\n}\n\n// Практично только для рендеринга, чтобы избежать случайных каскадных \"NaN рублей\"\nfunction unnan(n) {\n  if (Number.isNaN(n)) {\n    return 0;\n  } else {\n    return n;\n  }\n}\n\n(function () {\n  let elements = document.querySelectorAll(\".tariff-calc-vats\");\n  for (let i = 0; i < elements.length; i++) {\n    const element = elements[i];\n    new TariffCalcVats(element);\n  }\n})();\n","import Cookies from 'js-cookie';\n\ndocument.addEventListener('DOMContentLoaded', function () {\n  const COOKIE_NAME = 'cookieConsent';\n  const cookieConsentElement = document.getElementById('cookie-consent');\n  const cookieBlockedElement = document.getElementById('cookie-blocked');\n\n  if (!cookieConsentElement) return;\n\n  // Проверяем, есть ли уже сохраненное согласие\n  const savedConsent = Cookies.get(COOKIE_NAME);\n\n  // Если согласие не сохранено, показываем баннер\n  if (!savedConsent) {\n    cookieConsentElement.classList.add('cookie-consent-is-visible');\n    // На элементе баннера изначально задан aria-hidden, чтобы screen reader не читал\n    // заголовок этого баннера первым во время загрузки страницы.\n    // По крайней мере, Orca начинает читать заголовок этого баннера, даже если он не будет в итоге показан.\n    cookieConsentElement.setAttribute('aria-hidden', 'false');\n  }\n\n  // Обработчик кнопки \"Принять\"\n  const acceptButton = document.getElementById('cookie-accept');\n  if (acceptButton) {\n    acceptButton.addEventListener('click', function () {\n      // Сохраняем согласие в cookies на 1 год (365 дней)\n      Cookies.set(COOKIE_NAME, 'accepted', { expires: 365, sameSite: 'Lax' });\n\n      // Скрываем баннер\n      cookieConsentElement.classList.remove('cookie-consent-is-visible');\n\n      // Удаляем баннер из DOM после анимации\n      setTimeout(function () {\n        cookieConsentElement.remove();\n      }, 1000);\n    });\n  }\n\n  // Обработчик кнопки \"Отклонить\"\n  const declineButton = document.getElementById('cookie-decline');\n  if (declineButton) {\n    declineButton.addEventListener('click', function () {\n      // Скрываем баннер согласия\n      cookieConsentElement.classList.remove('cookie-consent-is-visible');\n\n      // Показываем блокирующее окно\n      if (cookieBlockedElement) {\n        cookieBlockedElement.classList.add('cookie-blocked-is-visible');\n\n        // Перемещаем фокус в модальное окно для доступности\n        const modal = cookieBlockedElement.querySelector('.cookie-blocked__modal');\n        if (modal) {\n          modal.setAttribute('tabindex', '-1');\n          modal.focus();\n        }\n\n        // Блокируем прокрутку страницы\n        document.documentElement.style.overflow = 'hidden';\n        document.body.style.overflow = 'hidden';\n      }\n\n      // Удаляем баннер из DOM после анимации\n      setTimeout(function () {\n        cookieConsentElement.remove();\n      }, 1000);\n    });\n  }\n});\n","$(document).ajaxSuccess(function (event, request, settings) {\n  window.dataLayer = window.dataLayer || [];\n  dataLayer.push({\n    event: 'ajaxSuccess',\n    ajaxSuccessData: {\n      url: settings.url || '',\n      status: request.status || '',\n    },\n  });\n});\n","// Заглушка, на случай если django i18n не загрузился.\nif (!window.gettext) {\n    window.gettext = msg => msg;\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","__webpack_require__.amdO = {};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.hmd = (module) => {\n\tmodule = Object.create(module);\n\tif (!module.children) module.children = [];\n\tObject.defineProperty(module, 'exports', {\n\t\tenumerable: true,\n\t\tset: () => {\n\t\t\tthrow new Error('ES Modules may not assign module.exports or exports.*, Use ESM export syntax, instead: ' + module.id);\n\t\t}\n\t});\n\treturn module;\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t179: 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunk\"] = self[\"webpackChunk\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [216], () => (__webpack_require__(1242)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","$","on","animate","scrollTop","window","fancyboxClose","fancybox","close","document","ready","header","length","scroll","width","hasClass","addClass","removeClass","afterLoad","afterClose","btn","this","toggleClass","next","slideToggle","fadeToggle","parents","hide","prev","slick","infinite","slidesToShow","slidesToScroll","dots","customPaging","slider","i","html","responsive","breakpoint","settings","rows","arrows","sliderHeight","height","css","fade","adaptiveHeight","addEventListener","forms","querySelectorAll","Array","prototype","filter","call","form","event","checkValidity","border","padding","preventDefault","stopPropagation","vacancy","text","value","formData","FormData","ajax","url","attr","type","data","contentType","processData","success","Object","keys","forEach","key","input","querySelector","errors","classList","remove","add","div","id","innerHTML","join","errorMsg","inputs","reset","open","touch","divs","getAttribute","error","_xhr","_errmsg","_err","gettext","offset","top","select2","minimumResultsForSearch","Infinity","dropdownParent","fileName","val","split","pop","removeAttr","yandexMapsApiPromise","phoneFormats","ru","mask","placeholder","kk","uz","BaseMapBlock","baseElement","Promise","resolve","lang","scriptElement","createElement","src","onload","onerror","body","append","then","isAvailable","ymaps","initMap","MapBlock","iconConfig","iconLayout","iconImageHref","mapMarkerUrl","iconImageSize","iconImageOffset","placemarkLat","Number","placemarkLong","map","Map","center","controls","zoom","behaviors","disable","test","navigator","userAgent","adr1","Placemark","geoObjects","centerLat","centerLong","zoomLevel","officeLat","officeLong","footLinePoints","JSON","parse","busLinePoints","footLine","Polyline","strokeColor","strokeWidth","strokeOpacity","busLine","adr","iconCaption","preset","fn","endlessPaginate","options","extend","containerSelector","moreSelector","contentSelector","pageSelector","pagesSelector","onClick","onCompleted","paginateOnScroll","paginateOnScrollMargin","paginateOnScrollChunkSize","getContext","link","each","element","loadedPages","html_link","get","content_wrapper","find","container","closest","isLoading","innerText","currentWidth","getBoundingClientRect","startLoading","context","apply","fragment","nextPage","replace","originalText","stopLoading","before","trim","fail","_textStatus","_error","win","doc","chunkSize","trigger","page_template","load","formatName","format","popup","titles","service","solution","e","popupType","popupTitle","target","getPopupTitle","renderReview","icon","fio","office_position","title","index","htmlElement","submitButton","formArray","serializeArray","normalizedInputData","inputValue","name","concat","URL","location","search","searchParams","set","href","clearButton","prop","collapse","_isLoading","dataURL","newURL","origin","URLSearchParams","toString","method","dataType","done","has_more","reviews","console","log","always","renderSearchResult","start","number","parent_title","parent_url","results","change","tab","sentry_dsn","Sentry","dsn","testJSError","getElementById","ev","Error","SHARE_SERVICES","vkontakte","label","getUrl","facebook","odnoklassniki","twitter","whatsapp","viber","telegram","services","dataset","Boolean","className","list","pageUrl","encodeURIComponent","pageTitle","serviceName","item","rel","setAttribute","badge","textContent","appendChild","createShareButton","containerInputs","updateAllContainerPositions","updateContainerPosition","assign","force","style","display","inputRect","left","scrollX","scrollY","suggestEmailEnabled","suggestions","suggestEmailUrl","headers","Cookies","hint","floating","beforeRender","$container","setContainerInput","AudioTitle","player","updateTitle","videojs","el","selector","init","elements","initBlocks","video","audioOnlyMode","controlBar","volumePanel","audioTitle","progressBarContainer","curTime","progressBar","dur","controlsContainer","errorMessage","players","playerId","hasOwnProperty","pause","currentTime","hasStarted","Stepper","root","minValue","cleanInt","maxValue","minusButton","plusButton","onBlur","onKeyDown","onChange","decrement","increment","updateButtons","reloadAttrs","setValueAndDispatch","cleanValue","int","clampInt","undefined","blur","isMin","disabled","isMax","oldInputValue","dispatchEvent","Event","bubbles","vals","parseInt","isNaN","triggerClick","createEvent","initEvent","triggerChange","triggerFocusIn","triggerFocusOut","triggerModalClose","triggerValidationMessage","dropdown","contains","slice","defaultOptions","searchable","showSelectedItems","NiceSelect","config","selectedOptions","searchtext","selectedtext","multiple","create","opacity","extractData","renderDropdown","bindEvent","push","attributes","selected","optgroup","allOptions","tagName","itemData","classes","searchHtml","insertAdjacentHTML","nextElementSibling","_renderSelectedItems","_renderItems","selectedHtml","getComputedStyle","ul","_renderItem","option","_onItemClicked","bind","update","parentNode","removeChild","enable","clear","resetSelectValue","destroy","_onClicked","_onKeyPressed","_onClickedOutside","_bindSearchEvent","searchBox","_onSearchChanged","focus","t","optionEl","splice","indexOf","removeAttribute","updateSelectValue","select","selectedIndex","focusedOption","keyCode","_findNext","_findPrev","previousElementSibling","toLowerCase","matchReg","RegExp","optionText","matched","initElements","WeakSet","createNiceSelect","has","formatPrice","price","frac","parts","intSegs","reverse","TariffCalcVats","baseCost","employeesMin","employeeCost","fmcCost","currencySymbol","employeeCount","recordStoragePeriod","fmtCount","storageOptions","storagePeriods","cost","storagePeriodDescriptions","optInputs","isPerEmployee","getTotal","invoiceRoot","cnt","c","Math","max","extraEmployeeCount","fmcCount","period","selectedStoragePeriod","updateInvoice","setFormValues","updateStoragePeriodDescription","updateFmcMax","n","total","extraEmployeeTotalCost","selectedStoragePeriodTotalCost","fmcTotalCost","checked","items","isTotal","footnote","renderInvoice","optionsJson","stringify","desc","CustomEvent","renderFootnote","renderInvoiceItem","labelElem","valueElem","elem","COOKIE_NAME","cookieConsentElement","cookieBlockedElement","acceptButton","expires","sameSite","setTimeout","declineButton","modal","documentElement","overflow","ajaxSuccess","request","dataLayer","ajaxSuccessData","status","msg","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","exports","module","loaded","__webpack_modules__","m","amdO","O","result","chunkIds","priority","notFulfilled","fulfilled","j","every","r","getter","__esModule","d","a","definition","o","defineProperty","enumerable","g","globalThis","Function","hmd","children","obj","Symbol","toStringTag","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","self","__webpack_exports__"],"sourceRoot":""}