PDA

Просмотр полной версии : OwenCloud. Что это и с чем его едят?



Страницы : 1 [2] 3 4 5 6 7

Филоненко Владислав
08.12.2017, 16:24
Рады, что наши советы Вам помогли, но зачем же удалять пост?

dsyabitov
08.12.2017, 16:39
Я так думаю, что речь идет о возможности сгруппировать переменные по папкам, а не просто выводить единым списком. Мне тоже очень актуален данный функционал.

Данный функционал в активной разработке. Ожидаемое время релиза - конец этого года или начало следующего.

win2014
11.12.2017, 19:37
Здравствуйте. У меня две проблемы: нажимаю кнопку выход- не выходит и как сделать так, чтобы по мимо уставок отображались значения температуры. Подключен ТРМ32.

Сергей Лысов
12.12.2017, 10:07
Здравствуйте. У меня две проблемы: нажимаю кнопку выход- не выходит и как сделать так, чтобы по мимо уставок отображались значения температуры. Подключен ТРМ32.

1. Попробуйте в другом браузере или почистите куки в текущем.
2. О каких значениях температуры идёт речь?

Сергей Лысов
12.12.2017, 15:25
Обновил первое сообщение.
Теперь по "тучке" есть Руководство пользователя :o

win2014
13.12.2017, 12:36
Хотел спросить, сколько трафика съедает допустим ТРМ32. Хватит ли мне 300мегабайт в месяц.

e.filatov
13.12.2017, 12:50
Хотел спросить, сколько трафика съедает допустим ТРМ32. Хватит ли мне 300мегабайт в месяц.

Добрый день. В среднем тратится 45 байт на опрос одного параметра. Дальше все зависит от количества опрашиваемых переменных и частоты опроса.

Evdoc
18.12.2017, 10:23
Похожий алгоритм уже реализован. Для каждого параметра можно выбрать тип: оперативный, конфигурационный и управляемый. Для каждого типа можно выбрать свой интервал обновления. Максимум раз в 30 минут.
Настроить частоту опроса можно в вкладке Настройки | Общие | Общие настройки.
Присвоить тип параметру можно в вкладке Настройки | Параметры | Настройка параметров Modbus.

34438

Это все верно. Но предел 300 секунд. А секунды поменять на минуты нет возможности.

Сергей Лысов
18.12.2017, 12:29
34438

Это все верно. Но предел 300 секунд. А секунды поменять на минуты нет возможности.

Увы, пока ограничение такое. Позже будут вестись работы над увеличением.

Михаил Ч.
19.12.2017, 17:14
Добрый день!
Добавляю переменную типа int16, а в параметрах и на графиках она отображается как переменная беззнакового типа uint16 (т.е. число -1 отображается как 65535). Как можно сделать, чтобы корректно отображались отрицательные целые числа?

Сергей Лысов
20.12.2017, 11:29
Добрый день!
Добавляю переменную типа int16, а в параметрах и на графиках она отображается как переменная беззнакового типа uint16 (т.е. число -1 отображается как 65535). Как можно сделать, чтобы корректно отображались отрицательные целые числа?

Проверьте, что в типе переменной действительно стоит int16 и присмотритесь к параметру "порядок хранения"
34724

Михаил Ч.
20.12.2017, 12:38
Поставил галочку "младший байт спереди", стал показывать: 60927. По идее, это не должно влиять, т.к. если число больше 32767 должно отображаться как отрицательное.
34725
34726

e.filatov
20.12.2017, 22:18
Хотел спросить, сколько трафика съедает допустим ТРМ32. Хватит ли мне 300мегабайт в месяц.

Продублирую ответ на форуме

Суммарный трафик для 5 приборов (два ТРМ200, два ТРМ202 и один ТРМ210) при периоде опроса оперативных параметров 300с – примерно 600 МБ в месяц.

Сергей Лысов
21.12.2017, 10:21
Поставил галочку "младший байт спереди", стал показывать: 60927. По идее, это не должно влиять, т.к. если число больше 32767 должно отображаться как отрицательное.

Напишите, пожалуйста, идентификатор прибора. Какой прибор подключен? Если что-то из ОВЕНа, то что именно и номер регистра, если не трудно.

AAA1
22.12.2017, 00:12
Здравствуйте! Такой момент... На мой взгляд не корректное отображение параметров на графиках. На первом скрине 34747 примерно до 8 часов утра "чёткая стабильность", далее сильный провал - это ревизия котла и на это не стоит обращать внимание, а вот далее, что-то не так. Примерно с 11 часов котёл работал в номинале, а на графиках "свистопляска", как позже заметил, что если масштаб графика увеличить, то тогда параметры отображаются ровно как и должно быть 34748 Получается при определённых масштабах графики отображаются не корректно?

dsyabitov
22.12.2017, 07:07
Здравствуйте! Такой момент... На мой взгляд не корректное отображение параметров на графиках. На первом скрине 34747 примерно до 8 часов утра "чёткая стабильность", далее сильный провал - это ревизия котла и на это не стоит обращать внимание, а вот далее, что-то не так. Примерно с 11 часов котёл работал в номинале, а на графиках "свистопляска", как позже заметил, что если масштаб графика увеличить, то тогда параметры отображаются ровно как и должно быть 34748 Получается при определённых масштабах графики отображаются не корректно?

Здравствуйте.
Как Вы правильно заметили - на разных масштабах графики могут отображаться по разному. Связано это с тем, что для их отображения используется алгоритм прореживания данных, который для определенного разрешения экрана и размера графика выбирает экстремумы и промежуточные точки.
Т.е. предположим:
Собираем 1 параметр раз в 30 секунд. Выбран период 1 неделя. Ширина окна графика 1000 пикселей.
Получаем: За 1 неделю будет = 1 параметр * 2 (данных в минуту) * 60 (минут) * 24 (часа) * 7 (дней) == 20160 точек надо отобразить на графике при его ширине 1000 пикселей. Если отобразить все точки - получите сплошную заливку и тормозящий (а иногда и зависший) браузер.

График за определенный период отображает общий тренд данных и минимумы-максимумы. Если необходимо провести более детальный анализ - необходимо увеличивать масштаб (сокращать временной промежуток) - в этом случае алгоритм будет действовать не так агрессивно, вплоть до отображения всех точек при максимальном масштабе.

Сам алгоритм в дальнейшем может и будет дорабатываться, но его суть в общем останется такой-же. Ну или произойдет прорыв в вэб-технологиях и браузерах.

Чили-Рома
22.12.2017, 10:05
Добрый день, немного неудобно, что у прибора ТРМ201 (пока только он имеется в облаке) редактирование параметра "SH[0] Сдвиг характеристики для входа 1" доступно только в целочисленном виде. На приборе этот параметр можно записать до 1 десятой, а вот из облака, увы, только целое число.
1. Это можно как-то изменить самому?

Rannir
22.12.2017, 19:40
Добрый вечер. Когда планируется возможность смс оповещения? Спасибо.

Сергей Лысов
22.12.2017, 21:31
немного неудобно, что у прибора ТРМ201 (пока только он имеется в облаке) редактирование параметра "SH[0] Сдвиг характеристики для входа 1" доступно только в целочисленном виде. На приборе этот параметр можно записать до 1 десятой, а вот из облака, увы, только целое число.
1. Это можно как-то изменить самому?

Спасибо, что нашли ошибку. На следующей неделе подумаем как сможем это поправить. К сожалению, поменять настройки шаблона самостоятельно не получится.
Расскажите, вы удаленно корректируете показатели аналогового входа. Как вы проверяете адекватность показателей?

Сергей Лысов
22.12.2017, 21:34
Добрый вечер. Когда планируется возможность смс оповещения? Спасибо.
Добрый вечер :) Оповещения по смс будут готовы не раньше третьего квартала 2018 года. Пока мы прелагаем вам получать уведомления через push в приложении или бота в Telegram. Тем более это бесплатно :)

Rannir
22.12.2017, 22:14
Добрый вечер :) Оповещения по смс будут готовы не раньше третьего квартала 2018 года. Пока мы прелагаем вам получать уведомления через push в приложении или бота в Telegram. Тем более это бесплатно :)

Да, все виды информирования которые Вы предоставляете я попробовал. Очень хорошо (мне лично для событий нравится Telegram). Задал вопрос по причине того, что у меня есть установки, которые стоят у заказчиков. Я осуществляю их обслуживание и тех. поддержку. Заказчики только эксплуатируют установки по прямому назначению и возиться с настройками в приложении и кучей лишней информации им просто некогда и не нужно, а иногда и вредно. В облаке есть выбор отправки смс для каждого события, то есть я могу индивидуально для каждого объекта выбрать, какое событие посылать заказчику. В телеграмме, либо приложении на заказчика будет валиться куча инфы, которая предназначена для обслуживающего персонала (вплоть до того что прибор не на связи, зачем пугать заказчика). К тому же у всех разные телефоны и по разному работают с приложениями и не факт что информация дойдет. А смс 100% прилетит, а больше и не нужно. В итоге, я лично хотел бы иметь возможность более гибко делить события на 2 группы: обслуживающий персонал и заказчик (если можно как то настроить, что бы это в телеграмм выполнялось вообще отлично). Если предложите еще какие то варианты супер.

dsyabitov
22.12.2017, 22:36
Да, все виды информирования которые Вы предоставляете я попробовал. Очень хорошо (мне лично для событий нравится Telegram). Задал вопрос по причине того, что у меня есть установки, которые стоят у заказчиков. Я осуществляю их обслуживание и тех. поддержку. Заказчики только эксплуатируют установки по прямому назначению и возиться с настройками в приложении и кучей лишней информации им просто некогда и не нужно, а иногда и вредно. В облаке есть выбор отправки смс для каждого события, то есть я могу индивидуально для каждого объекта выбрать, какое событие посылать заказчику. В телеграмме, либо приложении на заказчика будет валиться куча инфы, которая предназначена для обслуживающего персонала (вплоть до того что прибор не на связи, зачем пугать заказчика). К тому же у всех разные телефоны и по разному работают с приложениями и не факт что информация дойдет. А смс 100% прилетит, а больше и не нужно. В итоге, я лично хотел бы иметь возможность более гибко делить события на 2 группы: обслуживающий персонал и заказчик (если можно как то настроить, что бы это в телеграмм выполнялось вообще отлично). Если предложите еще какие то варианты супер.

Спасибо за подробный ответ. Необходимость подобных настроек уже обсуждалась с аналитиками. Ваш "кейс" несомненно будет играть роль в дальнейшей проработке требований.

Rannir
22.12.2017, 22:48
Спасибо за подробный ответ. Необходимость подобных настроек уже обсуждалась с аналитиками. Ваш "кейс" несомненно будет играть роль в дальнейшей проработке требований.

Вам спасибо, что прислушиваетесь, и стараетесь реализовать.

Самойлов Сергей
23.12.2017, 10:00
Сегодня не могу попасть в owencloud.ru из браузера и из андроид-приложения

Бинкевич Игорь
23.12.2017, 10:33
Аналогичная ситуация не могу войти в сервис, сообщение:
Не удалось установить защищенное соединение с доменом owencloud.ru из-за неверных настроек системных часов и календаря (суббота, 23 декабря 2017 г., 10:31:31).

NET::ERR_CERT_DATE_INVALID

AAA1
23.12.2017, 11:03
Добрый вечер :) Оповещения по смс будут готовы не раньше третьего квартала 2018 года. Пока мы прелагаем вам получать уведомления через push в приложении или бота в Telegram. Тем более это бесплатно :)

Вот те раз!!! Учитывая предполагаемые и анонсированные Овеном другие моменты, читаем как "года через два". Не на ту лошадь поставил...

dsyabitov
23.12.2017, 12:02
Аналогичная ситуация не могу войти в сервис, сообщение:
Не удалось установить защищенное соединение с доменом owencloud.ru из-за неверных настроек системных часов и календаря (суббота, 23 декабря 2017 г., 10:31:31).

NET::ERR_CERT_DATE_INVALID

Здравствуйте.

Истек срок действия сертификата. Для продолжения работы необходимо согласиться на дальнейшее использование.
http://joxi.ru/KAxoj6viM9OQV2
http://joxi.ru/p279oDnFoJq68r


Второй вариант - использовать незащищенное соединение - http://web.owencloud.ru

Сертификат будет продлен в ближайшее время.

dsyabitov
23.12.2017, 18:27
Доступ к OwenCloud как через web, так и с мобильных устройств полностью восстановлен.
Потери данных не было.

AAA1
24.12.2017, 11:26
Доступ к OwenCloud как через web, так и с мобильных устройств полностью восстановлен.
Потери данных не было.

Последнее обновление устройства день назад пишет... Последние данные 22 числа в 23-40.

dsyabitov
24.12.2017, 12:13
Последнее обновление устройства день назад пишет... Последние данные 22 числа в 23-40.

Id устройства напишите в личку.

AAA1
24.12.2017, 13:42
Id устройства напишите в личку.

Мой косяк... Оказывается деньги кончились на симке. Только кинул, всё заработало. Было бы не плохо иметь возможность запроса баланса.

ASo
24.12.2017, 14:07
Интернет-кабинет отменили?
Ну и нельзя использовать в таких местах симки не на постоплате.

AAA1
24.12.2017, 14:17
Интернет-кабинет отменили?
Ну и нельзя использовать в таких местах симки не на постоплате.

Сразу не знал, что чтобы сделать кабинет надо именно с этой симки вход сделать, то бишь надо её в телефон, настроить, а уж далее в ПМ210...
На счёт таких мест. У меня на "данном месте" два варианта если, что. Вторым лет 7 пользуюсь на многих объектах, ПМ210 прикрутил для "попробовать" и сравнить. И кстати на втором есть возможность запроса баланса.

ASo
24.12.2017, 14:33
И кстати на втором есть возможность запроса баланса.Теоретически, это на многих SMS-охранках и т.п. есть. Реально - это анализ текстового ответа, который в общем случае не гарантируется.
Поэтому - просто аккуратней подходите.

spa
24.12.2017, 19:35
У меня странная ситуация с одним событием.
Есть битовая переменная QF и ее значение в текущих данных равно 1.
Если на ее основе делаю событие с условием NOT ('QF') или 'QF' = 0 или 'QF'<1 происходит постоянно срабатывания события. Хотя насколько я понимаю событие должно срабатывать при переходе из 0 в 1, и заканчиваться при переходе из 1 в 0.
34792

На скриншоте видно, что в текущих данных переменная равна 1, а в событиях почему-то 0.
В таблице значение данной переменной отображается корректно.

Чили-Рома
25.12.2017, 08:51
Спасибо, что нашли ошибку. На следующей неделе подумаем как сможем это поправить. К сожалению, поменять настройки шаблона самостоятельно не получится.
Расскажите, вы удаленно корректируете показатели аналогового входа. Как вы проверяете адекватность показателей?

Показания ТРМ проверяем по контрольному щупу вручную. Пробовал корректировать Сдвиг дистанционно и обнаружил эту ошибку, так что пока придется по-старинке делать все с панели прибора. Благо делать корректировку приходится не часто. Но все равно надеюсь, что вы этот баг исправите вскоре.

dsyabitov
25.12.2017, 12:11
Добрый день, немного неудобно, что у прибора ТРМ201 (пока только он имеется в облаке) редактирование параметра "SH[0] Сдвиг характеристики для входа 1" доступно только в целочисленном виде. На приборе этот параметр можно записать до 1 десятой, а вот из облака, увы, только целое число.
1. Это можно как-то изменить самому?

Здравствуйте. Внесли изменения, теперь можно записывать и дробные.

Pavel_
25.12.2017, 18:55
Доброго дня. Подскажите, одному пользователю, можно-ли назначить следующие права:
на один прибор = "управляющий приборами", а на второй прибор только как зритель ?
т.е. нужно что бы, пользователь видел оба прибора, но управлять(добавлять/редактировать параметры) мог только одним из них.
Спасибо.

Бинкевич Игорь
26.12.2017, 08:09
Сегодня с утра нет доступа к сервису.
Сообщение:
Proxy Error

The proxy server received an invalid response from an upstream server.
The proxy server could not handle the request GET /device/index/45048.

Reason: Error reading from remote server

Apache Server at web.owencloud.ru Port 443
Что это значит?

ventilyator
26.12.2017, 08:40
26.12.2017г. с 1:05:08 нет обмена "Облака" с прибором.
Настройки прибора в облаке работают.
В чём проблема?

приборист
26.12.2017, 09:27
проблема с 22.12.2017г. не могу зайти " Невозможно установить безопасное соединениеЗлоумышленники могут пытаться похитить ваши данные с сайта owencloud.ru(например, пароли, сообщения или номера банковских карт). Подробнее (data:text/html;charset=utf-8,%3C!doctype%20html%3E%0A%3Chtml%20dir=%22ltr%22% 20lang=%22ru%22%3E%0A%3Chead%3E%0A%20%20%3Cmeta%20 charset=%22utf-8%22%3E%0A%20%20%3Cmeta%20name=%22viewport%22%0A%2 0%20%20%20%20%20content=%22initial-scale=1,%20minimum-scale=1,%20width=device-width%22%3E%0A%20%20%3Ctitle%3E%D0%A3%D0%B3%D1%80% D0%BE%D0%B7%D0%B0%20%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF %D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D0%B8%3C/title%3E%0A%20%20%3Cstyle%3E/*%20Copyright%202017%20The%20Chromium%20Authors.%2 0All%20rights%20reserved.%0A%20*%20Use%20of%20this %20source%20code%20is%20governed%20by%20a%20BSD-style%20license%20that%20can%20be%0A%20*%20found%2 0in%20the%20LICENSE%20file.%20*/%0A%0Aa%20%7B%0A%20%20color%3A%20rgb(88,%2088,%208 8);%0A%7D%0A%0Abody%20%7B%0A%20%20background-color%3A%20rgb(247,%20247,%20247);%0A%20%20color%3 A%20rgb(100,%20100,%20100);%0A%7D%0A%0A%0A%0A.hidd en%20%7B%0A%20%20display%3A%20none;%0A%7D%0A%0Ahtm l%20%7B%0A%20%20-webkit-text-size-adjust%3A%20100%25;%0A%20%20font-size%3A%20125%25;%0A%7D%0A%0A.icon%20%7B%0A%20%20b ackground-repeat%3A%20no-repeat;%0A%20%20background-size%3A%20100%25;%0A%7D%3C/style%3E%0A%20%20%3Cstyle%3E/*%20Copyright%202014%20Yandex%20LLC.%20All%20right s%20reserved.%0A%20%20%20Author%3A%20Pavel%20Polit ov%20%3Cppolitov@yandex-team.ru%3E%20*/%0A%0Ahtml%20%7B%0A%20%20height%3A%20100%25;%0A%20 %20min-height%3A%20440px;%0A%0A%7D%0A%0Abody%20%7B%0A%20% 20font-size%3A%20.8em;%0A%20%20position%3A%20relative;%0A %20%20z-index%3A%200;%0A%20%20height%3A%20100%25;%0A%20%20 margin%3A%200;%0A%20%20color%3A%20%23000;%0A%20%20 background%3A%20%23ebebeb;%0A%7D%0A%0A.safe-browsing%20%7B%0A%20%20background%3A%20%235e1716;% 0A%7D%0A%0A%3Alink%3Ahover,%20%3Avisited%3Ahover%2 0%7B%0A%20%20color%3A%20%23f00%20!important;%0A%7D %0A%0Ah1%20%7B%0A%20%20font-size%3A%20100%25;%0A%20%20margin%3A%200;%0A%20%20f ont-weight%3A%20normal;%0A%7D%0A%0Ap%20%7B%0A%20%20mar gin%3A%200;%0A%7D%0A%0Ainput%5Btype=checkbox%5D%20 %7B%0A%20%20visibility%3A%20hidden;%0A%7D%0A%0A.in terstitial-wrapper%20%7B%0A%20%20display%3A%20flex;%0A%20%20f lex-direction%3A%20column;%0A%20%20min-height%3A%20100%25;%0A%20%20max-width%3A%20none;%0A%20%20margin%3A%200;%0A%20%20ju stify-content%3A%20center;%0A%7D%0A.interstitial-wrapper%3Abefore%20%7B%0A%20%20content%3A%20'';%0A %20%20transition%3A%20.6s;%0A%20%20flex-grow%3A%201;%0A%7D%0A@media%20(max-height%3A%20700px),%20(max-width%3A%20450px)%20%7B%0A%20%20.interstitial-wrapper%20%7B%0A%20%20%20%20justify-content%3A%20flex-start;%0A%20%20%7D%0A%7D%0A@media%20(max-width%3A%20500px)%20%7B%0A%20%20.interstitial-wrapper%3Abefore%20%7B%0A%20%20%20%20margin-top%3A%200;%0A%20%20%7D%0A%7D%0A%0A%23main-content%20%7B%0A%20%20position%3A%20relative;%0A%2 0%20z-index%3A%201;%0A%20%20box-sizing%3A%20border-box;%0A%20%20max-width%3A%20706px;%0A%20%20margin%3A%2032px%2012.5v w%200;%0A%20%20padding%3A%2032px%2032px%2032px%201 14px;%0A%20%20background%3A%20%23fff;%0A%20%20flex-shrink%3A%200;%0A%7D%0A@media%20(max-width%3A%20650px),%20(max-height%3A%20500px)%20and%20(orientation%3A%20portr ait)%20%7B%0A%20%20%23main-content%20%7B%0A%20%20%20%20margin%3A%200;%0A%20%2 0%7D%0A%7D%0A@media%20(max-width%3A%20450px)%20%7B%0A%20%20%23main-content%20%7B%0A%20%20%20%20padding%3A%2032px;%0A% 20%20%20%20overflow%3A%20hidden;%0A%20%20%7D%0A%7D %0A%23main-content.hidden%20%7B%0A%20%20display%3A%20block;%0 A%7D%0A%0A%23main-message%20%7B%0A%20%20max-width%3A%20560px;%0A%7D%0A%20%20%23main-message%20h1%20%7B%0A%20%20%20%20font-size%3A%2024px;%0A%20%20%20%20line-height%3A%20.8;%0A%20%20%20%20margin-bottom%3A%2025px;%0A%20%20%20%20letter-spacing%3A%20-.01em;%0A%20%20%7D%0A%20%20@media%20(max-width%3A%20800px)%20%7B%0A%20%20%20%20%23main-message%20h1%20%7B%0A%20%20%20%20%20%20line-height%3A%201;%0A%20%20%20%20%7D%0A%20%20%7D%0A%20 %20@media%20(max-width%3A%20450px)%20%7B%0A%20%20%20%20%23main-message%20h1%20%7B%0A%20%20%20%20%20%20line-height%3A%201.4;%0A%20%20%20%20%20%20margin-top%3A%2072px;%0A%20%20%20%20%20%20margin-bottom%3A%2015px;%0A%20%20%20%20%7D%0A%20%20%7D%0A %20%20%23main-message%20p%20%7B%0A%20%20%20%20font-size%3A%2014px;%0A%20%20%20%20line-height%3A%201.6;%0A%20%20%20%20margin-bottom%3A%2013px;%0A%20%20%7D%0A%20%20%23main-message%20%23debugging%20p%20%7B%0A%20%20%20%20mar gin-bottom%3A%200;%0A%20%20%7D%0A%20%20%23main-message%20a%20%7B%0A%20%20%20%20text-decoration%3A%20none;%0A%20%20%20%20color%3A%20%23 488ef0;%0A%20%20%7D%0A%0A.nav-wrapper%20%7B%0A%20%20display%3A%20flex;%0A%20%20m argin-top%3A%2040px;%0A%20%20white-space%3A%20pre-line;%0A%7D%0A@media%20(max-width%3A%20450px)%20%7B%0A%20%20.nav-wrapper%20%7B%0A%20%20%20%20flex-direction%3A%20column;%0A%20%20%20%20margin-top%3A%2024px;%0A%20%20%20%20white-space%3A%20normal;%0A%20%20%7D%0A%7D%0A%0A.nav-wrapper%3A%3Aafter%20%7B%0A%20%20display%3A%20none ;%0A%7D%0A%0A.button%20%7B%0A%20%20display%3A%20in line-block;%0A%20%20margin%3A%200;%0A%20%20padding%3A%2 00%2010px;%0A%20%20outline%3A%200;%0A%20%20min-width%3A%20150px;%0A%20%20height%3A%2032px;%0A%20% 20font-size%3A%2014px;%0A%20%20line-height%3A%2030px;%0A%20%20text-align%3A%20center;%0A%20%20white-space%3A%20nowrap;%0A%20%20-webkit-user-select%3A%20none;%0A%20%20user-select%3A%20none;%0A%20%20cursor%3A%20pointer;%0A% 20%20border%3A%200;%0A%20%20border-radius%3A%201px;%0A%20%20overflow%3A%20hidden;%0A% 20%20text-overflow%3A%20ellipsis;%0A%20%20text-decoration%3A%20none;%0A%20%20box-shadow%3A%20none;%0A%0A%7D%0A@media%20(max-width%3A%20450px)%20%7B%0A%20%20.button%20%7B%0A%2 0%20%20%20height%3A%2040px;%0A%20%20%7D%0A%7D%0A%0 A.button%3Ahover%20%7B%0A%20%20box-shadow%3A%20none;%0A%7D%0A%0Aa.button_theme_action ,%0Abutton.button_theme_action%20%7B%0A%20%20backg round%3A%20%23ffcc00;%0A%20%20color%3A%20%23000;%0 A%7D%0Aa.button_theme_action%3Ahover,%0Abutton.but ton_theme_action%3Ahover%20%7B%0A%20%20background% 3A%20%23ffc400;%0A%7D%0Aa.button_theme_action%3Afo cus,%0Abutton.button_theme_action%3Afocus,%0Aa.but ton_theme_action%3Aactive,%0Abutton.button_theme_a ction%3Aactive%20%7B%0A%20%20background%3A%20%23ff b800;%0A%7D%0A%0Aa.button_theme_normal,%0Abutton.b utton_theme_normal%20%7B%0A%20%20margin%3A%200%200 %200%2010px;%0A%20%20background%3A%20transparent;% 0A%20%20color%3A%20%23000;%0A%20%20border%3A%201px %20solid%20rgba(0,0,0,.2);%0A%0A%7D%0A@media%20(ma x-width%3A%20450px)%20%7B%0A%20%20a.button_theme_nor mal,%0A%20%20button.button_theme_normal%20%7B%0A%2 0%20%20%20margin%3A%2010px%200%200%200;%0A%20%20%7 D%0A%7D%0Aa.button_theme_normal%3Ahover,%0Abutton. button_theme_normal%3Ahover%20%7B%0A%20%20border-color%3A%20rgba(0,0,0,.3);%0A%7D%0Aa.button_theme_ normal%3Afocus,%0Abutton.button_theme_normal%3Afoc us,%0Aa.button_theme_normal%3Aactive%20,%0Abutton. button_theme_normal%3Aactive%20%7B%0A%20%20border-color%3A%20rgba(0,0,0,.35);%0A%7D%0A%0Aa.button_th eme_left,%0Abutton.button_theme_left%20%7B%0A%20%2 0margin%3A%200;%0A%7D%0A%0A.small-link%3Aafter%20%7B%0A%20%20position%3A%20relative; %0A%20%20top%3A%20-1px;%0A%20%20display%3A%20inline-block;%0A%20%20width%3A%200;%0A%20%20height%3A%200 ;%0A%20%20margin-left%3A%204px;%0A%20%20content%3A%20'';%0A%20%20bo rder-right%3A%203px%20solid%20transparent;%0A%20%20bord er-left%3A%203px%20solid%20transparent;%0A%7D%0A.smal l-link.button_arrow_down%3Aafter%20%7B%0A%20%20borde r-top%3A%206px%20solid%20black;%0A%7D%0A.small-link.button_arrow_up%3Aafter%20%7B%0A%20%20border-bottom%3A%206px%20solid%20black;%0A%7D%0A%0A%23det ails-button%3Abefore%20%7B%0A%20%20display%3A%20none;%0 A%7D%0A@media%20(max-width%3A%20450px)%20%7B%0A%20%20.button_theme_norm al%20%7B%0A%20%20%20%20margin-left%3A%200;%0A%20%20%20%20margin-top%3A%2012px;%0A%20%20%7D%0A%7D%0A%0A%23details%2 0%7B%0A%20%20position%3A%20relative;%0A%20%20font-size%3A%2012px;%0A%0A%20%20overflow%3A%20hidden;%0 A%0A%20%20box-sizing%3A%20border-box;%0A%20%20max-width%3A%20706px;%0A%20%20margin%3A%200%2012.5vw;% 0A%20%20padding%3A%2026px%2032px%2032px%20114px;%0 A%0A%20%20transition%3A%20margin-top%20.4s;%0A%0A%20%20color%3A%20rgba(0,0,0,.6);%0 A%20%20border-width%3A%200px%201px%201px%201px;%0A%20%20border-style%3A%20solid;%0A%20%20border-color%3A%20%23bcbcbc;%0A%0A%20%20will-change%3A%20transform;%0A%20%20flex-shrink%3A%200;%0A%7D%0A%23details.measuring%20%7B% 0A%20%20visibility%3A%20hidden;%0A%20%20position%3 A%20absolute;%0A%20%20top%3A%200;%0A%20%20left%3A% 200;%0A%20%20right%3A%200;%0A%7D%0A.safe-browsing%20%23details%20%7B%0A%20%20background%3A% 20%23bcbcbc;%0A%7D%0A@media%20(max-width%3A%20650px),%20(max-height%3A%20500px)%20and%20(orientation%3A%20portr ait)%20%7B%0A%20%20%23details%20%7B%0A%20%20%20%20 margin%3A%200;%0A%20%20%7D%0A%7D%0A@media%20(max-width%3A%20450px)%20%7B%0A%20%20%23details%20%7B%0 A%20%20%20%20padding%3A%2032px;%0A%20%20%7D%0A%7D% 0A%23details.hidden%20%7B%0A%20%20display%3A%20blo ck;%0A%7D%0A%20%20%23details%20p%3Afirst-of-type%20%7B%0A%20%20%20%20line-height%3A%201.5;%0A%20%20%20%20max-width%3A%20410px;%0A%20%20%20%20padding-bottom%3A%2015px;%0A%20%20%7D%0A%20%20%23details%2 0.button%20%7B%0A%20%20%20%20font-size%3A%2012px;%0A%20%20%20%20box-sizing%3A%20border-box;%0A%20%20%20%20margin%3A%200%2020px%200%200;%0 A%20%20%20%20padding%3A%200%2020px;%0A%20%20%7D%0A %20%20%23details%20.button%3Aafter%20%7B%0A%20%20% 20%20content%3A%20none;%0A%20%20%7D%0A%20%20@media %20(max-width%3A%20450px)%20%7B%0A%20%20%20%20%23details%2 0.button%20%7B%0A%20%20%20%20%20%20line-height%3A%2040px;%0A%20%20%20%20%20%20display%3A%2 0block;%0A%20%20%20%20%20%20overflow%3A%20hidden;% 0A%20%20%20%20%20%20margin%3A%200;%0A%20%20%20%20% 20%20text-overflow%3A%20ellipsis;%0A%20%20%20%20%7D%0A%20%20 %7D%0A%20%20%23details%20.warn-text%20%7B%0A%20%20%20%20line-height%3A%2032px;%0A%20%20%20%20display%3A%20inlin e-block;%0A%20%20%20%20vertical-align%3A%20top;%0A%20%20%7D%0A%20%20@media%20(max-width%3A%20450px)%20%7B%0A%20%20%20%20%23details%2 0.warn-text%20%7B%0A%20%20%20%20%20%20width%3A%20100%25;% 0A%20%20%20%20%20%20text-align%3A%20center;%0A%20%20%20%20%7D%0A%20%20%7D%0 A%0A%23final-paragraph%20%7B%0A%20%20margin-top%3A%2020px;%0A%7D%0A%20%20%23final-paragraph%20a%20%7B%0A%20%20%20%20color%3A%20%23d0 0;%0A%20%20%20%20text-decoration%3A%20none;%0A%20%20%7D%0A%20%20%23final-paragraph%20a%3Ahover%20%7B%0A%20%20%20%20color%3A %20%23d00%20!important;%0A%20%20%7D%0A%20%20%23fin al-paragraph%20.small-link%20%7B%0A%20%20%20%20font-size%3A%2012px;%0A%20%20%20%20margin%3A%200%2010px %200%200;%0A%20%20%20%20padding%3A%200%2020px;%0A% 20%20%20%20color%3A%20rgba(0,0,0,.6)%20!important; %0A%20%20%7D%0A%0A%23error-code%20%7B%0A%20%20font-size%3A%2012px;%0A%20%20margin-top%3A%2025px;%0A%20%20color%3A%20rgba(0,0,0,.6);% 0A%20%20-webkit-font-smoothing%3A%20antialiased;%0A%7D%0A%0A%23error-debugging-info%20%7B%0A%20%20margin-top%3A%2010px;%0A%20%20word-wrap%3A%20break-word;%0A%7D%0A%0A%23debugging%20textarea.debugging-value%20%7B%0A%20%20font-family%3A%20monospace;%0A%0A%20%20width%3A%20100%2 5;%0A%20%20height%3A%2016em;%0A%7D%0A%0A.icon%20%7 B%0A%20%20position%3A%20absolute;%0A%20%20top%3A%2 032px;%0A%20%20width%3A%2050px;%0A%20%20height%3A% 2050px;%0A%20%20margin-left%3A%20-82px;%0A%20%20background-image%3A%20url('data%3Aimage/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAAB HPGVmAAAAAXNSR0IArs4c6QAAATJQTFRFAAAA/wAA/wAA/wAA3wAA4wAA1QAA2AAA2wAA3QAA3wAA0gAA2QAA3AAA1QAA2QA A2wAA0wAA1gAA1wAA2AAA0wAA1wAA1AAA1gAA0gAA0wAA1QAA0 wAA1AAA1QAA0wAA1AAA1QAA0gAA0wAA1AAA0wAA1AAA0gAA0wA A1AAA1AAA0gAA0wAA0wAA0gAA0wAA0gAA0wAA1AAA0gAA0wAA0 gAA0gAA0wAA0gAA0wAA0wAA1AAA0wAA0gAA0wAA0wAA0gAA0wA A0gAA0wAA0gAA0wAA0wAA0wAA0wAA0gAA0gAA0gAA0wAA0wAA0 wAA0gAA0wAA0gAA0gAA0gAA0wAA0gAA0wAA0gAA0wAA0wAA0wA A0gAA0gAA0gAA0gAA0wAA0wAA0gAA0gAA0wAA0wAA0gAAdN7F4 QAAAGV0Uk5TAAECBAgJDA0ODxARFBYYGxwdHyYnKS0vMjk6PEB BQ0VNTlVWWV1eYWhqa2xub3J0eHl8fYCIiYuOkJKTlpqdnp+ip aiqrrK1ur3BwsPExcjQ093f4eXo6evs7e7v9Pb3+fr8/f6tNQL2AAACZUlEQVRo3r3a2VYTQRAG4EEExQUjKCqCuOCCCi4 Z3AFR0eAWBRUDRDDkf/9X8CKdOXMk6aW2ukxXne/M9FSnLjrLNCPPM/XIgdzAUFdyQF1xhqpSGIpKyVBDGMbI7IvaRmN/7+f39afXxzSMylztL8rx7cEZYaOycoBDcfD2nKBxYvEPekbr9W kp49o2+sbWVRnjURu+eDXIN46+QSDeD7GNr6WyndVbU+PDQ2cv 3l7eLP386RjzXZWeY2269GIGrrxrFSsfjvD2oyj6Mvn/2oWPxeIz1nfV3fPWfK/luaI9bzD6o/vt7s70Tri85RJ+nST3+WLXON8vY2LHpSyTzxLX562Z/jmX9g5/00ln4ooruu9LmucZFXcmfvZmDaxzjOyuq5r0p020GUZWcz0Yyl tjGCOuCaZDic8Z/+ez7rwa1JwZXnbqVlXnErclN1Vnn41O5ZTqfNXolI6rznD7ndp h1TnRFevOokFEYt4NISIzdQCRmdv9CN8YrdYbiI6yUTkVayw0A Zoxtrl9J85YAt0A8CTqOXgGcC9iP5pMA7vHg0iVawAPg0idbaA We/gyDPyI7UGGgbYc0tfwntxpiMcQQ3yGFOI1hBC/IYMEDBEkZEggQUMACRt8JMJgIzEGF4kymEicwUMiDRYSa3CQaI OBxBt0JMEgIykGFUkyiEiaQUMSDRKSalCQZIOApBvpCMFIRihG KkIyEhGakYYQjSCSCxiwMGBhwMKAhQELAxYGLIzfBgbqBgYeGx jNUX0DCwbGksG7Un+ORr2ath+SYWGYXGKxuY5jc7HI5oqUzWUv 9Wtr/wADwyUvnn16KQAAAABJRU5ErkJggg==')%20!important;%0A %20%20background-repeat%3A%20no-repeat;%0A%20%20background-size%3A%20contain;%0A%7D%0A@media%20(max-width%3A%20450px)%20%7B%0A%20%20.icon%20%7B%0A%20% 20%20%20margin-left%3A%200px;%0A%20%20%7D%0A%7D%0A.icon_type_prot ect%20%7B%0A%20%20background-image%3A%20url('data%3Aimage/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABYCAMAAAA 0hKKwAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAABvUExURQAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAG3qvUYAAAAldFJOUwAUOD sxFwFNSAQCSRI2NQwiQEweKQodFUFFRAMjLxElNA1HGRj6HCxI AAABmElEQVRo3u2YybaDIBBE4wg4Rk00GqcM//+N2Qn6VGjwuHina5vCq3Q1BC4XQ/l92zkNzXPaOF3b+5fDFXzHkMwUjt/gUMRzoGRFdHgehvCLmmyoLg6aNe9BdvTwjviMG5HoZvwxLCZSx cyMcc+IgrK7EeNNlPQ2oLCMKCrTnjF/WQ/qllbKWGqV7rJvYt3qL3KVWEKHB1ayyJhmf8we4kTL3yNnZtDqF 3/Wg9c1y3XWlToTVojFqNY9lbhoFhprorBe0deW6yVQavhqOQjvW G3bKsE2gPcPKqnHSl0odH/5CLnadwoZ+wAhIx8a7Tsj7hyB+eUFTWRe3pUhLMU9fz1L5rW4t wdBWkA1hYy0IEg3jXPlZncydyAIj0wpN5eqQVyoUS+JWJQGBOH TnMrNKS8gCJJP4xS2PDaZcxCEp/J4N0IQghCEAN2eTYmGqK3+R5e5RFuu6gHEgKG0Df89CoClNmO2 GcQGbqlaosBY6gkhCEEIQhCCEIQgBCEIQQhCEPJ/IaccTE85Yp9yWXDKtcc5FzgnXEX9AE+ndYOQc9X0AAAAAElFTk SuQmCC')%20!important;%0A%7D%0A%0A.icon_type_vpn%2 0%7B%0A%20%20background-image%3A%20url('data%3Aimage/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAAB 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 5CYII=')%20!important;%0A%7D%0A%0A.icon_type_tlsgo st%20%7B%0A%20%20background-image%3A%20url('data%3Aimage/png;base64,iVBORw0KGgoAAAANSUhEUgAAADgAAAA4CAYAAAC ohjseAAAABGdBTUEAALGPC/xhBQAABIFJREFUaAXtmttLVFEUhx3nYlJKPUQQYUURXeghgtL+ gKikogiL6CWsIErwhtFTSgTele6hUQ9BIEUURGA9FaR0IYKsoK J79BB5ma6Oo33Lzo49QzWzmz0HiXNgu/Zae+11+519jnqWLyONV1VV1bTBwcG1uCj0+XyzRkZGpoo75u+Y P2N6ORQKXayvr38j8nRcvnQYJbGpQ0NDNcPDw1ux70/gI5qZmXkqEAjsI9F3CXSNl60nWF5evgZ0zjByTKIB1TBjS3Nz8 yWTfYl0E1U30f6Y9dLS0hIEp0luXMxCckwWahvz8/N7u7u7byW3JbGWNQQd5C6QXKbuFlR6GO2MzpycnFeyFg6H89Bb ztjGWBCnP4zuOltIWklQzlwkEnlMsPptGSHQ8oKCgmNFRUVRPQ k17+jo8Hd1de1kXzOyoJKzLxwMBufaOJMx1VYOTKk8UOKT48Gx sqWl5fCfkhMfsiY6ogsbUX7FlthUfCo0ZQSdV8ELgvh1nkGgRA I3CaysrGw3iR3S9kR5hcxI9RWSMoLOe05PrkduSy3QpKayh8L0 aMp+x7YmMp+mnCAuC3W3BNn+t9tS19Xnskf26jLmMbbj1pJiU0 6QoGbpnuA7dd5kHr833raJLaWbcoKcm9Ffv5RB9SpQvAmN3xtv 28SW0k05QQxNUMaEVldXf9J5k/lv9sbYNrGldG0kqGyNSeolOCZhMQjKQ9CgWGNS1UNwTMJiEJTx L9v8UTtiYN+6amtrq1HM3i1qHQKXDXoIulxw6+48BK2X1GWDHo IuF9y6Ow9B6yV12aCHoMsFt+7OQ9B6SV026CHocsGtu/MQtF5Slw16CLpccOvuPAStl9Rlg/89gi7X03PnVcC0Akb/BucTc2BgYKBYd8J39CF6Yk4qGTq5/f39K+DnMt7S63K1rq7ulVrXKe1fi+DzsTEZ+pSGoM6mpqYPjny JrqvmNCacFx3FJ6KBRAr6OoEHCea4LsPhV/jRBCsrK5f29fV1wOcpHXpdPldUVGwnqLNKRhFC2DpKu2VMseDX oyP9boWM/UpfpxRBGvWSTvCfnqIk9RJk5sugp0xQyKBTKTsajUoSeay3+f1 +QeAAgQaQt5PkdNGTiyLsRV6M3lNGKboLCHwr9ImsZ2VlHcHub HpIlwnP9UB4Gbm5uXqz0M/Vv/w0QlDZIbhBWqweKd6hq5HPJOD73LI7HNltvkYtZC49pJugdU4D 3h74DJIqBtnrju5Dh2bU1tb2Mu9l7xeRYfN7Q0ODdAgbX/+E4O+8EPA8R34lbv2a8Nx+c4TSCyqtzdkE/bqxsfGGyNJ5WUsQNL5JoAQf0xiEaIrIWf8oVF3oTaqpqclWfLq otQQJ+K4T5Eo6EEf7RuVhAlJrHPloFy8dvXKrSbPQBM7iZmctb cRagpy7ayTTSaSTaY59yaO+jQSek/hC5Dc5a+ckC2m6A819TkZtPJzuoHuQ83aPuXToW72sJShR8ZTb ADnBCHHmtkEnktwpnraroL8+fZNsC/wuxnsKsJixC93x0KQf/+gndf0A/bihwWrgCYUAAAAASUVORK5CYII=')%20!important;%0A%7D% 0A%0A.icon_type_ie%20%7B%0A%20%20background-image%3A%20url('data%3Aimage/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAAB 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')%20!important;%0A %7D%0A%0A.hidden%20%7B%0A%20%20display%3A%20none;% 0A%7D%0A%0A.protect%20%7B%0A%20%20font-size%3A%2014px;%0A%20%20display%3A%20inline-flex;%0A%20%20margin%3A%20auto%2064px%20auto%2032p x;%0A%20%20color%3A%20rgba(0,0,0,.5);%0A%20%20alig n-self%3A%20flex-end;%0A%20/*%20%20*/%0A%20%20align-items%3A%20flex-end;%0A%20%20/*%20%20*/%0A%20%20/*%20%20*/%0A%20%20flex-grow%3A%201;%0A%20%20flex-basis%3A%20calc(110px%20+%2032px);%0A%20%20flex-shrink%3A%201;%0A%7D%0A.protect__wrapper%0A%7B%0A% 20%20display%3A%20inline-flex;%0A%20%20padding%3A%2032px%200;%0A%20%20align-items%3A%20baseline;%0A%7D%0A@media%20(max-width%3A%20450px)%20%7B%0A%20%20.protect%20%7B%0A% 20%20%20%20font-size%3A%2012px;%0A%20%20%20%20margin%3A%200%2032px ;%0A%20%20%20%20padding%3A%2032px%200%2064px;%0A%2 0%20%20%20flex-basis%3A%200;%0A%20%20%7D%0A%7D%0A@media%20(max-width%3A%20350px)%20%7B%0A%20%20.protect%20%7B%0A% 20%20%20%20font-size%3A%2010px;%0A%20%20%7D%0A%7D%0A%20%20.protect %20b%20%7B%0A%20%20%20%20width%3A%2093px;%0A%20%20 %20%20margin-left%3A%209px;%0A%20%20%20%20content%3A%20url('dat a%3Aimage/png;base64,iVBORw0KGgoAAAANSUhEUgAAALwAAAAiCAQAAAB PLHsTAAADtUlEQVR4Ae3ZhY7rOhSF4b8Dh5mZmZmZmZlhmJlKf vNzabQVq7Z2kiaTSjdrCUpW3E/hwDVKGPyd4h1Laaxs4wAH2EbjZv2/M9xNM75Y7L4OsIzGyR2Z1x0aM0dlhp/xRmdvNPo2mVUbjZmnMsOiDp8pfQ6fAX0OP8qHmvanT5/Dv6c2C2i36PtoJd3k8ELfYdHvJp3k8Ar9ReYoOTxsx0gvgWQXg xQpMspRrjFCMdBpBjiIPyt4yzhFqyO8YCGutPJVflWVuVQp1nS MU7hzijZmrN/O8Iuj6LlMF0VHO1gBkidMz35eQbwco6a4ExZ+mwf+o3wqi7Ja4 TDurGQY4+xrXNmPCd1BD57x9KzC/hDj7dXAimRCt8qC+uC/YZQKvcYuvaZcC+od09lVeoVdekt+txYToYvThrfpdfb7uHOkLn ibXafX2RsbXujX1MkOWzGh26azO3pGZ3f0lPx2IWVMyE7Rkiz8 KM9n+8K6+bYnsCe02X/wXHoF8OeU/G5CRk/wvKYPWUswl6zlzfDcPUcH/QPr23HHsi7RCpK9PJv9XC47qTpGPWUHJAk/wiqQ7JG/9YoCANDCkDXiJU34cpOnuNPuXbe1XVSR7VA7R+k+73YyzrosTi dPavA2u/W3XgVwd2Kk8o0zjzAY1tR9Hv/Jxy5radlzRtWls6cNv9+a3Bkn/JSwB7OcnRRAcjoSu2F73Wu8bPTMsANX9gbW+g6QFHX2NOGFXbr GCd+LHht+rcrug2+LBd/GZk+7FfhnkC78Z5bV9BA2+x1IGX4fJhV4vZnB670LqcMfyuEV9 rmBz+HvwdzD5/D34H8A/7vR4O9CwvAPQYdP9HSym+Nq12UDP8hjR2+xA5KDV9ibeBNhjZ9 iQ2j4cdagxwU/wJLY8FUO1HHlmhj8YZX9FSbQlbjyHiOdVOi/W3eSVuOJspPqi0h/w7pFeCB7+EV0cy80ew/uHMeEpj+PiUl/DxObfhNVmz4DeCWnuCL9gAl0iBX4cheb/ipXpOdYDJICT7Hprzh6geWAnWY+2vSOcftp8q4cNv3twKiLrMo a/gHG02FW6uujp1/Bon+GUeuaf4vQ+3sYX05Y9HZHacoAvn52hX4MYtA3Oek/6U+gYtEvzg7+rs6u0+vwNr0Or9Nr8Aq9wFfkzRui5kvgLDlqeu OzK/QjEJm+SgFi0F+HWPQLkZuwM+wjao7O3suucIGo2eqgr/CTFUTJdcZrCG+Ak/4uk17Ap/jTzDOmnaMmWI+WYwzWjHsHfwH0C13VmhyGzAAAAABJRU5ErkJg gg==');%0A%20%20%20%20background-repeat%3A%20no-repeat;%0A%20%20%20%20background-size%3A%20contain;%0A%20%20%7D%0A%23details%20.mul tiline%20%7B%0A%20%20height%3A%20auto;%0A%20%20whi te-space%3A%20normal;%0A%20%20line-height%3A%201.5;%0A%20%20padding%3A%2015px%2020px; %0A%7D%0A%0A%23details%20%23proceed-link%20%7B%0A%20%20padding-top%3A%206px;%0A%20%20padding-bottom%3A%206px;%0A%7D%0A%3C/style%3E%0A%20%20%3Cstyle%3E/*%20Copyright%202017%20The%20Chromium%20Authors.%2 0All%20rights%20reserved.%0A%20*%20Use%20of%20this %20source%20code%20is%20governed%20by%20a%20BSD-style%20license%20that%20can%20be%0A%20*%20found%2 0in%20the%20LICENSE%20file.%20*/%0A%0A.bad-clock%20.icon%20%7B%0A%20%20background-image%3A%20-webkit-image-set(%0A%20%20%20%20%20%20url(data%3Aimage/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEgAAABICAYAAAB V7bNHAAAFo0lEQVR4Xu3cS1OTVxwG8Ha6dsZNt/0S7ozX+wUSGKN7ycIvkJ2OiNcdbvwMfABXLS1VvLXFSMWUgFAh 1oJICCEGq8UFp8+fPu87J4S3vrmcvIfOceaZMKOSnN/8z/+c95Yv3B8XFxcXFxcXFzNRZ89+rZLJJNKLDCAZdfp0Hini5zWJ/Izk5e+QAf7bpPzf/yvKLkD0I1lArCOqwazL70D65Xdub5RUagcA0kDJCYCJ8Hen5b2 2D8y5czvVmTN9gCkRwHzwXvKe8t72wij1JWB6AFMIBDAPVZDPI J/Fth7zDWAeESD64LPIZ7ICBwAxZBFRlmURiUWLk0ymuCwrG8NtQ yqKKfUVYG4RwP7gs8pnbhsOAO4gapvlTluQzFaO+Uoy3nNMAay urlalcOqUKaSUudUKTa9dQN/t3m0EiWOItX6fw6W8nUCDyFJHh5ktAMbUuh0yN4HtBPpWgGIxN YQUTSBhTC3ZccvW3QNoawUR6Afk7p49ZpAwtuYPPHlsFUkFEeh HAA0jy61GwthkjM1UTx8BIq2gIeDcQ+7v3atKnZ2trqK+xs/n8JRFVBUEJL+CBGgYQD/t369WWomEMTZ0PgkAaQ8g6ik2RJyH+/apxwD6BSm3tpLS9QPxTGDUFTQkTZrT6wGApIJGkKcHD6p38XjL zkzWfw6ZADb0oHvAEaBHAPpZKohAv7YSCWOup3r6CRBpBX3v9R +pHuSxAB04oDKI4EjGDh1qDRLGXA9Q1iagYQFigxagJwR6Bpwx ptIsEsYc+roVANajBhpkcxag+3qDBs5TRMd5jowfPtws0rqMPU z1JAkQbQ8i0F1vBWP/GQHOqEwvgWGywPmNWW0GCWMPA9RrA9Cg339YPQR6AhwBGtuEM4 7kjhxRE0jDSBh7GKABC4CqGzSBZHplNCDA6PGBXhw9qt4nEo0A DYQBytgCJLvnB97yLs2ZQM+Q59WV4+NM8nWqESSMPcwOOm8BEA 8v2KC5QcxIgxYgTq0sgSY8HFaP4Ewjvx87Vi9SPgxQ0QYgHqD6 q9cIK2jU7z2sHIY4NUAzyF/hkYphptiaDUBjFy6oYa//aLtnArHn1FaOjvMSkdfZsEgY+7YBqpTLKnvxonrI/jPiTS/ijBPHAxKYFxrONDLD5I8f33j9AKQQQHZOsaVr1wSlBmkcSN7hx agGlPtM5Xg4swR6xXwGqWhnk2aWr1/fEmni0iUfiNPLX84nQ+L8wbw+ceK/kPKGlnnzSFNA8nbPOQBNalOKOEw1DiMwfuaQj11dDS7z3ChGmV IA0nRvr8oCaKPvbMJ5ycxqOLObKudP4syfPCmpRcLYDRxqmMlK ANLM5cvSf/zqmUI4rQik9ZwAnDnkDbKA/K0jYeyhD1ZtRnoFJKxSWuVwWjHEERjiyCsrR8N5iyu3i4iPhLE bON1hNuUApNdXrgAooHJqgHQchDiSApE+dXXxdIeBE2am8+7Gj S2R5oBU1ZCDp5WfBR2HweVtueaWNXDKNXqkeSARRlutiMP404p ZJJCHU0RwKanf8El786kEIL0BEisnsOfoOJICIzjLSLmjY5fFl 33CZ/XmzSCkwMqZD5hWgkOgnIELh/Yhvb16Vc0RqXa1Ympx1EoikTZw6TnavA9AWujpERgdh0B+5bAp +72npBKJHQZuXrAPqXD7dlDlEIdVw+BGCKmePgO3v9iHBJzaym F0nCUNB9f3C6q7e6eBG6jsyofz57V9DrOpIRc0GMkKUuns7DFw C56dwYGnvpTX9hzGwynF47wFz8BNnLYGx1ScUn64WlXjlOPxxY 8Yk6HbgO1H0nsOo+OsVRKJmNEbyW3PGpAAhGg9hwFOyj2KQCR/WjG4TeaWe5hlE5LAlBG8bvUwi3sc6lN390blGMBxD9S5RzINxD 3U6x4Ld18s4L6awt64LzdxX4/zDxj9/IEueAvhAAAAAElFTkSuQmCC)%201x,%0A%20%20%20%20%20%2 0url(data%3Aimage/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJAAAACQCAMAAAD QmBKKAAACvlBMVEUAAAD/gID/gID/VVX/VVX/Tk7/YmL/YGD/VVXzUVH/XV32UlL/W1v2T0//WFj3UlL/UlL3UFD/WFjwTk7/U1P/U1PxTU3/V1fyT0//VFTzTk7/UlLwTU3/VVX0UFD/VFT/VFT1Tk7/VVX/VFT/U1PyT0//VFT/U1PxTEz/UlLuS0v/U1P/UlL/VFT0T0//U1P0Tk7/VFT/U1PuTU3/UlLzTU3/U1P/U1PwTEz/UlL/U1PvTU3/U1P/U1PxTU3/U1PzTk70Tk7/U1PyTk7/U1PzTk7/U1P/U1P6UFD/UlLzTk7/U1P/U1PyTk7/U1PtTEz/UlLyTU3/U1P/UlL/UlLxTk7/UlLvTEz/U1PvTU3/U1P/U1P/UlLxTEzxTU3zTU3/UlK7Ozu8Ozu8PDy9PDy+PDy+PT2/PDy/PT3APDzAPT3BPT3BPj7CPT3CPj7DPT3DPj7EPj7EPz/FPj7FPz/GPj7GPz/HPz/HQEDIPz/IQEDJPz/JQEDKQEDKQUHLQEDLQUHMQEDMQUHNQUHNQkLOQUHOQkLOZWXPQ UHPQkLPZWXQQkLRQkLRQ0PSQkLSQ0PSZmbTQ0PTZmbUQ0PURET VQ0PVRETVaGjWRETWRUXXRETXRUXXaGjYRUXZRUXZaGjaRUXaR kbaaWnbRUXbRkbbaWncRkbdRkbdaWneRkbeR0ffRkbfR0ffa2v gR0fga2vhR0fhSEjha2viR0fiSEjia2vjSEjjbGzkSEjkSUnkb GzlSEjlSUnlbGzmSUnmbGznSUnnSkroSkrobW3pSkrqSkrqS0v qi4vrS0vriYnri4vsS0vsiYntS0vtTEzuTEzvTEzwTEzwTU3w6 OjxTU3x6OjyTU3y6Ojy6eny8vLz8/P0Tk71Tk72Tk72cnL3T0/3cnL4T0/4cnL5T0/5c3P6T0/7UFD8UFD9UFD/UlJJWZWgAAAAYXRSTlMAAgQGDA0NEBUWFhwcHR0fHyAgNDQ3OD g9PT4+QkJDQ0lLS15fdHR1fHyEhIWGiIiJiYuVlaioqaurrK+v uLm5u7u7wsLExMXGxszM0tTU2dna2t/p7Ozt7fPz+fv+/v7+jD+tjQAACYhJREFUeAHs1cFqwjAcx/G1FR0iIqKIFFEUHKJQKlIRFKGUilSKVCmiHrKpCDuPHcbA99xt jA1+b7HLjmMkaeIu+TzBl18C/xtFURRFURSFQ6bc6g0ns8Uq3u3i1WI2GfZa5cz/tKQafW+NX629fiN11Rij1p3v8af9vFszrpRTGWxAZTOoyK8pdp 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)%202x);%0A%7D%0A%3C/style%3E%0A%20%20%3Cstyle%3E/*%20Copyright%202017%20The%20Chromium%20Authors.%2 0All%20rights%20reserved.%0A%20*%20Use%20of%20this %20source%20code%20is%20governed%20by%20a%20BSD-style%20license%20that%20can%20be%0A%20*%20found%2 0in%20the%20LICENSE%20file.%20*/%0A%0A.captive-portal%20.icon%20%7B%0A%20%20background-image%3A%20-webkit-image-set(%0A%20%20%20%20%20%20url(data%3Aimage/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEgAAABICAQAAAD/5HvMAAAEyElEQVR4Xu3afWhVZRwH8LvdmjVSjKyQbKazia1k1s L6YzXoZdy28/J8f5XRC7hwEVk0hZQCXY2SipCgYgappXMQ5Ya9ELZqoEM3VHqx Bkapm21jOBWmbLfudk+0Peeu2+mc3zk9514WbN9/zz18ds75Pc/vPM+JTP9NZzrT+b9Fn2nGxHrainb8ggEaRgLn0IOjaMFroloU/Ssg1yxBLZpxBD00QufpODrRiFX6IiUKXY8XcRAJsryC3nRL7Ep sQJ/r0V3iSS0/MKU4D6uoQwLY/P1q4i0aYX9xVqyPRH1jbr8UtfSbE8CDqIK60wBjOEb7aDf24CB O/gN12LjJF4dM+dPAoNgMdNkUxLENQltAFViJdbTWfFTcaRbiMXy CpE1CM4vR5uAzdwB/hcxCDI5jXqGFeAadNJoGH0ErVhg3YPs46Ad9JldNS3GCAbDPkF GG/eJGWktn3PA4IUB3oxPzGY4AXSBLCSTLgfZxx2MLV1Q5tFHeWxW QDNalHulWeo4q9GW4VVShng5J0KgZ8+bkYpcEqIJk6H2y0CiW4 H58gGMYQhyn8DlqUUltZIk1XF01kKUW5yhm3gVB3Q76MDaRyXB QR1aIIJnyi6jNZUgs8uTQfUiGDJIxZ9OPfxEwhAO0F70To5NR5 skxrsUgWaGDZLQCHBHVxnKxWjwuivRS7McK7na1kpUZkEwUzXb FiZfZcVk8pE6xZ3u34AV5TFJUsV2ObBHU0+Q5wu0eJ21krw+eD 4lzBvOYf7wLeyI5DEfLx2l1DPqoSXK8SItis/gm41mlago/9P2UApklZE0pkHhdAv6YIiB8NwEQL9HvUwCkzZHz15g5Gw8jmR 0QtsizvOoACUjAIdlOZQUkHpCgDqd1gwRslhX3djZAmDsBwpAT JPtDUZPqGFuyUWU453IWu7fFHZOvhjiQ+aqiDheQ/bJjXpf2oP+caRA+cgPJpkxckeZfiIHMgmirC8gee4rz0qF6KV3 IJEi86R8kg0oazQ6Iv2Uyoiajt4x/qJ1BfcCe6JQZC/BQ82XvDLYHJPUEK3tmYHTmlotpbzCSwsDomDpc+mD6VgHETB3M 5Or2c5xUBvGTq7P98DjBEjqrBOLbD2eDZj7o+aJdhnhooJxUbd/r1cJ+yl1mJMMBGWUSP6zlezT5SIirGNKacEB4bwKEXcxrEN7gT hUGSCtILaZXMC+KiGN+5kHYITndkSj7Ko3GTIPMEvtJFKt9LDY giZtVQTLnqUPUOJcV8KWE95df4m85ps0+CQ/ig68xN72lscF4yveCFTa5g9AXnDR5lczC1Jr+4UhuCsAv6YlH3 EDURFbgPCG3Y2altmPG9FIJ8LnoOYLbXNDzgi+Myvkqii9sIuo cAHZZuN9tAKi6hnaiBwka9f942y2rzFcut4tZOO+3r5J6xcVmY EeKc9xlPuC3FhDHynBA6LQ5GGA2ftnNl82RqDrIDgb1ZU4Anxz UTc7raDeWhwPCUW0BA/C7gYeP9cWqILSUX8YAgmxxIoF3tYL/DkK9Y/znwm8CI4lvRLV+dVAQThOpOPht8p+ogZ4W9/jijFFD5eXhWPgPCXjMh/pSVYD6pxaywPGOKOIBWfkYhXYKozgvy5/rYBva8avzcx19sSrgT2jJnjJMVMiUAAAAAElFTkSuQmCC)%201 x,%0A%20%20%20%20%20%20url(data%3Aimage/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJAAAACQCAQAAAB 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)%202x);%0A%7D%0A%3C/style%3E%0A%20%20%3Cstyle%3E/*%20Copyright%202017%20The%20Chromium%20Authors.%2 0All%20rights%20reserved.%0A%20*%20Use%20of%20this %20source%20code%20is%20governed%20by%20a%20BSD-style%20license%20that%20can%20be%0A%20*%20found%2 0in%20the%20LICENSE%20file.%20*/%0A%0Abody.safe-browsing%20%7B%0A%20%20background-color%3A%20rgb(206,%2052,%2038);%0A%20%20color%3A% 20white;%0A%7D%0A%0A.safe-browsing%20%3A-webkit-any(%0A%20%20%20%20a,%20%23details,%20%23details-button,%20h1,%20h2,%20p,%20.small-link)%20%7B%0A%20%20color%3A%20white;%0A%7D%0A%0A. safe-browsing%20button%20%7B%0A%20%20background-color%3A%20rgba(255,%20255,%20255,%20.15);%0A%7D%0 A%0A.safe-browsing%20button%3Aactive%20%7B%0A%20%20backgroun d-color%3A%20rgba(255,%20255,%20255,%20.25);%0A%7D%0 A%0A.safe-browsing%20button%3Ahover%20%7B%0A%20%20box-shadow%3A%200%202px%203px%20rgba(0,%200,%200,%20.5 );%0A%7D%0A%0A.safe-browsing%20.error-code%20%7B%0A%20%20display%3A%20none;%0A%7D%0A%0A. safe-browsing%20.icon%20%7B%0A%20%20background-image%3A%20-webkit-image-set(%0A%20%20%20%20%20%20url(data%3Aimage/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEgAAABICAMAAAB iM0N1AAAA+VBMVEUAAAD////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9/f3////9/f36+vr8/Pz7+/v7+/v7+/v7+/v////r6+vn5+fk5OT5+fn19fX4+Pju7u7v7+/o6Ojx8fH09PTy8vLz8/Pj4+P39/fm5ubp6eni4uL8/Pzw8PDt7e329vbs7Ozg4ODh4eHe3t7l5eX6+vrd3d3q6urf39/c3NzbRDf7+/vb29vW1tbZ2dk+D9arAAAALXRSTlMA/eIxBfACHj3YwhYJDyfOtfr2WHObgEqpjellgY6c6mZLV3L2qKj OZemN+rUv7NpAAAACcUlEQVR4Xu2U53baQBQGAxiMaQZT3Wt6r nql9uKW9v4Pk5XEspG4WFmJ/GMeYM635cy7/8yePXv23N7uxnNwdHSwE1ENoLYLTz4NkM7vQHQFhKv4nlQCCIl UbFEOXHJxPVVYUY3nKSSpKFmIJbqANRdxPIcnTHRyGEPUAga0o nuy4CMb1ZM5Bh/HmYiiGwhwE81TvIYA18VIokvY4DKKp1SBDSqlCKIyIJT5PU1Aa fL3FVC4q1uDLdS4+4rCXd06bKXO21fKdxcNKFzVzUFQ9KoDJRe hr0z0tBgBpcrfVyZavAxM7uo2ABHNO8s2NTW4+8pEs4HUMxS+6 rYAEZFBYl+Y8FQ3C5hoIImGMNVVvLp4X1FRZ2n0BU035X+u7jm gomWv/zzWR23lB7ich/b1DBeRQVNNty1FHYLDWVh1TwEXic4gs6105UfPdMrd1/HCffrnqTayrYkqP3qmSom7r9q84xyMDLIUx7Mylfn7OvIGmbYy UYmGbmry99UWnYOZ7sFc5OHb1b2HLbS9QV1vED3dPX9fQXFuWi EeF9kzpfMcfaUZkbyn9+bQTfXwvm4W0iA3RNdQUyIV1lekkDOh Sx3sdGh17+At0ctA0plDpr/gLqSvSI+kXt8mAj9DVl20r3hGBM0iOwKmBtZXHOPX79fFXCJ/Ure79Gxr40Owuu9hK8LPp1mnR7JmWuv7ZsM+oH3FGZObFoWx3i Y/Ul1J2LVn0b7i6B2RZM1WumwL833MoH3FMQ1hPHIGsadnvk94X3 EsctPE4xK8p89FvK84ExIRuoUa6Pt98fU1DJUMosj+3/S15OtrGOsB9LnYqm+e5w+es4JAhYQDdgAAAABJRU5ErkJggg== )%201x,%0A%20%20%20%20%20%20url(data%3Aimage/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJAAAACQCAMAAAD QmBKKAAABPlBMVEUAAAD////////////////////////////////6+vr7+/v7+/v7+/v9/f36+vr7+/v7+/v////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9/f3////////////8/Pz////5+fn////////6+vr////////8/Pz7+/v7+/v////k5OTh4eHf39/e3t7g4OD6+vrbRDf5+fnv7+/x8fH09PTY2Njc3Nz39/fq6ur4+Pjz8/Pn5+f7+/vZ2dnW1tbt7e3U1NTV1dXl5eXr6+v19fXy8vLs7Oz29vba2trb 29vo6Ojm5ubu7u7d3d38/Pzp6enj4+Pi4uLw8PD///+BQ30nAAAAQHRSTlMAHhYFDzEJAifiwvb98M76PdjqtoGpZll0 c46qj1icTJ1KS42A6WWb2WdadYK1cvCb/cJXV+KA9qioPc5l6Y36uRjySgAABXVJREFUeF7s1kuKwlAUBND S+JtqggkkmODIH4gPRIgD11P730BDI6HV260Z1Wu4ZxUH/4tzzjnnnHPOOeecq2tEJdlsEsRkT+4RkeGRPA4Rj4YkG0RjfCL J0xixCPwWEIkd73aIwuTMu/MEMTiwc4AeBhd2LgPolfyhhFzLBy3Eplc+uE6hteWTLaRGCz5Z jKBU8UUFodmNL24z6KQ0pJCpaaohksxpmifQKGhjIXurSbbZhr 9qRG81yTYbaJJtNuefcsFbTbLNZnwjE7zVINtsybdK4Vttreyt Hdlml/zIUvTWjmyzFT9USd7akW02pUm22TV7WOveKttswV4K1Vtlm12x p5XmrbLNBvYWhG+15YK3qjab0STb7Fcv5tmcOBKE4Q2Xc7KrTJ W3yhs/2RsuZwvBjsQShPd0JxCyJVmA5v//getpgYextLSYKdHf+PbUO93No36Ht77eqHCvNnvASaBLp4rooC lvpYGurpx92Sx6Kw3Uv873ZbOHvA7Qtd12m7ZZ6a00UN+225a7 F5tt8XpA7Y61rJi1ViPeSgPZ7XZnuVh4zdsseisNhAEtzgOvaZ t9yGsCdSwLeJKk16DNSm+lgSCghQAax9NGbfaI1wQSD7YIgnE8 H0a3iY4a8FYSyMKAxgJoMqBs1txbaSDs6AR5Zv6Asllzb6WBIK AkiefzCQA5A8Jmjb2VBtoMKHXcUSM2e8x3ADoPAAh4Jr7v5G7I VKLjhr21DHS+DshP0xyAel3CZk29lQa6ebAUeLxe74KwWTNvpY GSFVDqOK4LPFF0QdisibfSQBsdjQFNo9EoI2zWxFtpINiJw+Fs 5hcBTaeDwaibETar76000GZAnggIeLqSyNxmD/luQOM4LngceDBP8ACQSnTY+L111geRtqxlMfLDAsiFkV8H1GWS yNBmW7xO+eiJyo7O87B4MCaA1Ixazd9bUwgIgFYd7a8Dwo4GIq YQgc02f291kEcd+YJHVmZusye8djkAlKxHHnjEiEUIVOTDFKKT PdxbXdnRjghI7GjgUSqTNmvurTRRkMQAtBp53IkjJuNRiY72cW 8NiwdLHdyJgmcdkGTKTGz2Gd+xPOhoGVAUjZgCo8zas33cW3lv iFqWhyF2ND7YbaZM2qy5t9JEs8ITPexoJlFksUzTZo+5Tk3FiI Wh7KAKpEzarLm30v/2ckczlYXdsGU6NvuY6wFdJjn+y4OXKR3EytP/WMNbNYD6Y9Ag8WCs/F4yo51t9oBrAoGJzJV/+WokJDow9NbaF7QJAKkNpMyb9KPfjL2VBrLtznLpQ0DlYNTKdr HZp1wfqA0iEjhMYsislN9I9LSmtz7RBxLmGCSxW9k9pYye1LPZ R9wACNQagIbutgaSfvTI3Fvp+xDwgDd6ZERAVM9mT7kB0HIZJI n4Ekp7W+KRRKfG3kqfYyAg4HHy6ZZwpB+daHgrVfG///3z5u1l38aODsbFrcH1opJ7VPgRabNnfPeaI8+13REdPV4FBA4C RkQyZWekt2rU8M3lVREQns9AG4XmgxLRjc0+v0d4q1ZNVjznNw 8WgsTiviaRXmh5K/19jzsaL+biwVwhsbeXdLUfffa+nrfSX9P4rYjnRcdFBWGSQ+KU f3/ybp7vuX6lFp7woaN9eDBxiUEIwCDH/wfCWzUrXwTrgLCj14rGuhTSxx8Q3qpZLnSQ4MlXHS2He8u+xvq J8FbdCmEFTXxcQdFAJkPP2qfVNvsLNy1vjg9WBKQsQMKPfiW8V bt6SkdLFkb50VeEt2rX1MGA4MHUlhkRfvTFh4S3alcEHaSczmr 20R+Et+rXCDu63DJsux/9+R7hrQZE0NFEHlVh/UV4q0F1B6zSEdlWF/lSsdn/AccLgKctjBheAAAAAElFTkSuQmCC)%202x);%0A%7D%0A%0A@m edia%20(min-width%3A%20240px)%20and%20(max-width%3A%20420px)%20and%0A%20%20%20%20%20%20%20(mi n-height%3A%20401px),%0A%20%20%20%20%20%20%20(min-width%3A%20421px)%20and%20(min-height%3A%20240px)%20and%0A%20%20%20%20%20%20%20(m ax-height%3A%20560px)%20%7B%0A%20%20body.safe-browsing%20.nav-wrapper%20%7B%0A%20%20%20%20background%3A%20rgb(20 6,%2052,%2038);%0A%20%20%20%20box-shadow%3A%200%20-22px%2040px%20rgb(206,%2052,%2038);%0A%20%20%7D%0A %7D%3C/style%3E%0A%20%20%3Cstyle%3E/*%20Copyright%202017%20The%20Chromium%20Authors.%2 0All%20rights%20reserved.%0A%20*%20Use%20of%20this %20source%20code%20is%20governed%20by%20a%20BSD-style%20license%20that%20can%20be%0A%20*%20found%2 0in%20the%20LICENSE%20file.%20*/%0A%0A.ssl%20.icon%20%7B%0A%20%20background-image%3A%20-webkit-image-set(%0A%20%20%20%20%20%20url(data%3Aimage/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEgAAABICAMAAAB iM0N1AAABAlBMVEUAAADcRTfcRDfdRET/gIDcRjr/ZmbjVTncRDfcRTfcRDfdRDzgSTncRDjeSDvcRTjbRDfbRDjeRz vcRjfbRjjcRTjcRTjcRTfdRTfcRDjdRTjcRTjbRDjbRTjbRTjb RTfcRjjdRDrcRjfbRTjZQzfcRDjZRDfZRzbWQzXXRDXXQzbXQz bWQjXYSDvWQjbbRDfOQDPSQTTUQjXCPDDNPzPJPjLGPTHVQjXM PzPRQTTWQjXLPzPDPDHYQzbAOzDTQTXHPTLIPjK8Oi++Oy/FPTHEPTHPQDTQQDTUQTXBPDDKPjK/OzC9Oi/////PQDPRQDS3OS66OS7TQTTEPDHXQjbMPjMBhLaWAAAAL3RSTlMA4 tgPAhYFCcL98B4x9ie1+s49WICbqXNKZY3pjuqcgVdLZnL2qKg 9zmXpjfontV8LANsAAAJrSURBVHhe7ZTnduIwFAY3ARIgBAg9v W1v173ROylby/u/yso2Fx3MNaxs9h/zAHM+Sfa8+M/s2LFjx+3tdjwH+/sHWxHVAerb8KSyANnUFkRXwLiK78llgJHJxRalwSMd11OGOeV4 nsM9FO0dxhJdw4LrOJ6jYy46PoohqgEHatE9JViiFNWTPIElTp IRRXcQ4C6aJ3EJAS4TkUQXsMJFFE++CCsU8xFEBSAoiHsaQNIQ 7yuQCFe3DiHUhftKIlzdKoRSFe0r8sXDAkSoumkIigYaIOkIfe Wi56EESFm8r1w0fFIl4epWgBA9qOMpmirCfeWijtoa9WSx6taA ELFBRl/vilS3BJRIbRk9/VFTsLrifUXRuNfXLU0y/7m6p0CKxqN+v6lJU/k3eJxu7Os5LWKDHi1tYstKG1zON1X3DGiRMR80Mx3fdCbc1+bQ e3o2SJrYXcV0fFMxL9xXiz0987BBtux65qaCeF8lHCR3FabBTQ 3xvk4M1yN5B/Mw2+urew8hTP1BM38Qnu5evK8gMw+7IcfH9E3ZlEBfMSO//Kf35+Cm6ua+rhbSYDeEa9CUyW3qK1HIjj5DBz8dWd0bWCd6Ult/uMPEr+BmbV/JHrVG/a9MsEybV5fsK50R3frmBFXtCtVXmt73H4PhQ4t9k9rkJ55tYXw ZrO4rCEUfPHfUEcuaZC/umw97TfaVpslu2tCb2lRWnBlKFtf+huwrjaa6Pxv7RfgW7nubJ PtKI/X0puQO4k/Pfe/ovtLY7KbxVwve0/sE3VeaLosIbkEDvt8Hoq/hKGwQYvoq5OMnoq/hLAbgc/FVn33PX7pAfE5QHR6fAAAAAElFTkSuQmCC)%201x,%0A%20%20 %20%20%20%20url(data%3Aimage/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJAAAACQCAMAAAD QmBKKAAABTVBMVEUAAADcRDf/ZmbcRjrjVTn/gIDdRETdRDzZQzbXQzXWQzbXQjbWQzXZRDbbRDnWQjXWQzXYSD vbRTjcRTjbRTfcRjfcRTjcRTjdRjncRTfdRTndRTfdRDrbRTjc RDnbRDfbRDjbRjfcRjfbRTjcRTjdRTjbRjjcRTjcRDjcRjncRT ncRTndRDnbRTjcRDfZQzbcRTfgSTncRDfcRjjZQzjcRTfVRDbc RDjcRDjWQzXeRzvbRDjXRDXXQzbXQzbbRDfeSDvWQjbVQjXIPj LOQDPXQjbCPDDNPzPUQTXRQTS5OS7QQDTUQjW3OS7SQTTPQDTF PDHJPjK2OC26OS7HPjHOPzPLPjLMPjPRQDTGPDHTQTTEPTHLPz PGPTG7Oi/HPTLKPjLTQTXYQza9Oi/MPzPFPTHDPDHBPDC/OzC+Oy+8Oi/AOzDWQjX////bRDd3undHAAAAQnRSTlMA2AUWCQIPHj39wvbO8DH64ifqqYFmt rVMc1lKS5x0nY6PWKqbjYDpZXWCZ1py8Jv9McJXV+KA9qioPc5 l6Y36J7VmcHe8AAAFWUlEQVR4XuzWS4rCQBSG0euz56ISgiaEj HwgGhAhDnRF3/6HDY1Ia5WPjP4a3LOKY28555xzzjnnnHPOuSyzpPR7vb6lZAUr S8hgB7uBpaMEKC0Zhz3A/mCpaPjTWCK23GwtCcMjN8ehpWDN3doS8HPi7vRjejX/1CbX8qA1sdGZB+eRaW14sjGp8YQnk7EpVQQqE7peCFyupjMnYm 4yGVGZ7q1EyTZbEEche2uUbLMlL5W6t4Zkm22Ikm02561c89aQ bLNTPpgq3hqSbbbmo1r41rhW8NaAaLMzvjITvDUg2WzFlyrBWw OCzc6Jkm12QQcL3Vtlmy3opFC9VbbZJR0tNW+Vbbahs0b41rhc 8FbVZqdEyTb724t5/bYNA3G4e+80NYI0gGFkvaR779KKZUWuFKe7nlIsT5X//2M5VMZiZB9DQj74xW8ffrwjP90Mb/07Vf5CbXYJg0BtO4toKS9vhYHGY1vDZg28FQY6tBZls8tYBehw NLTyt1nhrTDQaDQcWAux2SJWAxpOBpWMWSvm4q0w0Gg4nFQqFT d/m72HlYBYQJV+w83bZu9jRaDJYEB4osjJ02aFt8JASUBRq+Plar MrWBGI8lQajVanXA5kopUcvBUEGrCAWhSoXs3PZtewKhA/MMbTbcpEa7l4KwwURZSHANnVnGz2CVYGmg6oZ1u1XGy2hNWBCA 8BogE1m7Zl+ShNVMrdW2Wg/v+Amr2eRYCcGLBZU2+FgcSBESDfdZxdwGbNvBUGihKgnk1OjPA EwS5gsybeCgNNdTQLyAtqtRCwWQNvhYH4ndjtNnlAnlet1uIQs Fl9b4WBpgNyaUCEJ45DwGa1vRUGanU6nMcmB+ZSnlosES3nvm/tUpGm1tFPd5DDAyKFBJGpzRaxSjW5J0o8/MAQ4ZEyKua/b+0Np175blMERDuaECFBZGqzBaxY9iAjIMbDK01U0OVZxcplE6 BIjLzFRixgQDwflCJaXcC+1ToKyOYHFvCOljPiNmvurTBRI+oQ oGTk2Z1YQyIeiWhlEftWnx8Yf8RcyiMCEkyhic2u4xOWSw9MBB QENTQFI83a+iL2rdgpJ1rms45mByYzhbDNwt6qTtTlQC7r6FT/CLRQ02ZLWKc8OmK+LzooCykhKpl4q7p+7B/d0SjNggRbqGOzm1gPqL3PX3niZakOQsenf1PDWzWAxr+JBtEDQ xnnJTISNmvurfBK75t45bORBNGSobcqb9DqBCjdQOl5E370xth bYaDRiIjRDxKQwJk9a+o2u431gYZERBo/kcBIfvJ/TrSt6K1b+kDUHMkra2V3j5zRlprNbmADILbQ65S/z2ggyY82zL0VXsdQnnLdhSOKQzWbLWADIMpDgOrd3q958Qiigr G3wusYzmNbXmY4sh+tangrVJ2Dgy97X9v0CmILzzIHcj3ZPTL+ h6DN7mhYR5nxHI4mtKNbLCAmaX9QDDKFO6C36hDttcdJQFGLeT WRIupocGOj62cBb9WqesLTFwfm000MQgqz9lDLW+Hve35HM9Fn qw9HetBkNsF6+Yaet8Jf0+xbka0XbYspSMIg+5D8/8psnqdYv3qso1vsS9Hy6SaGQ6AYHP9ngLdqllVpiIB8RygRQjG EdOsc4K26RGzk6YTxjhbDDdzXcfwC8Fbd8glPnR4Y62gBAM/a1WybfYVNyyUBiZFPXYCAH70GvFW7nFRHH7EgyI8uAd6qXZ7NA qoilG6ZKuBH184D3qpdAQlIWp0p9dE7wFv1q8Y6+njLoPl+9P4 C4K0GRKSjgTyywvoAeKtBxVWU6YhorovcvA14q0HtouwU0Fw/+jzN8w/cQ/zg6ug2/QAAAABJRU5ErkJggg==)%202x);%0A%7D%0A%0A.ssl-opt-in%20.checkbox%20%7B%0A%20%20border-color%3A%20%23696969;%0A%7D%0A%0A.ssl-opt-in%20.checkbox%3A%3Abefore%20%7B%0A%20%20border-color%3A%20%23696969;%0A%7D%0A%3C/style%3E%0A%20%20%3Cscript%3E//%20Copyright%20(c)%202012%20The%20Chromium%20Autho rs.%20All%20rights%20reserved.%0A//%20Use%20of%20this%20source%20code%20is%20governed %20by%20a%20BSD-style%20license%20that%20can%20be%0A//%20found%20in%20the%20LICENSE%20file.%0A%0A//%20//%20Copyright%20(c)%202013%20The%20Chromium%20Autho rs.%20All%20rights%20reserved.%0A//%20Use%20of%20this%20source%20code%20is%20governed %20by%20a%20BSD-style%20license%20that%20can%20be%0A//%20found%20in%20the%20LICENSE%20file.%0A%0A/**%0A%20*%20@fileoverview%20Assertion%20support.%0 A%20*/%0A%0A/**%0A%20*%20Verify%20%7Ccondition%7C%20is%20truthy %20and%20return%20%7Ccondition%7C%20if%20so.%0A%20 *%20@template%20T%0A%20*%20@param%20%7BT%7D%20cond ition%20A%20condition%20to%20check%20for%20truthin ess.%20%20Note%20that%20this%0A%20*%20%20%20%20%20 may%20be%20used%20to%20test%20whether%20a%20value% 20is%20defined%20or%20not,%20and%20we%20don't%20wa nt%0A%20*%20%20%20%20%20to%20force%20a%20cast%20to %20Boolean.%0A%20*%20@param%20%7Bstring=%7D%20opt_ message%20A%20message%20to%20show%20on%20failure.% 0A%20*%20@return%20%7BT%7D%20A%20non-null%20%7Ccondition%7C.%0A%20*/%0Afunction%20assert(condition,%20opt_message)%20% 7B%0A%20%20if%20(!condition)%20%7B%0A%20%20%20%20v ar%20message%20=%20'Assertion%20failed';%0A%20%20% 20%20if%20(opt_message)%0A%20%20%20%20%20%20messag e%20=%20message%20+%20'%3A%20'%20+%20opt_message;% 0A%20%20%20%20var%20error%20=%20new%20Error(messag e);%0A%20%20%20%20var%20global%20=%20function()%20 %7B%0A%20%20%20%20%20%20return%20this;%0A%20%20%20 %20%7D();%0A%20%20%20%20if%20(global.traceAssertio nsForTesting)%0A%20%20%20%20%20%20console.warn(err or.stack);%0A%20%20%20%20throw%20error;%0A%20%20%7 D%0A%20%20return%20condition;%0A%7D%0A%0A/**%0A%20*%20Call%20this%20from%20places%20in%20the %20code%20that%20should%20never%20be%20reached.%0A %20*%0A%20*%20For%20example,%20handling%20all%20th e%20values%20of%20enum%20with%20a%20switch()%20lik e%20this%3A%0A%20*%0A%20*%20%20%20function%20getVa lueFromEnum(enum)%20%7B%0A%20*%20%20%20%20%20switc h%20(enum)%20%7B%0A%20*%20%20%20%20%20%20%20case%2 0ENUM_FIRST_OF_TWO%3A%0A%20*%20%20%20%20%20%20%20% 20%20return%20first%0A%20*%20%20%20%20%20%20%20cas e%20ENUM_LAST_OF_TWO%3A%0A%20*%20%20%20%20%20%20%2 0%20%20return%20last;%0A%20*%20%20%20%20%20%7D%0A% 20*%20%20%20%20%20assertNotReached();%0A%20*%20%20 %20%20%20return%20document;%0A%20*%20%20%20%7D%0A% 20*%0A%20*%20This%20code%20should%20only%20be%20hi t%20in%20the%20case%20of%20serious%20programmer%20 error%20or%0A%20*%20unexpected%20input.%0A%20*%0A% 20*%20@param%20%7Bstring=%7D%20opt_message%20A%20m essage%20to%20show%20when%20this%20is%20hit.%0A%20 */%0Afunction%20assertNotReached(opt_message)%20%7B% 0A%20%20assert(false,%20opt_message%20%7C%7C%20'Un reachable%20code%20hit');%0A%7D%0A%0A/**%0A%20*%20@param%20%7B*%7D%20value%20The%20value %20to%20check.%0A%20*%20@param%20%7Bfunction(new%3 A%20T,%20...)%7D%20type%20A%20user-defined%20constructor.%0A%20*%20@param%20%7Bstring =%7D%20opt_message%20A%20message%20to%20show%20whe n%20this%20is%20hit.%0A%20*%20@return%20%7BT%7D%0A %20*%20@template%20T%0A%20*/%0Afunction%20assertInstanceof(value,%20type,%20op t_message)%20%7B%0A%20%20//%20We%20don't%20use%20assert%20immediately%20here% 20so%20that%20we%20avoid%20constructing%20an%20err or%0A%20%20//%20message%20if%20we%20don't%20have%20to.%0A%20%20 if%20(!(value%20instanceof%20type))%20%7B%0A%20%20 %20%20assertNotReached(%0A%20%20%20%20%20%20%20%20 opt_message%20%7C%7C%0A%20%20%20%20%20%20%20%20'Va lue%20'%20+%20value%20+%20'%20is%20not%20a%5Bn%5D% 20'%20+%20(type.name%20%7C%7C%20typeof%20type));%0 A%20%20%7D%0A%20%20return%20value;%0A%7D%0A%0A%0A/**%0A%20*%20Alias%20for%20document.getElementById. %20Found%20elements%20must%20be%20HTMLElements.%0A %20*%20@param%20%7Bstring%7D%20id%20The%20ID%20of% 20the%20element%20to%20find.%0A%20*%20@return%20%7 BHTMLElement%7D%20The%20found%20element%20or%20nul l%20if%20not%20found.%0A%20*/%0Afunction%20$(id)%20%7B%0A%20%20//%20Disable%20getElementById%20restriction%20here,% 20since%20we%20are%20instructing%20other%0A%20%20//%20places%20to%20re-use%20the%20$()%20that%20is%20defined%20here.%0A%2 0%20//%20eslint-disable-next-line%20no-restricted-properties%0A%20%20var%20el%20=%20document.getElem entById(id);%0A%20%20return%20el%20%3F%20assertIns tanceof(el,%20HTMLElement)%20%3A%20null;%0A%7D%0A% 0A//%20TODO(devlin)%3A%20This%20should%20return%20SVGE lement,%20but%20closure%20compiler%20is%20missing% 0A//%20those%20externs.%0A/**%0A%20*%20Alias%20for%20document.getElementById. %20Found%20elements%20must%20be%20SVGElements.%0A% 20*%20@param%20%7Bstring%7D%20id%20The%20ID%20of%2 0the%20element%20to%20find.%0A%20*%20@return%20%7B Element%7D%20The%20found%20element%20or%20null%20i f%20not%20found.%0A%20*/%0Afunction%20getSVGElement(id)%20%7B%0A%20%20//%20Disable%20getElementById%20restriction%20here,% 20since%20it%20is%20not%20suitable%20for%20SVG%0A% 20%20//%20elements.%0A%20%20//%20eslint-disable-next-line%20no-restricted-properties%0A%20%20var%20el%20=%20document.getElem entById(id);%0A%20%20return%20el%20%3F%20assertIns tanceof(el,%20Element)%20%3A%20null;%0A%7D%0A%0A/**%0A%20*%20Add%20an%20accessible%20message%20to%2 0the%20page%20that%20will%20be%20announced%20to%0A %20*%20users%20who%20have%20spoken%20feedback%20on ,%20but%20will%20be%20invisible%20to%20all%0A%20*% 20other%20users.%20It's%20removed%20right%20away%2 0so%20it%20doesn't%20clutter%20the%20DOM.%0A%20*%2 0@param%20%7Bstring%7D%20msg%20The%20text%20to%20b e%20pronounced.%0A%20*/%0Afunction%20announceAccessibleMessage(msg)%20%7B %0A%20%20var%20element%20=%20document.createElemen t('div');%0A%20%20element.setAttribute('aria-live',%20'polite');%0A%20%20element.style.position %20=%20'fixed';%0A%20%20element.style.left%20=%20'-9999px';%0A%20%20element.style.height%20=%20'0px'; %0A%20%20element.innerText%20=%20msg;%0A%20%20docu ment.body.appendChild(element);%0A%20%20window.set Timeout(function()%20%7B%0A%20%20%20%20document.bo dy.removeChild(element);%0A%20%20%7D,%200);%0A%7D% 0A%0A/**%0A%20*%20Generates%20a%20CSS%20url%20string.%0A %20*%20@param%20%7Bstring%7D%20s%20The%20URL%20to% 20generate%20the%20CSS%20url%20for.%0A%20*%20@retu rn%20%7Bstring%7D%20The%20CSS%20url%20string.%0A%2 0*/%0Afunction%20url(s)%20%7B%0A%20%20//%20http%3A//www.w3.org/TR/css3-values/%23uris%0A%20%20//%20Parentheses,%20commas,%20whitespace%20character s,%20single%20quotes%20(')%20and%20double%0A%20%20//%20quotes%20(%22)%20appearing%20in%20a%20URI%20mus t%20be%20escaped%20with%20a%20backslash%0A%20%20va r%20s2%20=%20s.replace(/(%5C(%7C%5C)%7C%5C,%7C%5Cs%7C%5C'%7C%5C%22%7C%5C%5 C)/g,%20'%5C%5C$1');%0A%20%20//%20WebKit%20has%20a%20bug%20when%20it%20comes%20to %20URLs%20that%20end%20with%20%5C%0A%20%20//%20https%3A//bugs.webkit.org/show_bug.cgi%3Fid=28885%0A%20%20if%20(/%5C%5C%5C%5C$/.test(s2))%20%7B%0A%20%20%20%20//%20Add%20a%20space%20to%20work%20around%20the%20We bKit%20bug.%0A%20%20%20%20s2%20+=%20'%20';%0A%20%2 0%7D%0A%20%20return%20'url(%22'%20+%20s2%20+%20'%2 2)';%0A%7D%0A%0A/**%0A%20*%20Parses%20query%20parameters%20from%20L ocation.%0A%20*%20@param%20%7BLocation%7D%20locati on%20The%20URL%20to%20generate%20the%20CSS%20url%2 0for.%0A%20*%20@return%20%7BObject%7D%20Dictionary %20containing%20name%20value%20pairs%20for%20URL%0 A%20*/%0Afunction%20parseQueryParams(location)%20%7B%0A% 20%20var%20params%20=%20%7B%7D;%0A%20%20var%20quer y%20=%20unescape(location.search.substring(1));%0A %20%20var%20vars%20=%20query.split('&');%0A%20%20for%20(var%20i%20=%200;%20i%20%3C%20va rs.length;%20i++)%20%7B%0A%20%20%20%20var%20pair%2 0=%20vars%5Bi%5D.split('=');%0A%20%20%20%20params% 5Bpair%5B0%5D%5D%20=%20pair%5B1%5D;%0A%20%20%7D%0A %20%20return%20params;%0A%7D%0A%0A/**%0A%20*%20Creates%20a%20new%20URL%20by%20appendi ng%20or%20replacing%20the%20given%20query%20key%20 and%20value.%0A%20*%20Not%20supporting%20URL%20wit h%20username%20and%20password.%0A%20*%20@param%20% 7BLocation%7D%20location%20The%20original%20URL.%0 A%20*%20@param%20%7Bstring%7D%20key%20The%20query% 20parameter%20name.%0A%20*%20@param%20%7Bstring%7D %20value%20The%20query%20parameter%20value.%0A%20* %20@return%20%7Bstring%7D%20The%20constructed%20ne w%20URL.%0A%20*/%0Afunction%20setQueryParam(location,%20key,%20val ue)%20%7B%0A%20%20var%20query%20=%20parseQueryPara ms(location);%0A%20%20query%5BencodeURIComponent(k ey)%5D%20=%20encodeURIComponent(value);%0A%0A%20%2 0var%20newQuery%20=%20'';%0A%20%20for%20(var%20q%2 0in%20query)%20%7B%0A%20%20%20%20newQuery%20+=%20( newQuery%20%3F%20'&'%20%3A%20'%3F')%20+%20q%20+%20'='%20+%20query%5Bq %5D;%0A%20%20%7D%0A%0A%20%20return%20location.orig in%20+%20location.pathname%20+%20newQuery%20+%20lo cation.hash;%0A%7D%0A%0A/**%0A%20*%20@param%20%7BNode%7D%20el%20A%20node%20 to%20search%20for%20ancestors%20with%20%7CclassNam e%7C.%0A%20*%20@param%20%7Bstring%7D%20className%2 0A%20class%20to%20search%20for.%0A%20*%20@return%2 0%7BElement%7D%20A%20node%20with%20class%20of%20%7 CclassName%7C%20or%20null%20if%20none%20is%20found .%0A%20*/%0Afunction%20findAncestorByClass(el,%20className) %20%7B%0A%20%20return%20/**%20@type%20%7BElement%7D%20*/%20(findAncestor(el,%20function(el)%20%7B%0A%20%20 %20%20return%20el.classList%20&&%20el.classList.contains(className);%0A%20%20%7D)) ;%0A%7D%0A%0A/**%0A%20*%20Return%20the%20first%20ancestor%20for% 20which%20the%20%7B@code%20predicate%7D%20returns% 20true.%0A%20*%20@param%20%7BNode%7D%20node%20The% 20node%20to%20check.%0A%20*%20@param%20%7Bfunction (Node)%3Aboolean%7D%20predicate%20The%20function%2 0that%20tests%20the%0A%20*%20%20%20%20%20nodes.%0A %20*%20@return%20%7BNode%7D%20The%20found%20ancest or%20or%20null%20if%20not%20found.%0A%20*/%0Afunction%20findAncestor(node,%20predicate)%20%7 B%0A%20%20var%20last%20=%20false;%0A%20%20while%20 (node%20!=%20null%20&&%20!(last%20=%20predicate(node)))%20%7B%0A%20%20%2 0%20node%20=%20node.parentNode;%0A%20%20%7D%0A%20% 20return%20last%20%3F%20node%20%3A%20null;%0A%7D%0 A%0Afunction%20swapDomNodes(a,%20b)%20%7B%0A%20%20 var%20afterA%20=%20a.nextSibling;%0A%20%20if%20(af terA%20==%20b)%20%7B%0A%20%20%20%20swapDomNodes(b, %20a);%0A%20%20%20%20return;%0A%20%20%7D%0A%20%20v ar%20aParent%20=%20a.parentNode;%0A%20%20b.parentN ode.replaceChild(a,%20b);%0A%20%20aParent.insertBe fore(b,%20afterA);%0A%7D%0A%0A/**%0A%20*%20Disables%20text%20selection%20and%20dr agging,%20with%20optional%20whitelist%20callbacks. %0A%20*%20@param%20%7Bfunction(Event)%3Aboolean=%7 D%20opt_allowSelectStart%20Unless%20this%20functio n%0A%20*%20%20%20%20is%20defined%20and%20returns%2 0true,%20the%20onselectionstart%20event%20will%20b e%0A%20*%20%20%20%20surpressed.%0A%20*%20@param%20 %7Bfunction(Event)%3Aboolean=%7D%20opt_allowDragSt art%20Unless%20this%20function%0A%20*%20%20%20%20i s%20defined%20and%20returns%20true,%20the%20ondrag start%20event%20will%20be%20surpressed.%0A%20*/%0Afunction%20disableTextSelectAndDrag(opt_allowSe lectStart,%20opt_allowDragStart)%20%7B%0A%20%20//%20Disable%20text%20selection.%0A%20%20document.on selectstart%20=%20function(e)%20%7B%0A%20%20%20%20 if%20(!(opt_allowSelectStart%20&&%20opt_allowSelectStart.call(this,%20e)))%0A%20%20 %20%20%20%20e.preventDefault();%0A%20%20%7D;%0A%0A %20%20//%20Disable%20dragging.%0A%20%20document.ondragstar t%20=%20function(e)%20%7B%0A%20%20%20%20if%20(!(op t_allowDragStart%20&&%20opt_allowDragStart.call(this,%20e)))%0A%20%20%2 0%20%20%20e.preventDefault();%0A%20%20%7D;%0A%7D%0 A%0A/**%0A%20*%20Check%20the%20directionality%20of%20th e%20page.%0A%20*%20@return%20%7Bboolean%7D%20True% 20if%20Chrome%20is%20running%20an%20RTL%20UI.%0A%2 0*/%0Afunction%20isRTL()%20%7B%0A%20%20return%20docum ent.documentElement.dir%20==%20'rtl';%0A%7D%0A%0A/**%0A%20*%20Get%20an%20element%20that's%20known%20 to%20exist%20by%20its%20ID.%20We%20use%20this%20in stead%20of%20just%0A%20*%20calling%20getElementByI d%20and%20not%20checking%20the%20result%20because% 20this%20lets%20us%0A%20*%20satisfy%20the%20JSComp iler%20type%20system.%0A%20*%20@param%20%7Bstring% 7D%20id%20The%20identifier%20name.%0A%20*%20@retur n%20%7B!HTMLElement%7D%20the%20Element.%0A%20*/%0Afunction%20getRequiredElement(id)%20%7B%0A%20%2 0return%20assertInstanceof(%0A%20%20%20%20%20%20$( id),%20HTMLElement,%20'Missing%20required%20elemen t%3A%20'%20+%20id);%0A%7D%0A%0A/**%0A%20*%20Query%20an%20element%20that's%20known% 20to%20exist%20by%20a%20selector.%20We%20use%20thi s%20instead%20of%0A%20*%20just%20calling%20querySe lector%20and%20not%20checking%20the%20result%20bec ause%20this%20lets%20us%0A%20*%20satisfy%20the%20J SCompiler%20type%20system.%0A%20*%20@param%20%7Bst ring%7D%20selectors%20CSS%20selectors%20to%20query %20the%20element.%0A%20*%20@param%20%7B(!Document% 7C!DocumentFragment%7C!Element)=%7D%20opt_context% 20An%20optional%0A%20*%20%20%20%20%20context%20obj ect%20for%20querySelector.%0A%20*%20@return%20%7B! HTMLElement%7D%20the%20Element.%0A%20*/%0Afunction%20queryRequiredElement(selectors,%20op t_context)%20%7B%0A%20%20var%20element%20=%20(opt_ context%20%7C%7C%20document).querySelector(selecto rs);%0A%20%20return%20assertInstanceof(%0A%20%20%2 0%20%20%20element,%20HTMLElement,%20'Missing%20req uired%20element%3A%20'%20+%20selectors);%0A%7D%0A% 0A//%20Handle%20click%20on%20a%20link.%20If%20the%20li nk%20points%20to%20a%20chrome%3A%20or%20file%3A%20 url,%20then%0A//%20call%20into%20the%20browser%20to%20do%20the%20n avigation.%0A%5B'click',%20'auxclick'%5D.forEach(f unction(eventName)%20%7B%0A%20%20document.addEvent Listener(eventName,%20function(e)%20%7B%0A%20%20%2 0%20if%20(e.button%20%3E%201)%0A%20%20%20%20%20%20 return;%20%20//%20Ignore%20buttons%20other%20than%20left%20and%20 middle.%0A%20%20%20%20if%20(e.defaultPrevented)%0A %20%20%20%20%20%20return;%0A%0A%20%20%20%20var%20e ventPath%20=%20e.path;%0A%20%20%20%20var%20anchor% 20=%20null;%0A%20%20%20%20if%20(eventPath)%20%7B%0 A%20%20%20%20%20%20for%20(var%20i%20=%200;%20i%20% 3C%20eventPath.length;%20i++)%20%7B%0A%20%20%20%20 %20%20%20%20var%20element%20=%20eventPath%5Bi%5D;% 0A%20%20%20%20%20%20%20%20if%20(element.tagName%20 ===%20'A'%20&&%20element.href)%20%7B%0A%20%20%20%20%20%20%20%20% 20%20anchor%20=%20element;%0A%20%20%20%20%20%20%20 %20%20%20break;%0A%20%20%20%20%20%20%20%20%7D%0A%2 0%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20% 20%20//%20Fallback%20if%20Event.path%20is%20not%20availab le.%0A%20%20%20%20var%20el%20=%20e.target;%0A%20%2 0%20%20if%20(!anchor%20&&%20el.nodeType%20==%20Node.ELEMENT_NODE%20&&%0A%20%20%20%20%20%20%20%20el.webkitMatchesSelecto r('A,%20A%20*'))%20%7B%0A%20%20%20%20%20%20while%2 0(el.tagName%20!=%20'A')%20%7B%0A%20%20%20%20%20%2 0%20%20el%20=%20el.parentElement;%0A%20%20%20%20%2 0%20%7D%0A%20%20%20%20%20%20anchor%20=%20el;%0A%20 %20%20%20%7D%0A%0A%20%20%20%20if%20(!anchor)%0A%20 %20%20%20%20%20return;%0A%0A%20%20%20%20anchor%20= %20/**%20@type%20%7B!HTMLAnchorElement%7D%20*/%20(anchor);%0A%20%20%20%20if%20((anchor.protocol% 20==%20'file%3A'%20%7C%7C%20anchor.protocol%20==%2 0'about%3A')%20&&%0A%20%20%20%20%20%20%20%20(e.button%20==%200%20%7 C%7C%20e.button%20==%201))%20%7B%0A%20%20%20%20%20 %20chrome.send('navigateToUrl',%20%5B%0A%20%20%20% 20%20%20%20%20anchor.href,%20anchor.target,%20e.bu tton,%20e.altKey,%20e.ctrlKey,%20e.metaKey,%0A%20% 20%20%20%20%20%20%20e.shiftKey%0A%20%20%20%20%20%2 0%5D);%0A%20%20%20%20%20%20e.preventDefault();%0A% 20%20%20%20%7D%0A%20%20%7D);%0A%7D);%0A%0A/**%0A%20*%20Creates%20a%20new%20URL%20which%20is%2 0the%20old%20URL%20with%20a%20GET%20param%20of%20k ey=value.%0A%20*%20@param%20%7Bstring%7D%20url%20T he%20base%20URL.%20There%20is%20not%20sanity%20che cking%20on%20the%20URL%20so%0A%20*%20%20%20%20%20i t%20must%20be%20passed%20in%20a%20proper%20format. %0A%20*%20@param%20%7Bstring%7D%20key%20The%20key% 20of%20the%20param.%0A%20*%20@param%20%7Bstring%7D %20value%20The%20value%20of%20the%20param.%0A%20*% 20@return%20%7Bstring%7D%20The%20new%20URL.%0A%20*/%0Afunction%20appendParam(url,%20key,%20value)%20% 7B%0A%20%20var%20param%20=%20encodeURIComponent(ke y)%20+%20'='%20+%20encodeURIComponent(value);%0A%0 A%20%20if%20(url.indexOf('%3F')%20==%20-1)%0A%20%20%20%20return%20url%20+%20'%3F'%20+%20pa ram;%0A%20%20return%20url%20+%20'&'%20+%20param;%0A%7D%0A%0A/**%0A%20*%20Creates%20an%20element%20of%20a%20spec ified%20type%20with%20a%20specified%20class%20name .%0A%20*%20@param%20%7Bstring%7D%20type%20The%20no de%20type.%0A%20*%20@param%20%7Bstring%7D%20classN ame%20The%20class%20name%20to%20use.%0A%20*%20@ret urn%20%7BElement%7D%20The%20created%20element.%0A% 20*/%0Afunction%20createElementWithClassName(type,%20c lassName)%20%7B%0A%20%20var%20elm%20=%20document.c reateElement(type);%0A%20%20elm.className%20=%20cl assName;%0A%20%20return%20elm;%0A%7D%0A%0A/**%0A%20*%20transitionend%20does%20not%20always%20 fire%20(e.g.%20when%20animation%20is%20aborted%0A% 20*%20or%20when%20no%20paint%20happens%20during%20 the%20animation).%20This%20function%20sets%20up%0A %20*%20a%20timer%20and%20emulate%20the%20event%20i f%20it%20is%20not%20fired%20when%20the%20timer%20e xpires.%0A%20*%20@param%20%7B!HTMLElement%7D%20el% 20The%20element%20to%20watch%20for%20transitionend .%0A%20*%20@param%20%7Bnumber=%7D%20opt_timeOut%20 The%20maximum%20wait%20time%20in%20milliseconds%20 for%20the%0A%20*%20%20%20%20%20transitionend%20to% 20happen.%20If%20not%20specified,%20it%20is%20fetc hed%20from%20%7Cel%7C%0A%20*%20%20%20%20%20using%2 0the%20transitionDuration%20style%20value.%0A%20*/%0Afunction%20ensureTransitionEndEvent(el,%20opt_t imeOut)%20%7B%0A%20%20if%20(opt_timeOut%20===%20un defined)%20%7B%0A%20%20%20%20var%20style%20=%20get ComputedStyle(el);%0A%20%20%20%20opt_timeOut%20=%2 0parseFloat(style.transitionDuration)%20*%201000;% 0A%0A%20%20%20%20//%20Give%20an%20additional%2050ms%20buffer%20for%20 the%20animation%20to%20complete.%0A%20%20%20%20opt _timeOut%20+=%2050;%0A%20%20%7D%0A%0A%20%20var%20f ired%20=%20false;%0A%20%20el.addEventListener('tra nsitionend',%20function%20f(e)%20%7B%0A%20%20%20%2 0el.removeEventListener('transitionend',%20f);%0A% 20%20%20%20fired%20=%20true;%0A%20%20%7D);%0A%20%2 0window.setTimeout(function()%20%7B%0A%20%20%20%20 if%20(!fired)%0A%20%20%20%20%20%20cr.dispatchSimpl eEvent(el,%20'transitionend',%20true);%0A%20%20%7D ,%20opt_timeOut);%0A%7D%0A%0A/**%0A%20*%20Alias%20for%20document.scrollTop%20get ter.%0A%20*%20@param%20%7B!HTMLDocument%7D%20doc%2 0The%20document%20node%20where%20information%20wil l%20be%0A%20*%20%20%20%20%20queried%20from.%0A%20* %20@return%20%7Bnumber%7D%20The%20Y%20document%20s croll%20offset.%0A%20*/%0Afunction%20scrollTopForDocument(doc)%20%7B%0A%2 0%20return%20doc.documentElement.scrollTop%20%7C%7 C%20doc.body.scrollTop;%0A%7D%0A%0A/**%0A%20*%20Alias%20for%20document.scrollTop%20set ter.%0A%20*%20@param%20%7B!HTMLDocument%7D%20doc%2 0The%20document%20node%20where%20information%20wil l%20be%0A%20*%20%20%20%20%20queried%20from.%0A%20* %20@param%20%7Bnumber%7D%20value%20The%20target%20 Y%20scroll%20offset.%0A%20*/%0Afunction%20setScrollTopForDocument(doc,%20value )%20%7B%0A%20%20doc.documentElement.scrollTop%20=% 20doc.body.scrollTop%20=%20value;%0A%7D%0A%0A/**%0A%20*%20Alias%20for%20document.scrollLeft%20ge tter.%0A%20*%20@param%20%7B!HTMLDocument%7D%20doc% 20The%20document%20node%20where%20information%20wi ll%20be%0A%20*%20%20%20%20%20queried%20from.%0A%20 *%20@return%20%7Bnumber%7D%20The%20X%20document%20 scroll%20offset.%0A%20*/%0Afunction%20scrollLeftForDocument(doc)%20%7B%0A% 20%20return%20doc.documentElement.scrollLeft%20%7C %7C%20doc.body.scrollLeft;%0A%7D%0A%0A/**%0A%20*%20Alias%20for%20document.scrollLeft%20se tter.%0A%20*%20@param%20%7B!HTMLDocument%7D%20doc% 20The%20document%20node%20where%20information%20wi ll%20be%0A%20*%20%20%20%20%20queried%20from.%0A%20 *%20@param%20%7Bnumber%7D%20value%20The%20target%2 0X%20scroll%20offset.%0A%20*/%0Afunction%20setScrollLeftForDocument(doc,%20valu e)%20%7B%0A%20%20doc.documentElement.scrollLeft%20 =%20doc.body.scrollLeft%20=%20value;%0A%7D%0A%0A/**%0A%20*%20Replaces%20'&',%20'%3C',%20'%3E',%20'%22',%20and%20'''%20charac ters%20with%20their%20HTML%20encoding.%0A%20*%20@p aram%20%7Bstring%7D%20original%20The%20original%20 string.%0A%20*%20@return%20%7Bstring%7D%20The%20st ring%20with%20all%20the%20characters%20mentioned%2 0above%20replaced.%0A%20*/%0Afunction%20HTMLEscape(original)%20%7B%0A%20%20r eturn%20original.replace(/&/g,%20'&amp;')%0A%20%20%20%20%20%20.replace(/%3C/g,%20'&lt;')%0A%20%20%20%20%20%20.replace(/%3E/g,%20'&gt;')%0A%20%20%20%20%20%20.replace(/%22/g,%20'&quot;')%0A%20%20%20%20%20%20.replace(/'/g,%20'&%2339;');%0A%7D%0A%0A/**%0A%20*%20Shortens%20the%20provided%20string%20( if%20necessary)%20to%20a%20string%20of%20length%20 at%20most%0A%20*%20%7CmaxLength%7C.%0A%20*%20@para m%20%7Bstring%7D%20original%20The%20original%20str ing.%0A%20*%20@param%20%7Bnumber%7D%20maxLength%20 The%20maximum%20length%20allowed%20for%20the%20str ing.%0A%20*%20@return%20%7Bstring%7D%20The%20origi nal%20string%20if%20its%20length%20does%20not%20ex ceed%0A%20*%20%20%20%20%20%7CmaxLength%7C.%20Other wise%20the%20first%20%7CmaxLength%7C%20-%201%20characters%20with%20'...'%0A%20*%20%20%20%2 0%20appended.%0A%20*/%0Afunction%20elide(original,%20maxLength)%20%7B%0 A%20%20if%20(original.length%20%3C=%20maxLength)%0 A%20%20%20%20return%20original;%0A%20%20return%20o riginal.substring(0,%20maxLength%20-%201)%20+%20'%5Cu2026';%0A%7D%0A%0A/**%0A%20*%20Quote%20a%20string%20so%20it%20can%20b e%20used%20in%20a%20regular%20expression.%0A%20*%2 0@param%20%7Bstring%7D%20str%20The%20source%20stri ng.%0A%20*%20@return%20%7Bstring%7D%20The%20escape d%20string.%0A%20*/%0Afunction%20quoteString(str)%20%7B%0A%20%20retur n%20str.replace(/(%5B%5C%5C%5C.%5C+%5C*%5C%3F%5C%5B%5C%5E%5C%5D%5C$ %5C(%5C)%5C%7B%5C%7D%5C=%5C!%5C%3C%5C%3E%5C%7C%5C% 3A%5D)/g,%20'%5C%5C$1');%0A%7D%0A%0A/**%0A%20*%20Calls%20%7Ccallback%7C%20and%20stops%2 0listening%20the%20first%20time%20any%20event%20in %20%7CeventNames%7C%0A%20*%20is%20triggered%20on%2 0%7Ctarget%7C.%0A%20*%20@param%20%7B!EventTarget%7 D%20target%0A%20*%20@param%20%7B!Array%3Cstring%3E %7Cstring%7D%20eventNames%20Array%20or%20space-delimited%20string%20of%0A%20*%20%20%20%20%20event %20names%20to%20listen%20to%20(e.g.%20'click%20mou sedown').%0A%20*%20@param%20%7Bfunction(!Event)%7D %20callback%20Called%20at%20most%20once.%20The%0A% 20*%20%20%20%20%20optional%20return%20value%20is%2 0passed%20on%20by%20the%20listener.%0A%20*/%0Afunction%20listenOnce(target,%20eventNames,%20c allback)%20%7B%0A%20%20if%20(!Array.isArray(eventN ames))%0A%20%20%20%20eventNames%20=%20eventNames.s plit(/%20+/);%0A%0A%20%20var%20removeAllAndCallCallback%20=%2 0function(event)%20%7B%0A%20%20%20%20eventNames.fo rEach(function(eventName)%20%7B%0A%20%20%20%20%20% 20target.removeEventListener(eventName,%20removeAl lAndCallCallback,%20false);%0A%20%20%20%20%7D);%0A %20%20%20%20return%20callback(event);%0A%20%20%7D; %0A%0A%20%20eventNames.forEach(function(eventName) %20%7B%0A%20%20%20%20target.addEventListener(event Name,%20removeAllAndCallCallback,%20false);%0A%20% 20%7D);%0A%7D%0A%0A//%20%20%20/*%20is_ios%20*/%0A%0A/**%0A%20*%20Helper%20to%20convert%20callback-based%20define()%20API%20to%20a%20promise-based%20API.%0A%20*%20@suppress%20%7BundefinedVars %7D%0A%20*%20@param%20%7B!Array%3Cstring%3E%7D%20m oduleNames%0A%20*%20@return%20%7B!Promise%7D%0A%20 */%0Afunction%20importModules(moduleNames)%20%7B%0A% 20%20return%20new%20Promise(function(resolve)%20%7 B%0A%20%20%20%20define(moduleNames,%20function()%2 0%7B%0A%20%20%20%20%20%20resolve(Array.from(argume nts));%0A%20%20%20%20%7D);%0A%20%20%7D);%0A%7D%0A% 0A/**%0A%20*%20@param%20%7B!Event%7D%20e%0A%20*%20@re turn%20%7Bboolean%7D%20Whether%20a%20modifier%20ke y%20was%20down%20when%20processing%20%7Ce%7C.%0A%2 0*/%0Afunction%20hasKeyModifiers(e)%20%7B%0A%20%20ret urn%20!!(e.altKey%20%7C%7C%20e.ctrlKey%20%7C%7C%20 e.metaKey%20%7C%7C%20e.shiftKey);%0A%7D%0A%3C/script%3E%0A%20%20%3Cscript%3E//%20Copyright%202014%20The%20Chromium%20Authors.%20 All%20rights%20reserved.%0A//%20Use%20of%20this%20source%20code%20is%20governed %20by%20a%20BSD-style%20license%20that%20can%20be%0A//%20found%20in%20the%20LICENSE%20file.%0A%0Avar%20C APTIVEPORTAL_CMD_OPEN_LOGIN_PAGE%20=%20'openLoginP age';%0A%3C/script%3E%0A%20%20%3Cscript%3E//%20Copyright%202014%20The%20Chromium%20Authors.%20 All%20rights%20reserved.%0A//%20Use%20of%20this%20source%20code%20is%20governed %20by%20a%20BSD-style%20license%20that%20can%20be%0A//%20found%20in%20the%20LICENSE%20file.%0A%0Afunctio n%20setupSSLDebuggingInfo()%20%7B%0A%20%20if%20(lo adTimeData.getString('type')%20!=%20'SSL')%0A%20%2 0%20%20return;%0A%0A%20%20//%20The%20titles%20are%20not%20internationalized%20 because%20this%20is%20debugging%20information%0A%2 0%20//%20for%20bug%20reports,%20help%20center%20posts,%2 0etc.%0A%20%20appendDebuggingField('Subject',%20lo adTimeData.getString('subject'));%0A%20%20appendDe buggingField('Issuer',%20loadTimeData.getString('i ssuer'));%0A%20%20appendDebuggingField('Expires%20 on',%20loadTimeData.getString('expirationDate'));% 0A%20%20appendDebuggingField('Current%20date',%20l oadTimeData.getString('currentDate'));%0A%20%20app endDebuggingField('PEM%20encoded%20chain',%20loadT imeData.getString('pem'),%0A%20%20%20%20%20%20%20% 20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20tru e);%0A%0A%20%20$('error-code').addEventListener('click',%20toggleDebugging Info);%0A%7D%0A%3C/script%3E%0A%20%20%3Cscript%3E//%20Copyright%202015%20The%20Chromium%20Authors.%20 All%20rights%20reserved.%0A//%20Use%20of%20this%20source%20code%20is%20governed %20by%20a%20BSD-style%20license%20that%20can%20be%0A//%20found%20in%20the%20LICENSE%20file.%0A%0A'use%20 strict';%0A%0A//%20Other%20constants%20defined%20in%20security_int erstitial_page.h.%0Avar%20SB_BOX_CHECKED%20=%20'bo xchecked';%0Avar%20SB_DISPLAY_CHECK_BOX%20=%20'dis playcheckbox';%0A%0A//%20This%20sets%20up%20the%20Extended%20Safe%20Brow sing%20Reporting%20opt-in,%20either%20for%0A//%20reporting%20malware%20or%20invalid%20certificat e%20chains.%20Does%20nothing%20if%20the%0A//%20interstitial%20type%20is%20not%20SAFEBROWSING%2 0or%20SSL%20or%20CAPTIVE_PORTAL.%0Afunction%20setu pExtendedReportingCheckbox()%20%7B%0A%20%20var%20i nterstitialType%20=%20loadTimeData.getString('type ');%0A%20%20if%20(interstitialType%20!=%20'SAFEBRO WSING'%20&&%20interstitialType%20!=%20'SSL'%20&&%0A%20%20%20%20%20%20interstitialType%20!=%20'CAPT IVE_PORTAL')%20%7B%0A%20%20%20%20return;%0A%20%20% 7D%0A%0A%20%20if%20(!loadTimeData.getBoolean(SB_DI SPLAY_CHECK_BOX))%20%7B%0A%20%20%20%20return;%0A%2 0%20%7D%0A%0A%0A%20%20$('opt-in-checkbox').checked%20=%20loadTimeData.getBoolean(S B_BOX_CHECKED);%0A%20%20$('extended-reporting-opt-in').classList.remove('hidden');%0A%0A%20%20var%20 className%20=%20interstitialType%20==%20'SAFEBROWS ING'%20%3F%0A%20%20%20%20%20%20%20%20%20%20%20%20% 20%20%20%20%20%20'safe-browsing-opt-in'%20%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%2 0%20%20%20%20%20'ssl-opt-in';%0A%20%20$('extended-reporting-opt-in').classList.add(className);%0A%0A%20%20$('body' ).classList.add('extended-reporting-has-checkbox');%0A%0A%20%20if%20($('whitepaper-link'))%20%7B%0A%20%20%20%20$('whitepaper-link').addEventListener('click',%20function(event) %20%7B%0A%20%20%20%20%20%20sendCommand(SecurityInt erstitialCommandId.CMD_OPEN_WHITEPAPER);%0A%20%20% 20%20%7D);%0A%20%20%7D%0A%0A%20%20$('opt-in-checkbox').addEventListener('click',%20function()% 20%7B%0A%20%20%20%20sendCommand($('opt-in-checkbox').checked%20%3F%0A%20%20%20%20%20%20%20%2 0%20%20%20%20%20%20%20%20SecurityInterstitialComma ndId.CMD_DO_REPORT%20%3A%0A%20%20%20%20%20%20%20%2 0%20%20%20%20%20%20%20%20SecurityInterstitialComma ndId.CMD_DONT_REPORT);%0A%20%20%7D);%0A%7D%0A%3C/script%3E%0A%20%20%3Cscript%3E//%20Copyright%202015%20The%20Chromium%20Authors.%20 All%20rights%20reserved.%0A//%20Use%20of%20this%20source%20code%20is%20governed %20by%20a%20BSD-style%20license%20that%20can%20be%0A//%20found%20in%20the%20LICENSE%20file.%0A%0Avar%20m obileNav%20=%20false;%0A%0A/**%0A%20*%20For%20small%20screen%20mobile%20the%20 navigation%20buttons%20are%20moved%0A%20*%20below% 20the%20advanced%20text.%0A%20*/%0Afunction%20onResize()%20%7B%0A%20%20var%20helpO uterBox%20=%20document.querySelector('%23details') ;%0A%20%20var%20mainContent%20=%20document.querySe lector('%23main-content');%0A%20%20var%20mediaQuery%20=%20'(min-width%3A%20240px)%20and%20(max-width%3A%20420px)%20and%20'%20+%0A%20%20%20%20%20% 20'(min-height%3A%20401px),%20'%20+%0A%20%20%20%20%20%20'( max-height%3A%20560px)%20and%20(min-height%3A%20240px)%20and%20'%20+%0A%20%20%20%20%20 %20'(min-width%3A%20421px)';%0A%0A%20%20var%20detailsHidden %20=%20helpOuterBox.classList.contains(HIDDEN_CLAS S);%0A%20%20var%20runnerContainer%20=%20document.q uerySelector('.runner-container');%0A%0A%20%20//%20Check%20for%20change%20in%20nav%20status.%0A%20 %20if%20(mobileNav%20!=%20window.matchMedia(mediaQ uery).matches)%20%7B%0A%20%20%20%20mobileNav%20=%2 0!mobileNav;%0A%0A%20%20%20%20//%20Handle%20showing%20the%20top%20content%20/%20details%20sections%20according%20to%20state.%0A %20%20%20%20if%20(mobileNav)%20%7B%0A%20%20%20%20% 20%20mainContent.classList.toggle(HIDDEN_CLASS,%20 !detailsHidden);%0A%20%20%20%20%20%20helpOuterBox. classList.toggle(HIDDEN_CLASS,%20detailsHidden);%0 A%20%20%20%20%20%20if%20(runnerContainer)%20%7B%0A %20%20%20%20%20%20%20%20runnerContainer.classList. toggle(HIDDEN_CLASS,%20!detailsHidden);%0A%20%20%2 0%20%20%20%7D%0A%20%20%20%20%7D%20else%20if%20(!de tailsHidden)%20%7B%0A%20%20%20%20%20%20//%20Non%20mobile%20nav%20with%20visible%20details.% 0A%20%20%20%20%20%20mainContent.classList.remove(H IDDEN_CLASS);%0A%20%20%20%20%20%20helpOuterBox.cla ssList.remove(HIDDEN_CLASS);%0A%20%20%20%20%20%20i f%20(runnerContainer)%20%7B%0A%20%20%20%20%20%20%2 0%20runnerContainer.classList.remove(HIDDEN_CLASS) ;%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20% 20%7D%0A%7D%0A%0Afunction%20setupMobileNav()%20%7B %0A%20%20window.addEventListener('resize',%20onRes ize);%0A%20%20onResize();%0A%7D%0A%0Adocument.addE ventListener('DOMContentLoaded',%20setupMobileNav) ;%0A%3C/script%3E%0A%20%20%3Cscript%3E//%20Copyright%202017%20The%20Chromium%20Authors.%20 All%20rights%20reserved.%0A//%20Use%20of%20this%20source%20code%20is%20governed %20by%20a%20BSD-style%20license%20that%20can%20be%0A//%20found%20in%20the%20LICENSE%20file.%0A%0A//%20This%20is%20the%20shared%20code%20for%20securit y%20interstitials.%20It%20is%20used%20for%20both%2 0SSL%0A//%20interstitials%20and%20Safe%20Browsing%20interst itials.%0A%0A//%20Should%20match%20security_interstitials%3A%3ASe curityInterstitialCommands%0A/**%20@enum%7C%20%7Bstring%7D%20*/%0Avar%20SecurityInterstitialCommandId%20=%20%7B%0 A%20%20CMD_DONT_PROCEED%3A%200,%0A%20%20CMD_PROCEE D%3A%201,%0A%20%20//%20Ways%20for%20user%20to%20get%20more%20informati on%0A%20%20CMD_SHOW_MORE_SECTION%3A%202,%0A%20%20C MD_OPEN_HELP_CENTER%3A%203,%0A%20%20CMD_OPEN_DIAGN OSTIC%3A%204,%0A%20%20//%20Primary%20button%20actions%0A%20%20CMD_RELOAD%3 A%205,%0A%20%20CMD_OPEN_DATE_SETTINGS%3A%206,%0A%2 0%20CMD_OPEN_LOGIN%3A%207,%0A%20%20//%20Safe%20Browsing%20Extended%20Reporting%0A%20%20 CMD_DO_REPORT%3A%208,%0A%20%20CMD_DONT_REPORT%3A%2 09,%0A%20%20CMD_OPEN_REPORTING_PRIVACY%3A%2010,%0A %20%20CMD_OPEN_WHITEPAPER%3A%2011,%0A%20%20//%20Report%20a%20phishing%20error.%0A%20%20CMD_REPO RT_PHISHING_ERROR%3A%2012,%0A%20%20//%20Misc%0A%20%20CMD_OPEN_CERTIFICATE_VIEWER%3A%201 3,%0A%20%20//%20Yandex.VPN%0A%20%20CMD_VPN_DISABLE_AND_RELOAD%3 A%2014,%0A%20%20//%20TLSGOST%0A%20%20CMD_GOST_DISABLE_HOST%3A%2015,% 0A%20%20CMD_GOST_LEAVE%3A%2016,%0A%7D;%0A%0Avar%20 HIDDEN_CLASS%20=%20'hidden';%0A%0A/**%0A%20*%20A%20convenience%20method%20for%20sendi ng%20commands%20to%20the%20parent%20page.%0A%20*%2 0@param%20%7Bstring%7D%20cmd%20%20The%20command%20 to%20send.%0A%20*/%0Afunction%20sendCommand(cmd)%20%7B%0A//%20%0A%20%20window.domAutomationController.send(cm d);%0A//%20%0A//%20%0A%7D%0A%0A/**%0A%20*%20Call%20this%20to%20stop%20clicks%20on% 20%3Ca%20href=%22%23%22%3E%20links%20from%20scroll ing%20to%20the%20top%20of%0A%20*%20the%20page%20(a nd%20possibly%20showing%20a%20%23%20in%20the%20lin k).%0A%20*/%0Afunction%20preventDefaultOnPoundLinkClicks()%20 %7B%0A%20%20document.addEventListener('click',%20f unction(e)%20%7B%0A%20%20%20%20var%20anchor%20=%20 findAncestor(/**%20@type%20%7BNode%7D%20*/%20(e.target),%20function(el)%20%7B%0A%20%20%20%20 %20%20return%20el.tagName%20==%20'A';%0A%20%20%20% 20%7D);%0A%20%20%20%20//%20Use%20getAttribute()%20to%20prevent%20URL%20nor malization.%0A%20%20%20%20if%20(anchor%20&&%20anchor.getAttribute('href')%20==%20'%23')%0A%20 %20%20%20%20%20e.preventDefault();%0A%20%20%7D);%0 A%7D%0A%3C/script%3E%0A%20%20%3Cscript%3E//%20Copyright%202014%20The%20Chromium%20Authors.%20 All%20rights%20reserved.%0A//%20Use%20of%20this%20source%20code%20is%20governed %20by%20a%20BSD-style%20license%20that%20can%20be%0A//%20found%20in%20the%20LICENSE%20file.%0A%0A//%20This%20is%20the%20shared%20code%20for%20the%20n ew%20(Chrome%2037)%20security%20interstitials.%20I t%20is%0A//%20used%20for%20both%20SSL%20interstitials%20and%2 0Safe%20Browsing%20interstitials.%0A%0Avar%20expan dedDetails%20=%20false;%0Avar%20keyPressState%20=% 200;%0A%0A/**%0A%20*%20This%20allows%20errors%20to%20be%20ski ppped%20by%20typing%20a%20secret%20phrase%20into%2 0the%20page.%0A%20*%20@param%20%7Bstring%7D%20e%20 The%20key%20that%20was%20just%20pressed.%0A%20*/%0Afunction%20handleKeypress(e)%20%7B%0A%20%20var% 20BYPASS_SEQUENCE%20=%20'badidea';%0A%20%20if%20(B YPASS_SEQUENCE.charCodeAt(keyPressState)%20==%20e. keyCode)%20%7B%0A%20%20%20%20keyPressState++;%0A%2 0%20%20%20if%20(keyPressState%20==%20BYPASS_SEQUEN CE.length)%20%7B%0A%20%20%20%20%20%20sendCommand(S ecurityInterstitialCommandId.CMD_PROCEED);%0A%20%2 0%20%20%20%20keyPressState%20=%200;%0A%20%20%20%20 %7D%0A%20%20%7D%20else%20%7B%0A%20%20%20%20keyPres sState%20=%200;%0A%20%20%7D%0A%7D%0A%0A/**%0A%20*%20This%20appends%20a%20piece%20of%20debu gging%20information%20to%20the%20end%20of%20the%20 warning.%0A%20*%20When%20complete,%20the%20caller% 20must%20also%20make%20the%20debugging%20div%0A%20 *%20(error-debugging-info)%20visible.%0A%20*%20@param%20%7Bstring%7D%20 title%20%20The%20name%20of%20this%20debugging%20fi eld.%0A%20*%20@param%20%7Bstring%7D%20value%20%20T he%20value%20of%20the%20debugging%20field.%0A%20*% 20@param%20%7Bboolean=%7D%20opt_longText%20%20Is%2 0value%20very%20long%20text.%0A%20*/%0Afunction%20appendDebuggingField(title,%20value, %20opt_longText%20=%20false)%20%7B%0A%20%20//%20The%20values%20input%20here%20are%20not%20trust ed.%20Never%20use%20innerHTML%20on%20these%0A%20%2 0//%20values!%0A%20%20var%20spanTitle%20=%20document. createElement('span');%0A%20%20spanTitle.classList .add('debugging-title');%0A%20%20spanTitle.innerText%20=%20title%2 0+%20'%3A%20';%0A%0A%20%20var%20spanValue%20=%20do cument.createElement(opt_longText%20%3F%20'textare a'%20%3A%20'span');%0A%20%20spanValue.classList.ad d('debugging-value');%0A%20%20spanValue.innerText%20=%20value;% 0A%0A%20%20var%20pElem%20=%20document.createElemen t('p');%0A%20%20pElem.classList.add('debugging-content');%0A%20%20pElem.appendChild(spanTitle);%0 A%20%20pElem.appendChild(spanValue);%0A%20%20$('er ror-debugging-info').appendChild(pElem);%0A%7D%0A%0Afunction%20t oggleDebuggingInfo()%20%7B%0A%20%20$('error-debugging-info').classList.toggle(HIDDEN_CLASS);%0A%7D%0A%0A function%20setupEvents()%20%7B%0A%20%20var%20overr idable%20=%20loadTimeData.getBoolean('overridable' );%0A%20%20var%20interstitialType%20=%20loadTimeDa ta.getString('type');%0A%20%20var%20ssl%20=%20inte rstitialType%20==%20'SSL';%0A%20%20var%20captivePo rtal%20=%20interstitialType%20==%20'CAPTIVE_PORTAL ';%0A%20%20var%20unknownCA%20=%20interstitialType% 20==%20'UNKNOWN_CA';%0A%20%20var%20vpn%20=%20inter stitialType%20==%20'VPN';%0A%20%20var%20tlsgost%20 =%20interstitialType%20==%20'TLSGOST';%0A%20%20var %20ie%20=%20interstitialType%20==%20'IE';%0A%20%20 var%20badClock%20=%20ssl%20&&%20loadTimeData.getBoolean('bad_clock');%0A%20%20v ar%20hidePrimaryButton%20=%20loadTimeData.getBoole an('hide_primary_button');%0A%0A%20%20if%20(ssl)%2 0%7B%0A%20%20%20%20$('body').classList.add(badCloc k%20%3F%20'bad-clock'%20%3A%20'ssl');%0A%20%20%20%20$('error-code').textContent%20=%20loadTimeData.getString('e rrorCode');%0A%20%20%20%20$('error-code').classList.remove(HIDDEN_CLASS);%0A%20%20%7D %20else%20if%20(captivePortal)%20%7B%0A%20%20%20%2 0$('body').classList.add('captive-portal');%0A%20%20%7D%20else%20if%20(unknownCA)%20 %7B%0A%20%20%20%20if%20(loadTimeData.getBoolean('k nown_app'))%20%7B%0A%20%20%20%20%20%20$('icon').cl assList.add('icon_type_protect');%0A%20%20%20%20%7 D%0A%20%20%20%20$('details-button').classList.add('hidden');%0A%20%20%20%20$( 'proceed-button').classList.remove('hidden');%0A%20%20%7D%2 0else%20if%20(vpn)%20%7B%0A%20%20%20%20$('icon').c lassList.add('icon_type_vpn');%0A%20%20%20%20$('de tails-button').classList.add('hidden');%0A%20%20%20%20$( 'proceed-button').classList.remove('hidden');%0A%20%20%7D%2 0else%20if%20(tlsgost)%20%7B%0A%20%20%20%20$('icon ').classList.add('icon_type_tlsgost');%0A%20%20%20 %20$('details-button').classList.add('hidden');%0A%20%20%20%20$( 'proceed-button').classList.remove('hidden');%0A%20%20%20%2 0$('extra-button').classList.remove('hidden');%0A%20%20%7D%2 0else%20if%20(ie)%20%7B%0A%20%20%20%20$('icon').cl assList.add('icon_type_ie');%0A%20%20%20%20$('deta ils-button').classList.add('hidden');%0A%20%20%20%20$( 'proceed-button').classList.remove('hidden');%0A%20%20%7D%2 0else%20%7B%0A%20%20%20%20$('body').classList.add( 'safe-browsing');%0A%20%20%7D%0A%0A%20%20$('icon').class List.add('icon');%0A%0A%20%20if%20(hidePrimaryButt on)%20%7B%0A%20%20%20%20$('primary-button').classList.add('hidden');%0A%20%20%7D%20el se%20%7B%0A%20%20%20%20$('primary-button').addEventListener('click',%20function()%20 %7B%0A%20%20%20%20%20%20switch%20(interstitialType )%20%7B%0A%20%20%20%20%20%20%20%20case%20'CAPTIVE_ PORTAL'%3A%0A%20%20%20%20%20%20%20%20%20%20sendCom mand(SecurityInterstitialCommandId.CMD_OPEN_LOGIN) ;%0A%20%20%20%20%20%20%20%20%20%20break;%0A%0A%20% 20%20%20%20%20%20%20case%20'SSL'%3A%0A%20%20%20%20 %20%20%20%20%20%20if%20(badClock)%0A%20%20%20%20%2 0%20%20%20%20%20%20%20sendCommand(SecurityIntersti tialCommandId.CMD_OPEN_DATE_SETTINGS);%0A%20%20%20 %20%20%20%20%20%20%20else%20if%20(overridable)%0A% 20%20%20%20%20%20%20%20%20%20%20%20sendCommand(Sec urityInterstitialCommandId.CMD_DONT_PROCEED);%0A%2 0%20%20%20%20%20%20%20%20%20else%0A%20%20%20%20%20 %20%20%20%20%20%20%20sendCommand(SecurityInterstit ialCommandId.CMD_RELOAD);%0A%20%20%20%20%20%20%20% 20%20%20break;%0A%0A%20%20%20%20%20%20%20%20case%2 0'SAFEBROWSING'%3A%0A%20%20%20%20%20%20%20%20%20%2 0sendCommand(SecurityInterstitialCommandId.CMD_DON T_PROCEED);%0A%20%20%20%20%20%20%20%20%20%20break; %0A%0A%20%20%20%20%20%20%20%20case%20'UNKNOWN_CA'% 3A%0A%20%20%20%20%20%20%20%20%20%20sendCommand(Sec urityInterstitialCommandId.CMD_DONT_PROCEED);%0A%2 0%20%20%20%20%20%20%20%20%20break;%0A%0A%20%20%20% 20%20%20%20%20case%20'VPN'%3A%0A%20%20%20%20%20%20 %20%20%20%20sendCommand(SecurityInterstitialComman dId.CMD_RELOAD);%0A%20%20%20%20%20%20%20%20%20%20b reak;%0A%0A%20%20%20%20%20%20%20%20case%20'TLSGOST '%3A%0A%20%20%20%20%20%20%20%20%20%20sendCommand(S ecurityInterstitialCommandId.CMD_RELOAD);%0A%20%20 %20%20%20%20%20%20%20%20break;%0A%0A%20%20%20%20%2 0%20%20%20case%20'IE'%3A%0A%20%20%20%20%20%20%20%2 0%20%20sendCommand(SecurityInterstitialCommandId.C MD_DONT_PROCEED);%0A%20%20%20%20%20%20%20%20%20%20 break;%0A%0A%20%20%20%20%20%20%20%20default%3A%0A% 20%20%20%20%20%20%20%20%20%20throw%20'Invalid%20in terstitial%20type';%0A%20%20%20%20%20%20%7D%0A%20% 20%20%20%7D);%0A%20%20%7D%0A%0A%20%20if%20(overrid able)%20%7B%0A%20%20%20%20//%20Captive%20portal%20page%20isn't%20overridable.% 0A%20%20%20%20$('proceed-link').addEventListener('click',%20function(event) %20%7B%0A%20%20%20%20%20%20sendCommand(SecurityInt erstitialCommandId.CMD_PROCEED);%0A%20%20%20%20%7D );%0A%20%20%7D%20else%20if%20(!ssl)%20%7B%0A%20%20 %20%20$('final-paragraph').classList.add(HIDDEN_CLASS);%0A%20%20% 7D%0A%0A%20%20if%20(ssl%20&&%20overridable)%20%7B%0A%20%20%20%20$('proceed-link').classList.add('small-link');%0A%20%20%7D%0A%0A%20%20if%20($('diagnostic-link'))%20%7B%0A%20%20%20%20$('diagnostic-link').addEventListener('click',%20function(event) %20%7B%0A%20%20%20%20%20%20sendCommand(SecurityInt erstitialCommandId.CMD_OPEN_DIAGNOSTIC);%0A%20%20% 20%20%7D);%0A%20%20%7D%0A%0A%20%20if%20($('learn-more-link'))%20%7B%0A%20%20%20%20$('learn-more-link').addEventListener('click',%20function(event) %20%7B%0A%20%20%20%20%20%20sendCommand(SecurityInt erstitialCommandId.CMD_OPEN_HELP_CENTER);%0A%20%20 %20%20%7D);%0A%20%20%7D%0A%0A%20%20if%20(unknownCA )%20%7B%0A%20%20%20%20$('proceed-button').addEventListener('click',%20function(even t)%20%7B%0A%20%20%20%20%20%20sendCommand(SecurityI nterstitialCommandId.CMD_PROCEED);%0A%20%20%20%20% 7D);%0A%20%20%7D%0A%0A%20%20if%20(ie)%20%7B%0A%20% 20%20%20$('proceed-button').classList.add('button_theme_left');%0A%20 %20%20%20$('proceed-button').addEventListener('click',%20function(even t)%20%7B%0A%20%20%20%20%20%20sendCommand(SecurityI nterstitialCommandId.CMD_PROCEED);%0A%20%20%20%20% 7D);%0A%20%20%7D%0A%0A%20%20if%20(vpn)%20%7B%0A%20 %20%20%20$('proceed-button').addEventListener('click',%20function(even t)%20%7B%0A%20%20%20%20%20%20sendCommand(SecurityI nterstitialCommandId.CMD_VPN_DISABLE_AND_RELOAD);% 0A%20%20%20%20%7D);%0A%20%20%7D%0A%0A%20%20if%20(t lsgost)%20%7B%0A%20%20%20%20$('proceed-button').addEventListener('click',%20function(even t)%20%7B%0A%20%20%20%20%20%20sendCommand(SecurityI nterstitialCommandId.CMD_GOST_LEAVE);%0A%20%20%20% 20%7D);%0A%20%20%20%20$('extra-button').addEventListener('click',%20function(even t)%20%7B%0A%20%20%20%20%20%20sendCommand(SecurityI nterstitialCommandId.CMD_GOST_DISABLE_HOST);%0A%20 %20%20%20%7D);%0A%20%20%7D%0A%0A%20%20if%20($('cer t-link'))%20%7B%0A%20%20%20%20$('cert-link').addEventListener('click',%20function()%20%7 B%0A%20%20%20%20%20%20sendCommand(SecurityIntersti tialCommandId.CMD_OPEN_CERTIFICATE_VIEWER);%0A%20% 20%20%20%7D);%0A%20%20%7D%0A%0A%20%20if%20(captive Portal)%20%7B%0A%20%20%20%20//%20Captive%20portal%20page%20doesn't%20have%20deta ils%20button.%0A%20%20%20%20$('details-button').classList.add('hidden');%0A%20%20%7D%20el se%20%7B%0A%20%20%20%20$('details-button').addEventListener('click',%20function(even t)%20%7B%0A%20%20%20%20%20%20var%20hiddenDetails%2 0=%20$('details').classList.toggle(HIDDEN_CLASS);% 0A%0A%20%20%20%20%20%20if%20(mobileNav)%20%7B%0A%2 0%20%20%20%20%20%20%20//%20Details%20appear%20over%20the%20main%20content% 20on%20small%20screens.%0A%20%20%20%20%20%20%20%20 $('main-content').classList.toggle(HIDDEN_CLASS,%20!hidden Details);%0A%20%20%20%20%20%20%7D%20else%20%7B%0A% 20%20%20%20%20%20%20%20$('main-content').classList.remove(HIDDEN_CLASS);%0A%20%20 %20%20%20%20%7D%0A%0A%20%20%20%20%20%20$('details-button').innerText%20=%20hiddenDetails%20%3F%0A%20 %20%20%20%20%20%20%20%20%20loadTimeData.getString( 'openDetails')%20%3A%0A%20%20%20%20%20%20%20%20%20 %20loadTimeData.getString('closeDetails');%0A%20%2 0%20%20%20%20if%20(!expandedDetails)%20%7B%0A%20%2 0%20%20%20%20%20%20//%20Record%20a%20histogram%20entry%20only%20the%20f irst%20time%20that%20details%20is%20opened.%0A%20% 20%20%20%20%20%20%20sendCommand(SecurityInterstiti alCommandId.CMD_SHOW_MORE_SECTION);%0A%20%20%20%20 %20%20%20%20expandedDetails%20=%20true;%0A%20%20%2 0%20%20%20%7D%0A%20%20%20%20%7D);%0A%20%20%7D%0A%0 A%20%20if%20($('report-error-link'))%20%7B%0A%20%20%20%20$('report-error-link').addEventListener('click',%20function(event) %20%7B%0A%20%20%20%20%20%20sendCommand(SecurityInt erstitialCommandId.CMD_REPORT_PHISHING_ERROR);%0A% 20%20%20%20%7D);%0A%20%20%7D%0A%0A%20%20preventDef aultOnPoundLinkClicks();%0A%20%20setupExtendedRepo rtingCheckbox();%0A%20%20setupSSLDebuggingInfo();% 0A%20%20document.addEventListener('keypress',%20ha ndleKeypress);%0A%7D%0A%0Adocument.addEventListene r('DOMContentLoaded',%20setupEvents);%0A%3C/script%3E%0A%20%20%3Cscript%3E//%20Copyright%202014%20Yandex%20LLC.%20All%20rights %20reserved.%0A//%20Author%3A%20Ilya%20Akhmadullin%20%3Crafoex@yand ex-team.ru%3E%0A//%20Author%3A%20Pavel%20Politov%20%3Cppolitov@yande x-team.ru%3E%0A%0A(function()%20%7B%0A%20%20'use%20s trict';%0A%0A%20%20document.addEventListener('DOMC ontentLoaded',%20ready);%0A%0A%20%20function%20upd ateDetails()%20%7B%0A%20%20%20%20let%20details%20= %20$('details');%0A%20%20%20%20let%20detailsHidden %20=%20details.classList.contains('hidden');%0A%20 %20%20%20$('details-button').classList.toggle('button_arrow_up',%20!de tailsHidden);%0A%20%20%20%20$('details-button').classList.toggle('button_arrow_down',%20d etailsHidden);%0A%0A%20%20%20%20if%20(detailsHidde n)%20%7B%0A%20%20%20%20%20%20details.style.marginT op%20=%20(-details.offsetHeight)%20+%20'px';%0A%20%20%20%20%2 0%20if%20(!details.classList.contains('measuring') )%20%7B%0A%20%20%20%20%20%20%20%20details.addEvent Listener('transitionend',%20()%20=%3E%20%7B%0A%20% 20%20%20%20%20%20%20%20%20if%20(details.classList. contains('hidden'))%20%7B%0A%20%20%20%20%20%20%20% 20%20%20%20%20details.classList.add('measuring');% 0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20 %20%20%20%20%7D,%20%7Bonce%3A%20true%7D);%0A%20%20 %20%20%20%20%7D%0A%20%20%20%20%7D%20else%20%7B%0A% 20%20%20%20%20%20details.style.marginTop%20=%20(-details.offsetHeight)%20+%20'px';%0A%20%20%20%20%2 0%20details.classList.remove('measuring');%0A%20%2 0%20%20%20%20details.style.marginTop%20=%200;%0A%2 0%20%20%20%7D%0A%20%20%7D%0A%0A%20%20function%20re ady()%20%7B%0A%20%20%20%20updateDetails();%0A%20%2 0%20%20$('debugging').addEventListener('click',%20 handleDebuggingClick);%0A%20%20%20%20$('details-button').addEventListener('click',%20updateDetails );%0A%20%20%7D%0A%0A%20%20function%20handleDebuggi ngClick(event)%20%7B%0A%20%20%20%20let%20target%20 =%20event.target;%0A%20%20%20%20if%20(target.nodeN ame%20===%20'TEXTAREA'%20&&%0A%20%20%20%20%20%20%20%20target.classList.contai ns('debugging-value'))%20%7B%0A%20%20%20%20%20%20target.select() ;%0A%20%20%20%20%7D%0A%20%20%7D%0A%7D)();%0A%3C/script%3E%0A%3C/head%3E%0A%3Cbody%20id=%22body%22%3E%0A%20%20%3Cdi v%20class=%22interstitial-wrapper%22%3E%0A%20%20%20%20%3Cdiv%20id=%22main-content%22%3E%0A%20%20%20%20%20%20%3Cdiv%20id=%22i con%22%3E%3C/div%3E%0A%20%20%20%20%20%20%3Cdiv%20id=%22main-message%22%3E%0A%20%20%20%20%20%20%20%20%3Ch1%3E%D 0%9D%D0%B5%D0%B2%D0%BE%D0%B7%D0%BC%D0%BE%D0%B6%D0% BD%D0%BE%20%D1%83%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0 %B2%D0%B8%D1%82%D1%8C%20%D0%B1%D0%B5%D0%B7%D0%BE%D 0%BF%D0%B0%D1%81%D0%BD%D0%BE%D0%B5%20%D1%81%D0%BE% D0%B5%D0%B4%D0%B8%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5%3C/h1%3E%0A%20%20%20%20%20%20%20%20%3Cp%3E%D0%97%D0%B B%D0%BE%D1%83%D0%BC%D1%8B%D1%88%D0%BB%D0%B5%D0%BD% D0%BD%D0%B8%D0%BA%D0%B8%20%D0%BC%D0%BE%D0%B3%D1%83 %D1%82%20%D0%BF%D1%8B%D1%82%D0%B0%D1%82%D1%8C%D1%8 1%D1%8F%20%D0%BF%D0%BE%D1%85%D0%B8%D1%82%D0%B8%D1% 82%D1%8C%20%D0%B2%D0%B0%D1%88%D0%B8%20%D0%B4%D0%B0 %D0%BD%D0%BD%D1%8B%D0%B5%20%D1%81%C2%A0%D1%81%D0%B 0%D0%B9%D1%82%D0%B0%20%3Cstrong%3Eowencloud.ru%3C/strong%3E%20(%D0%BD%D0%B0%D0%BF%D1%80%D0%B8%D0%BC% D0%B5%D1%80,%20%D0%BF%D0%B0%D1%80%D0%BE%D0%BB%D0%B 8,%20%D1%81%D0%BE%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0 %B8%D1%8F%20%D0%B8%D0%BB%D0%B8%C2%A0%D0%BD%D0%BE%D 0%BC%D0%B5%D1%80%D0%B0%20%D0%B1%D0%B0%D0%BD%D0%BA% D0%BE%D0%B2%D1%81%D0%BA%D0%B8%D1%85%20%D0%BA%D0%B0 %D1%80%D1%82).%20%3Ca%20href=%22%23%22%20id=%22lea rn-more-link%22%3E%D0%9F%D0%BE%D0%B4%D1%80%D0%BE%D0%B1%D0% BD%D0%B5%D0%B5%3C/a%3E%3C/p%3E%0A%20%20%20%20%20%20%20%20%3Cdiv%20id=%22debu gging%22%3E%0A%20%20%20%20%20%20%20%20%20%20%3Cdiv %20id=%22error-code%22%20class=%22error-code%22%3E%3C/div%3E%0A%20%20%20%20%20%20%20%20%20%20%3Cdiv%20id =%22error-debugging-info%22%20class=%22hidden%22%3E%3C/div%3E%0A%20%20%20%20%20%20%20%20%3C/div%3E%0A%20%20%20%20%20%20%3C/div%3E%0A%20%20%20%20%20%20%3Cdiv%20id=%22extended-reporting-opt-in%22%20class=%22hidden%22%3E%0A%20%20%20%20%20%20 %20%20%3Clabel%3E%0A%20%20%20%20%20%20%20%20%20%20 %3Cdiv%20class=%22checkboxes%22%3E%0A%20%20%20%20% 20%20%20%20%20%20%20%20%3Cinput%20type=%22checkbox %22%20id=%22opt-in-checkbox%22%3E%0A%20%20%20%20%20%20%20%20%20%20%20 %20%3Cspan%20class=%22checkbox%22%3E%3C/span%3E%0A%20%20%20%20%20%20%20%20%20%20%3C/div%3E%0A%20%20%20%20%20%20%20%20%20%20%3Cspan%20i d=%22opt-in-label%22%3E%3C/span%3E%0A%20%20%20%20%20%20%20%20%3C/label%3E%0A%20%20%20%20%20%20%3C/div%3E%0A%20%20%20%20%20%20%3Cdiv%20class=%22nav-wrapper%22%3E%0A%20%20%20%20%20%20%20%20%3Cbutton% 20id=%22primary-button%22%20class=%22button%20button_theme_action% 22%3E%0A%20%20%20%20%20%20%20%20%20%20%3Cspan%20cl ass=%22button__text%22%3E%D0%92%D0%B5%D1%80%D0%BD% D1%83%D1%82%D1%8C%D1%81%D1%8F%3C/span%3E%0A%20%20%20%20%20%20%20%20%3C/button%3E%0A%20%20%20%20%20%20%20%20%3Cbutton%20id =%22details-button%22%20class=%22small-link%20button%20button_theme_normal%20button_arrow _down%22%3E%0A%20%20%20%20%20%20%20%20%20%20%D0%9F %D0%BE%D0%B4%D1%80%D0%BE%D0%B1%D0%BD%D0%BE%D1%81%D 1%82%D0%B8%0A%20%20%20%20%20%20%20%20%3C/button%3E%0A%20%20%20%20%20%20%20%20%3Cbutton%20id =%22proceed-button%22%20class=%22button%20button_theme_normal% 20hidden%22%3E%0A%20%20%20%20%20%20%20%20%20%20%0A %20%20%20%20%20%20%20%20%3C/button%3E%0A%20%20%20%20%20%20%20%20%3Cbutton%20id =%22extra-button%22%20class=%22button%20button_theme_normal% 20hidden%22%3E%0A%20%20%20%20%20%20%20%20%20%20%0A %20%20%20%20%20%20%20%20%3C/button%3E%0A%20%20%20%20%20%20%3C/div%3E%0A%20%20%20%20%3C/div%3E%0A%20%20%20%20%3Cdiv%20id=%22details%22%20c lass=%22hidden%20measuring%22%3E%0A%20%20%20%20%20 %20%3Cp%3E%D0%A1%D0%B5%D1%80%D0%B2%D0%B5%D1%80%20% D0%BD%D0%B5%C2%A0%D0%BC%D0%BE%D0%B6%D0%B5%D1%82%20 %D0%BF%D0%BE%D0%B4%D1%82%D0%B2%D0%B5%D1%80%D0%B4%D 0%B8%D1%82%D1%8C%20%D1%81%D0%B2%D1%8F%D0%B7%D1%8C% 20%D1%81%C2%A0%D0%B4%D0%BE%D0%BC%D0%B5%D0%BD%D0%BE %D0%BC%C2%A0%3Cstrong%3Eowencloud.ru%3C/strong%3E.%20%D0%95%D0%B3%D0%BE%20%D1%81%D0%B5%D1% 80%D1%82%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%82%20%D0 %B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%B E%D1%81%D1%82%D0%B8%20%D0%B2%D1%8B%D0%BF%D1%83%D1% 89%D0%B5%D0%BD%20%D0%B4%D0%BB%D1%8F%C2%A0%D0%B4%D0 %BE%D0%BC%D0%B5%D0%BD%D0%B0%C2%A0%3Cstrong%3Eweb.o wencloud.ru%3C/strong%3E.%20%D0%92%D0%BE%D0%B7%D0%BC%D0%BE%D0%B6% D0%BD%D0%BE,%20%D0%BF%D1%80%D0%BE%D0%B1%D0%BB%D0%B 5%D0%BC%D0%B0%20%D1%81%D0%B2%D1%8F%D0%B7%D0%B0%D0% BD%D0%B0%20%D1%81%C2%A0%D0%BD%D0%B0%D1%81%D1%82%D1 %80%D0%BE%D0%B9%D0%BA%D0%B0%D0%BC%D0%B8%20%D1%81%D 0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%B0%20%D0%B8%D0%BB% D0%B8%C2%A0%D0%B4%D0%B5%D0%B9%D1%81%D1%82%D0%B2%D0 %B8%D1%8F%D0%BC%D0%B8%20%D0%B7%D0%BB%D0%BE%D1%83%D 0%BC%D1%8B%D1%88%D0%BB%D0%B5%D0%BD%D0%BD%D0%B8%D0% BA%D0%BE%D0%B2,%20%D0%BA%D0%BE%D1%82%D0%BE%D1%80%D 1%8B%D0%B5%20%D0%BF%D1%8B%D1%82%D0%B0%D1%8E%D1%82% D1%81%D1%8F%20%D0%BF%D0%B5%D1%80%D0%B5%D1%85%D0%B2 %D0%B0%D1%82%D0%B8%D1%82%D1%8C%20%D0%B4%D0%B0%D0%B D%D0%BD%D1%8B%D0%B5.%3C/p%3E%0A%20%20%20%20%20%20%3Cp%20id=%22final-paragraph%22%3E%3Ca%20href=%22%23%22%20id=%22proce ed-link%22%20class=%22small-link%20button%20button_theme_normal%20multiline%22 %3E%3Cspan%20class=%22button__text%22%3E%D0%A1%D0% B4%D0%B5%D0%BB%D0%B0%D1%82%D1%8C%20%D0%B8%D1%81%D0 %BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D0%B5%20%D 0%B4%D0%BB%D1%8F%C2%A0%D1%8D%D1%82%D0%BE%D0%B3%D0% BE%20%D1%81%D0%B0%D0%B9%D1%82%D0%B0%3C/span%3E%3C/a%3E%0A%20%20%20%20%20%20%20%20%3Cspan%20class=%22 warn-text%22%3E%D0%AD%D1%82%D0%BE%20%D0%BD%D0%B5%D0%B1% D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%3C/span%3E%3C/p%3E%0A%20%20%20%20%3C/div%3E%0A%20%20%20%20%3Cdiv%20class=%22protect%22% 3E%0A%20%20%20%20%20%20%3Cdiv%20class=%22protect__ wrapper%22%3E%D0%A2%D0%B5%D1%85%D0%BD%D0%BE%D0%BB% D0%BE%D0%B3%D0%B8%D1%8F%20%D0%B0%D0%BA%D1%82%D0%B8 %D0%B2%D0%BD%D0%BE%D0%B9%20%D0%B7%D0%B0%D1%89%D0%B 8%D1%82%D1%8B%20%3Cb%3EProtect%3C/b%3E%3C/div%3E%0A%20%20%20%20%3C/div%3E%0A%20%20%3C/div%3E%0A%3C/body%3E%0A%3C/html%3E%0A%3Cstyle%3E/*%20Copyright%202014%20The%20Chromium%20Authors.%2 0All%20rights%20reserved.%0A%20*%20Use%20of%20this %20source%20code%20is%20governed%20by%20a%20BSD-style%20license%20that%20can%20be%0A%20*%20found%2 0in%20the%20LICENSE%20file.%20*/%0A%0A/*%20This%20file%20is%20dynamically%20processed%20b y%20a%20C++%20data%20source%20handler%20to%20fill% 20in%0A%20*%20some%20per-platform/locale%20styles%20that%20dramatically%20alter%20th e%20page.%20This%20is%0A%20*%20done%20to%20reduce% 20flicker,%20as%20JS%20may%20not%20run%20before%20 the%20page%20is%20rendered.%0A%20*%0A%20*%20There% 20are%20two%20ways%20to%20include%20this%20stylesh eet%3A%0A%20*%201.%20via%20its%20chrome%3A//resources/%20URL%20in%20HTML,%20i.e.%3A%0A%20*%0A%20*%20%20% 20%3Clink%20rel=%22stylesheet%22%20href=%22chrome% 3A//resources/css/text_defaults.css%22%3E%0A%20*%0A%20*%202.%20via%2 0the%20webui%3A%3AAppendWebUICSSTextDefaults()%20m ethod%20to%20directly%20append%20it%0A%20*%20to%20 an%20HTML%20string.%0A%20*%20Otherwise%20its%20pla ceholders%20won't%20be%20expanded.%20*/%0A%0Ahtml%20%7B%0A%20%20direction%3A%20ltr;%0A%0A %20%20/*%20Specifies%20text%20color%20on%20the%20page.%20 */%0A%20%20--text-color%3A%20black;%0A%0A%20%20/*%20The%20same%20as%20%60--text-color%60%20but%20in%20rgb-format.%0A%20%20%20%20%20This%20var%20allows%20us% 20to%20refer%20to%20the%20color%20defined%20in%20% 60--text-color%60%20via%20css%0A%20%20%20%20%20function,%20 i.e.%20%60rgba()%60.%20*/%0A%20%20--text-color-rgb%3A%200,%200,%200;%0A%7D%0A%0Abody%20%7B%0A%20% 20font-family%3A%20Segoe%20UI,%20sans-serif;%0A%20%20font-size%3A%2075%25;%0A%0A%20%20--default-font-family%3A%20Segoe%20UI,%20sans-serif;%0A%7D%0A%0Abutton%20%7B%0A%20%20font-family%3A%20Segoe%20UI,%20sans-serif;%0A%7D%0A%3C/style%3E%3Cscript%3E//%20Copyright%20(c)%202012%20The%20Chromium%20Autho rs.%20All%20rights%20reserved.%0A//%20Use%20of%20this%20source%20code%20is%20governed %20by%20a%20BSD-style%20license%20that%20can%20be%0A//%20found%20in%20the%20LICENSE%20file.%0A%0A/**%0A%20*%20@fileoverview%20This%20file%20defines% 20a%20singleton%20which%20provides%20access%20to%2 0all%20data%0A%20*%20that%20is%20available%20as%20 soon%20as%20the%20page's%20resources%20are%20loade d%20(before%20DOM%0A%20*%20content%20has%20finishe d%20loading).%20This%20data%20includes%20both%20lo calized%20strings%20and%0A%20*%20any%20data%20that %20is%20important%20to%20have%20ready%20from%20a%2 0very%20early%20stage%20(e.g.%20things%0A%20*%20th at%20must%20be%20displayed%20right%20away).%0A%20* %0A%20*%20Note%20that%20loadTimeData%20is%20not%20 guaranteed%20to%20be%20consistent%20between%20page %0A%20*%20refreshes%20(https%3A//crbug.com/740629)%20and%20should%20not%20contain%20values%20 that%20might%0A%20*%20change%20if%20the%20page%20i s%20re-opened%20later.%0A%20*/%0A%0A/**%20@type%20%7B!LoadTimeData%7D%20*/%20var%20loadTimeData;%0A%0A//%20Expose%20this%20type%20globally%20as%20a%20temp orary%20work%20around%20until%0A//%20https%3A//github.com/google/closure-compiler/issues/544%20is%20fixed.%0A/**%20@constructor%20*/%0Afunction%20LoadTimeData()%7B%7D%0A%0A(function( )%20%7B%0A%20%20'use%20strict';%0A%0A%20%20LoadTim eData.prototype%20=%20%7B%0A%20%20%20%20/**%0A%20%20%20%20%20*%20Sets%20the%20backing%20obj ect.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Note% 20that%20there%20is%20no%20getter%20for%20%7Cdata_ %7C%20to%20discourage%20abuse%20of%20the%20form%3A %0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%20%20%20 %20var%20value%20=%20loadTimeData.data()%5B'key'%5 D;%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20@param% 20%7BObject%7D%20value%20The%20de-serialized%20page%20data.%0A%20%20%20%20%20*/%0A%20%20%20%20set%20data(value)%20%7B%0A%20%20%20 %20%20%20expect(!this.data_,%20'Re-setting%20data.');%0A%20%20%20%20%20%20this.data_% 20=%20value;%0A%20%20%20%20%7D,%0A%0A%20%20%20%20/**%0A%20%20%20%20%20*%20Returns%20a%20JsEvalContex t%20for%20%7Cdata_%7C.%0A%20%20%20%20%20*%20@retur ns%20%7BJsEvalContext%7D%0A%20%20%20%20%20*/%0A%20%20%20%20createJsEvalContext%3A%20function() %20%7B%0A%20%20%20%20%20%20return%20new%20JsEvalCo ntext(this.data_);%0A%20%20%20%20%7D,%0A%0A%20%20% 20%20/**%0A%20%20%20%20%20*%20@param%20%7Bstring%7D%20id %20An%20ID%20of%20a%20value%20that%20might%20exist .%0A%20%20%20%20%20*%20@return%20%7Bboolean%7D%20T rue%20if%20%7Cid%7C%20is%20a%20key%20in%20the%20di ctionary.%0A%20%20%20%20%20*/%0A%20%20%20%20valueExists%3A%20function(id)%20%7B %0A%20%20%20%20%20%20return%20id%20in%20this.data_ ;%0A%20%20%20%20%7D,%0A%0A%20%20%20%20/**%0A%20%20%20%20%20*%20Fetches%20a%20value,%20exp ecting%20that%20it%20exists.%0A%20%20%20%20%20*%20 @param%20%7Bstring%7D%20id%20The%20key%20that%20id entifies%20the%20desired%20value.%0A%20%20%20%20%2 0*%20@return%20%7B*%7D%20The%20corresponding%20val ue.%0A%20%20%20%20%20*/%0A%20%20%20%20getValue%3A%20function(id)%20%7B%0A %20%20%20%20%20%20expect(this.data_,%20'No%20data. %20Did%20you%20remember%20to%20include%20strings.j s%3F');%0A%20%20%20%20%20%20var%20value%20=%20this .data_%5Bid%5D;%0A%20%20%20%20%20%20expect(typeof% 20value%20!=%20'undefined',%20'Could%20not%20find% 20value%20for%20'%20+%20id);%0A%20%20%20%20%20%20r eturn%20value;%0A%20%20%20%20%7D,%0A%0A%20%20%20%2 0/**%0A%20%20%20%20%20*%20As%20above,%20but%20also%2 0makes%20sure%20that%20the%20value%20is%20a%20stri ng.%0A%20%20%20%20%20*%20@param%20%7Bstring%7D%20i d%20The%20key%20that%20identifies%20the%20desired% 20string.%0A%20%20%20%20%20*%20@return%20%7Bstring %7D%20The%20corresponding%20string%20value.%0A%20% 20%20%20%20*/%0A%20%20%20%20getString%3A%20function(id)%20%7B%0 A%20%20%20%20%20%20var%20value%20=%20this.getValue (id);%0A%20%20%20%20%20%20expectIsType(id,%20value ,%20'string');%0A%20%20%20%20%20%20return%20/**%20@type%20%7Bstring%7D%20*/%20(value);%0A%20%20%20%20%7D,%0A%0A%20%20%20%20/**%0A%20%20%20%20%20*%20Returns%20a%20formatted%20 localized%20string%20where%20$1%20to%20$9%20are%20 replaced%20by%20the%0A%20%20%20%20%20*%20second%20 to%20the%20tenth%20argument.%0A%20%20%20%20%20*%20 @param%20%7Bstring%7D%20id%20The%20ID%20of%20the%2 0string%20we%20want.%0A%20%20%20%20%20*%20@param%2 0%7B...(string%7Cnumber)%7D%20var_args%20The%20ext ra%20values%20to%20include%20in%20the%0A%20%20%20% 20%20*%20%20%20%20%20formatted%20output.%0A%20%20% 20%20%20*%20@return%20%7Bstring%7D%20The%20formatt ed%20string.%0A%20%20%20%20%20*/%0A%20%20%20%20getStringF%3A%20function(id,%20var_ args)%20%7B%0A%20%20%20%20%20%20var%20value%20=%20 this.getString(id);%0A%20%20%20%20%20%20if%20(!val ue)%0A%20%20%20%20%20%20%20%20return%20'';%0A%0A%2 0%20%20%20%20%20var%20args%20=%20Array.prototype.s lice.call(arguments);%0A%20%20%20%20%20%20args%5B0 %5D%20=%20value;%0A%20%20%20%20%20%20return%20this .substituteString.apply(this,%20args);%0A%20%20%20 %20%7D,%0A%0A%20%20%20%20/**%0A%20%20%20%20%20*%20Returns%20a%20formatted%20 localized%20string%20where%20$1%20to%20$9%20are%20 replaced%20by%20the%0A%20%20%20%20%20*%20second%20 to%20the%20tenth%20argument.%20Any%20standalone%20 $%20signs%20must%20be%20escaped%20as%0A%20%20%20%2 0%20*%20$$.%0A%20%20%20%20%20*%20@param%20%7Bstrin g%7D%20label%20The%20label%20to%20substitute%20thr ough.%0A%20%20%20%20%20*%20%20%20%20%20This%20is%2 0not%20an%20resource%20ID.%0A%20%20%20%20%20*%20@p aram%20%7B...(string%7Cnumber)%7D%20var_args%20The %20extra%20values%20to%20include%20in%20the%0A%20% 20%20%20%20*%20%20%20%20%20formatted%20output.%0A% 20%20%20%20%20*%20@return%20%7Bstring%7D%20The%20f ormatted%20string.%0A%20%20%20%20%20*/%0A%20%20%20%20substituteString%3A%20function(labe l,%20var_args)%20%7B%0A%20%20%20%20%20%20var%20var Args%20=%20arguments;%0A%20%20%20%20%20%20return%2 0label.replace(/%5C$(.%7C$%7C%5Cn)/g,%20function(m)%20%7B%0A%20%20%20%20%20%20%20%20a ssert(m.match(/%5C$%5B$1-9%5D/),%20'Unescaped%20$%20found%20in%20localized%20str ing.');%0A%20%20%20%20%20%20%20%20return%20m%20==% 20'$$'%20%3F%20'$'%20%3A%20varArgs%5Bm%5B1%5D%5D;% 0A%20%20%20%20%20%20%7D);%0A%20%20%20%20%7D,%0A%0A %20%20%20%20/**%0A%20%20%20%20%20*%20Returns%20a%20formatted%20 string%20where%20$1%20to%20$9%20are%20replaced%20b y%20the%20second%20to%0A%20%20%20%20%20*%20tenth%2 0argument,%20split%20apart%20into%20a%20list%20of% 20pieces%20describing%20how%20the%0A%20%20%20%20%2 0*%20substitution%20was%20performed.%20Any%20stand alone%20$%20signs%20must%20be%20escaped%20as%20$$. %0A%20%20%20%20%20*%20@param%20%7Bstring%7D%20labe l%20A%20localized%20string%20to%20substitute%20thr ough.%0A%20%20%20%20%20*%20%20%20%20%20This%20is%2 0not%20an%20resource%20ID.%0A%20%20%20%20%20*%20@p aram%20%7B...(string%7Cnumber)%7D%20var_args%20The %20extra%20values%20to%20include%20in%20the%0A%20% 20%20%20%20*%20%20%20%20%20formatted%20output.%0A% 20%20%20%20%20*%20@return%20%7B!Array%3C!%7Bvalue% 3A%20string,%20arg%3A%20(null%7Cstring)%7D%3E%7D%2 0The%20formatted%0A%20%20%20%20%20*%20%20%20%20%20 string%20pieces.%0A%20%20%20%20%20*/%0A%20%20%20%20getSubstitutedStringPieces%3A%20fun ction(label,%20var_args)%20%7B%0A%20%20%20%20%20%2 0var%20varArgs%20=%20arguments;%0A%20%20%20%20%20% 20//%20Split%20the%20string%20by%20separately%20matchi ng%20all%20occurrences%20of%20$1-9%20and%20of%0A%20%20%20%20%20%20//%20non%20$1-9%20pieces.%0A%20%20%20%20%20%20var%20pieces%20=%2 0(label.match(/(%5C$%5B1-9%5D)%7C((%5B%5E$%5D%7C%5C$(%5B%5E1-9%5D%7C$))+)/g)%20%7C%7C%0A%20%20%20%20%20%20%20%20%20%20%20%20 %20%20%20%20%20%20%20%20%5B%5D).map(function(p)%20 %7B%0A%20%20%20%20%20%20%20%20//%20Pieces%20that%20are%20not%20$1-9%20should%20be%20returned%20after%20replacing%20$ $%0A%20%20%20%20%20%20%20%20//%20with%20$.%0A%20%20%20%20%20%20%20%20if%20(!p.ma tch(/%5E%5C$%5B1-9%5D$/))%20%7B%0A%20%20%20%20%20%20%20%20%20%20assert(%0 A%20%20%20%20%20%20%20%20%20%20%20%20%20%20(p.matc h(/%5C$/g)%20%7C%7C%20%5B%5D).length%20%25%202%20==%200,%0 A%20%20%20%20%20%20%20%20%20%20%20%20%20%20'Unesca ped%20$%20found%20in%20localized%20string.');%0A%2 0%20%20%20%20%20%20%20%20%20return%20%7Bvalue%3A%2 0p.replace(/%5C$%5C$/g,%20'$'),%20arg%3A%20null%7D;%0A%20%20%20%20%20%2 0%20%20%7D%0A%0A%20%20%20%20%20%20%20%20//%20Otherwise,%20return%20the%20substitution%20valu e.%0A%20%20%20%20%20%20%20%20return%20%7Bvalue%3A% 20varArgs%5Bp%5B1%5D%5D,%20arg%3A%20p%7D;%0A%20%20 %20%20%20%20%7D);%0A%0A%20%20%20%20%20%20return%20 pieces;%0A%20%20%20%20%7D,%0A%0A%20%20%20%20/**%0A%20%20%20%20%20*%20As%20above,%20but%20also%2 0makes%20sure%20that%20the%20value%20is%20a%20bool ean.%0A%20%20%20%20%20*%20@param%20%7Bstring%7D%20 id%20The%20key%20that%20identifies%20the%20desired %20boolean.%0A%20%20%20%20%20*%20@return%20%7Bbool ean%7D%20The%20corresponding%20boolean%20value.%0A %20%20%20%20%20*/%0A%20%20%20%20getBoolean%3A%20function(id)%20%7B% 0A%20%20%20%20%20%20var%20value%20=%20this.getValu e(id);%0A%20%20%20%20%20%20expectIsType(id,%20valu e,%20'boolean');%0A%20%20%20%20%20%20return%20/**%20@type%20%7Bboolean%7D%20*/%20(value);%0A%20%20%20%20%7D,%0A%0A%20%20%20%20/**%0A%20%20%20%20%20*%20As%20above,%20but%20also%2 0makes%20sure%20that%20the%20value%20is%20an%20int eger.%0A%20%20%20%20%20*%20@param%20%7Bstring%7D%2 0id%20The%20key%20that%20identifies%20the%20desire d%20number.%0A%20%20%20%20%20*%20@return%20%7Bnumb er%7D%20The%20corresponding%20number%20value.%0A%2 0%20%20%20%20*/%0A%20%20%20%20getInteger%3A%20function(id)%20%7B% 0A%20%20%20%20%20%20var%20value%20=%20this.getValu e(id);%0A%20%20%20%20%20%20expectIsType(id,%20valu e,%20'number');%0A%20%20%20%20%20%20expect(value%2 0==%20Math.floor(value),%20'Number%20isn%5C't%20in teger%3A%20'%20+%20value);%0A%20%20%20%20%20%20ret urn%20/**%20@type%20%7Bnumber%7D%20*/%20(value);%0A%20%20%20%20%7D,%0A%0A%20%20%20%20/**%0A%20%20%20%20%20*%20Override%20values%20in%20l oadTimeData%20with%20the%20values%20found%20in%20% 7Creplacements%7C.%0A%20%20%20%20%20*%20@param%20% 7BObject%7D%20replacements%20The%20dictionary%20ob ject%20of%20keys%20to%20replace.%0A%20%20%20%20%20 */%0A%20%20%20%20overrideValues%3A%20function(replac ements)%20%7B%0A%20%20%20%20%20%20expect(%0A%20%20 %20%20%20%20%20%20%20%20typeof%20replacements%20== %20'object',%0A%20%20%20%20%20%20%20%20%20%20'Repl acements%20must%20be%20a%20dictionary%20object.'); %0A%20%20%20%20%20%20for%20(var%20key%20in%20repla cements)%20%7B%0A%20%20%20%20%20%20%20%20this.data _%5Bkey%5D%20=%20replacements%5Bkey%5D;%0A%20%20%2 0%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%7D;%0A%0A %20%20/**%0A%20%20%20*%20Checks%20condition,%20displays%2 0error%20message%20if%20expectation%20fails.%0A%20 %20%20*%20@param%20%7B*%7D%20condition%20The%20con dition%20to%20check%20for%20truthiness.%0A%20%20%2 0*%20@param%20%7Bstring%7D%20message%20The%20messa ge%20to%20display%20if%20the%20check%20fails.%0A%2 0%20%20*/%0A%20%20function%20expect(condition,%20message)%2 0%7B%0A%20%20%20%20if%20(!condition)%20%7B%0A%20%2 0%20%20%20%20console.error(%0A%20%20%20%20%20%20%2 0%20%20%20'Unexpected%20condition%20on%20'%20+%20d ocument.location.href%20+%20'%3A%20'%20+%20message );%0A%20%20%20%20%7D%0A%20%20%7D%0A%0A%20%20/**%0A%20%20%20*%20Checks%20that%20the%20given%20va lue%20has%20the%20given%20type.%0A%20%20%20*%20@pa ram%20%7Bstring%7D%20id%20The%20id%20of%20the%20va lue%20(only%20used%20for%20error%20message).%0A%20 %20%20*%20@param%20%7B*%7D%20value%20The%20value%2 0to%20check%20the%20type%20on.%0A%20%20%20*%20@par am%20%7Bstring%7D%20type%20The%20type%20we%20expec t%20%7Cvalue%7C%20to%20be.%0A%20%20%20*/%0A%20%20function%20expectIsType(id,%20value,%20ty pe)%20%7B%0A%20%20%20%20expect(%0A%20%20%20%20%20% 20%20%20typeof%20value%20==%20type,%20'%5B'%20+%20 value%20+%20'%5D%20('%20+%20id%20+%20')%20is%20not %20a%20'%20+%20type);%0A%20%20%7D%0A%0A%20%20expec t(!loadTimeData,%20'should%20only%20include%20this %20file%20once');%0A%20%20loadTimeData%20=%20new%2 0LoadTimeData;%0A%7D)();%0A%3C/script%3E%3Cscript%3EloadTimeData.data%20=%20%7B%2 2bad_clock%22%3Afalse,%22closeDetails%22%3A%22%D0% A1%D0%BA%D1%80%D1%8B%D1%82%D1%8C%20%D0%BF%D0%BE%D0 %B4%D1%80%D0%BE%D0%B1%D0%BD%D0%BE%D1%81%D1%82%D0%B 8%22,%22currentDate%22%3A%2226%20%D0%B4%D0%B5%D0%B A.%202017%20%D0%B3.%22,%22displaycheckbox%22%3Afal se,%22errorCode%22%3A%22net%3A%3AERR_CERT_COMMON_N AME_INVALID%22,%22expirationDate%22%3A%2223%20%D0% BC%D0%B0%D1%80.%202018%20%D0%B3.%22,%22explanation Paragraph%22%3A%22%D0%A1%D0%B5%D1%80%D0%B2%D0%B5%D 1%80%20%D0%BD%D0%B5%C2%A0%D0%BC%D0%BE%D0%B6%D0%B5% D1%82%20%D0%BF%D0%BE%D0%B4%D1%82%D0%B2%D0%B5%D1%80 %D0%B4%D0%B8%D1%82%D1%8C%20%D1%81%D0%B2%D1%8F%D0%B 7%D1%8C%20%D1%81%C2%A0%D0%B4%D0%BE%D0%BC%D0%B5%D0% BD%D0%BE%D0%BC%C2%A0%5Cu003Cstrong%3Eowencloud.ru% 5Cu003C/strong%3E.%20%D0%95%D0%B3%D0%BE%20%D1%81%D0%B5%D1% 80%D1%82%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%82%20%D0 %B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%B E%D1%81%D1%82%D0%B8%20%D0%B2%D1%8B%D0%BF%D1%83%D1% 89%D0%B5%D0%BD%20%D0%B4%D0%BB%D1%8F%C2%A0%D0%B4%D0 %BE%D0%BC%D0%B5%D0%BD%D0%B0%C2%A0%5Cu003Cstrong%3E web.owencloud.ru%5Cu003C/strong%3E.%20%D0%92%D0%BE%D0%B7%D0%BC%D0%BE%D0%B6% D0%BD%D0%BE,%20%D0%BF%D1%80%D0%BE%D0%B1%D0%BB%D0%B 5%D0%BC%D0%B0%20%D1%81%D0%B2%D1%8F%D0%B7%D0%B0%D0% BD%D0%B0%20%D1%81%C2%A0%D0%BD%D0%B0%D1%81%D1%82%D1 %80%D0%BE%D0%B9%D0%BA%D0%B0%D0%BC%D0%B8%20%D1%81%D 0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%B0%20%D0%B8%D0%BB% D0%B8%C2%A0%D0%B4%D0%B5%D0%B9%D1%81%D1%82%D0%B2%D0 %B8%D1%8F%D0%BC%D0%B8%20%D0%B7%D0%BB%D0%BE%D1%83%D 0%BC%D1%8B%D1%88%D0%BB%D0%B5%D0%BD%D0%BD%D0%B8%D0% BA%D0%BE%D0%B2,%20%D0%BA%D0%BE%D1%82%D0%BE%D1%80%D 1%8B%D0%B5%20%D0%BF%D1%8B%D1%82%D0%B0%D1%8E%D1%82% D1%81%D1%8F%20%D0%BF%D0%B5%D1%80%D0%B5%D1%85%D0%B2 %D0%B0%D1%82%D0%B8%D1%82%D1%8C%20%D0%B4%D0%B0%D0%B D%D0%BD%D1%8B%D0%B5.%22,%22extraButtonText%22%3A%2 2%22,%22finalParagraph%22%3A%22%5Cu003Ca%20href=%5 C%22%23%5C%22%20id=%5C%22proceed-link%5C%22%20class=%5C%22small-link%20button%20button_theme_normal%20multiline%5C %22%3E%5Cu003Cspan%20class=%5C%22button__text%5C%2 2%3E%D0%A1%D0%B4%D0%B5%D0%BB%D0%B0%D1%82%D1%8C%20% D0%B8%D1%81%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0 %B8%D0%B5%20%D0%B4%D0%BB%D1%8F%C2%A0%D1%8D%D1%82%D 0%BE%D0%B3%D0%BE%20%D1%81%D0%B0%D0%B9%D1%82%D0%B0% 5Cu003C/span%3E%5Cu003C/a%3E%5Cn%20%20%20%20%20%20%20%20%5Cu003Cspan%20cla ss=%5C%22warn-text%5C%22%3E%D0%AD%D1%82%D0%BE%20%D0%BD%D0%B5%D0% B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE %5Cu003C/span%3E%22,%22fontfamily%22%3A%22Segoe%20UI,%20san s-serif%22,%22fontsize%22%3A%2275%25%22,%22heading%2 2%3A%22%D0%9D%D0%B5%D0%B2%D0%BE%D0%B7%D0%BC%D0%BE% D0%B6%D0%BD%D0%BE%20%D1%83%D1%81%D1%82%D0%B0%D0%BD %D0%BE%D0%B2%D0%B8%D1%82%D1%8C%20%D0%B1%D0%B5%D0%B 7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D0%B5%20%D1% 81%D0%BE%D0%B5%D0%B4%D0%B8%D0%BD%D0%B5%D0%BD%D0%B8 %D0%B5%22,%22hide_primary_button%22%3Afalse,%22iss uer%22%3A%22Let's%20Encrypt%20Authority%20X3%22,%2 2language%22%3A%22ru%22,%22openDetails%22%3A%22%D0 %9F%D0%BE%D0%B4%D1%80%D0%BE%D0%B1%D0%BD%D0%BE%D1%8 1%D1%82%D0%B8%22,%22overridable%22%3Atrue,%22pem%2 2%3A%22-----BEGIN%20CERTIFICATE-----%5CnMIIFAzCCA+ugAwIBAgISAyG7OUFIl1gBJYZNo6i+EcoBMA 0GCSqGSIb3DQEBCwUA%5CnMEoxCzAJBgNVBAYTAlVTMRYwFAYD VQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQD%5CnExpMZXQncy BFbmNyeXB0IEF1dGhvcml0eSBYMzAeFw0xNzEyMjMxNDA1NDFa Fw0x%5CnODAzMjMxNDA1NDFaMBsxGTAXBgNVBAMTEHdlYi5vd2 VuY2xvdWQucnUwggEiMA0G%5CnCSqGSIb3DQEBAQUAA4IBDwAw ggEKAoIBAQCbkUUmjD5s8+Vw8MUijSG/0o5aJRBv%5CnfN51Gi9vdrxUjP7/kKHACgmMhrcwH/QLwZ8IZI+ajFgkx1OxsvObWrYjVLsLVP9t%5CneMXMFM30PKwD f5Y/lVGtw1O+pCe91hnjqm6diqeN9W7TSiBL1BUvqu1k+vwpBIY1%5 Cnyx882O+Tc8cCDfQCfNg9Uh4fuNOgJ/kfBr2ogg92kp/F4Sb1MfjUfA0MNFFOLrHI%5CnUO8dU05wZqc+G35aClfELyLCd mVXk89YOxZ2oYOWRuiTSHfk7qFe7Uq5UAkFbq4L%5Cn+w4x+wh 5o0VLVWGB5tDTvrb37RKOCks4dkvyT2Y4OuREW9TIdYHdBuavA gMBAAGj%5CnggIQMIICDDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0 lBBYwFAYIKwYBBQUHAwEGCCsG%5CnAQUFBwMCMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFIScpOshSx5FzErTwt0AqUuM%5CnckJ tMB8GA1UdIwQYMBaAFKhKamMEfd265tE5t6ZFZe/zqOyhMG8GCCsGAQUFBwEB%5CnBGMwYTAuBggrBgEFBQcwAYYia HR0cDovL29jc3AuaW50LXgzLmxldHNlbmNyeXB0%5CnLm9yZzA vBggrBgEFBQcwAoYjaHR0cDovL2NlcnQuaW50LXgzLmxldHNlb mNyeXB0%5CnLm9yZy8wGwYDVR0RBBQwEoIQd2ViLm93ZW5jbG9 1ZC5ydTCB/gYDVR0gBIH2MIHz%5CnMAgGBmeBDAECATCB5gYLKwYBBAGC3xM BAQEwgdYwJgYIKwYBBQUHAgEWGmh0dHA6%5CnLy9jcHMubGV0c 2VuY3J5cHQub3JnMIGrBggrBgEFBQcCAjCBngyBm1RoaXMgQ2V y%5CndGlmaWNhdGUgbWF5IG9ubHkgYmUgcmVsaWVkIHVwb24gY nkgUmVseWluZyBQYXJ0%5CnaWVzIGFuZCBvbmx5IGluIGFjY29 yZGFuY2Ugd2l0aCB0aGUgQ2VydGlmaWNhdGUg%5CnUG9saWN5I GZvdW5kIGF0IGh0dHBzOi8vbGV0c2VuY3J5cHQub3JnL3JlcG9 zaXRv%5CncnkvMA0GCSqGSIb3DQEBCwUAA4IBAQBnUJF1piGfn Q6DmAEewXIDTyoyNakLzHa9%5Cn24adGCm8RjXNeskgQWAtbzI g9DkjQOQOKdYbilHFZpEP1HtGXdz/VzGeL7X5wJiu%5CnJHxfmLfiSJNPHnxLWwlYG6LWZFtWC38Kpq OuZNud1nLpxZCuZz5BkRHfjwBw288J%5CncqekSSIhYWJqJPt9 EkrDIZ5vhhfPyrwFm8/WbczGHAMNmY7zbqgn9rmbABBPLtTg%5Cno/Tb78lhfaOk3pVUvGJSeWdSv6EsOuIByWN/03YO4jqC1ce9hKeRccgiUU1JtRn2%5CnhnorEuKgc+AulBO8Pl ciUlVKJ8mHbY2tAB0AmcP9DEb4rlPuYH4t%5Cn-----END%20CERTIFICATE-----%5Cn-----BEGIN%20CERTIFICATE-----%5CnMIIEkjCCA3qgAwIBAgIQCgFBQgAAAVOFc2oLheynCDANBg kqhkiG9w0BAQsFADA/%5CnMSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdC BDby4xFzAVBgNVBAMT%5CnDkRTVCBSb290IENBIFgzMB4XDTE2 MDMxNzE2NDA0NloXDTIxMDMxNzE2NDA0Nlow%5CnSjELMAkGA1 UEBhMCVVMxFjAUBgNVBAoTDUxldCdzIEVuY3J5cHQxIzAhBgNV BAMT%5CnGkxldCdzIEVuY3J5cHQgQXV0aG9yaXR5IFgzMIIBIj ANBgkqhkiG9w0BAQEFAAOC%5CnAQ8AMIIBCgKCAQEAnNMM8Frl Lke3cl03g7NoYzDq1zUmGSXhvb418XCSL7e4S0EF%5Cnq6meNQ hY7LEqxGiHC6PjdeTm86dicbp5gWAf15Gan/PQeGdxyGkOlZHP/uaZ6WA8%5CnSMx+yk13EiSdRxta67nsHjcAHJyse6cF6s5K671 B5TaYucv9bTyWaN8jKkKQDIZ0%5CnZ8h/pZq4UmEUEz9l6YKHy9v6Dlb2honzhT+Xhq+w3Brvaw2VFn3EK6 BlspkENnWA%5Cna6xK8xuQSXgvopZPKiAlKQTGdMDQMc2PMTiV FrqoM7hD8bEfwzB/onkxEz0tNvjj%5Cn/PIzark5McWvxI0NHWQWM6r6hCm21AvA2H3DkwIDAQABo4IBfTC CAXkwEgYDVR0T%5CnAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAYYwfwYIKwYBBQUHAQEEczBxMDI G%5CnCCsGAQUFBzABhiZodHRwOi8vaXNyZy50cnVzdGlkLm9jc 3AuaWRlbnRydXN0LmNv%5CnbTA7BggrBgEFBQcwAoYvaHR0cDo vL2FwcHMuaWRlbnRydXN0LmNvbS9yb290cy9k%5Cnc3Ryb290Y 2F4My5wN2MwHwYDVR0jBBgwFoAUxKexpHsscfrb4UuQdf/EFWCFiRAw%5CnVAYDVR0gBE0wSzAIBgZngQwBAgEwPwYLKwYBB AGC3xMBAQEwMDAuBggrBgEFBQcC%5CnARYiaHR0cDovL2Nwcy5 yb290LXgxLmxldHNlbmNyeXB0Lm9yZzA8BgNVHR8ENTAz%5CnM DGgL6AthitodHRwOi8vY3JsLmlkZW50cnVzdC5jb20vRFNUUk9 PVENBWDNDUkwu%5CnY3JsMB0GA1UdDgQWBBSoSmpjBH3duubRO bemRWXv86jsoTANBgkqhkiG9w0BAQsF%5CnAAOCAQEA3TPXEfN jWDjdGBX7CVW+dla5cEilaUcne8IkCJLxWh9KEik3JHRRHGJo% 5CnuM2VcGfl96S8TihRzZvoroed6ti6WqEBmtzw3Wodatg+VyO eph4EYpr/1wXKtx8/%5CnwApIvJSwtmVi4MFU5aMqrSDE6ea73Mj2tcMyo5jMd6jmeW UHK8so/joWUoHOUgwu%5CnX4Po1QYz+3dszkDqMp4fklxBwXRsW10KXzP MTZ+sOPAveyxindmjkW8lGy+QsRlG%5CnPfZ+G6Z6h7mjem0Y+ iWlkYcV4PIWL1iwBi8saCbGS5jN2p8M+X+Q7UNKEkROb3N6%5C nKOqkqm57TH2H3eDJAkSnh6/DNFu0Qg==%5Cn-----END%20CERTIFICATE-----%5Cn-----BEGIN%20CERTIFICATE-----%5CnMIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBg kqhkiG9w0BAQUFADA/%5CnMSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdC BDby4xFzAVBgNVBAMT%5CnDkRTVCBSb290IENBIFgzMB4XDTAw MDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVow%5CnPzEkMCIGA1 UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMRcwFQYD VQQD%5CnEw5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQ EBBQADggEPADCCAQoCggEB%5CnAN+v6ZdQCINXtMxiZfaQguzH 0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmTrE4O%5Cnrz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0 RoOEq%5CnOLl5CjH9UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLG iifSKOeDNoJjj4XLh7dIN9b%5CnxiqKqy69cK3FCxolkHRyxXt qqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw%5Cn7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40dutolucbY38EVAjqr2m7xPi71XAicPNaD%5C naeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNV%5CnHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH 62+FLkHX/xBVghYkQMA0GCSqG%5CnSIb3DQEBBQUAA4IBAQCjGiybFwBcqR 7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69%5CnikugdB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1c Emv8uXr%5CnAvHRAosZy5Q6XkjEGB5YGV8eAlrwDPGxrancWYa LbumR9YbK+rlmM6pZW87ipxZz%5CnR8srzJmwN0jP41ZL9c8PD HIyh8bwRLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5%5CnJDGFoqgCWjBH4d1QB7wCCZAA62RjYJs WvIjJEubSfZGL+T0yjWW06XyxV3bqxbYo%5CnOb8VZRzI9neWa gqNdwvYkQsEjgfbKbYK7p2CNTUQ%5Cn-----END%20CERTIFICATE-----%5Cn%22,%22primaryButtonText%22%3A%22%D0%92%D0%B5% D1%80%D0%BD%D1%83%D1%82%D1%8C%D1%81%D1%8F%22,%22pr imaryParagraph%22%3A%22%D0%97%D0%BB%D0%BE%D1%83%D0 %BC%D1%8B%D1%88%D0%BB%D0%B5%D0%BD%D0%BD%D0%B8%D0%B A%D0%B8%20%D0%BC%D0%BE%D0%B3%D1%83%D1%82%20%D0%BF% D1%8B%D1%82%D0%B0%D1%82%D1%8C%D1%81%D1%8F%20%D0%BF %D0%BE%D1%85%D0%B8%D1%82%D0%B8%D1%82%D1%8C%20%D0%B 2%D0%B0%D1%88%D0%B8%20%D0%B4%D0%B0%D0%BD%D0%BD%D1% 8B%D0%B5%20%D1%81%C2%A0%D1%81%D0%B0%D0%B9%D1%82%D0 %B0%20%5Cu003Cstrong%3Eowencloud.ru%5Cu003C/strong%3E%20(%D0%BD%D0%B0%D0%BF%D1%80%D0%B8%D0%BC% D0%B5%D1%80,%20%D0%BF%D0%B0%D1%80%D0%BE%D0%BB%D0%B 8,%20%D1%81%D0%BE%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0 %B8%D1%8F%20%D0%B8%D0%BB%D0%B8%C2%A0%D0%BD%D0%BE%D 0%BC%D0%B5%D1%80%D0%B0%20%D0%B1%D0%B0%D0%BD%D0%BA% D0%BE%D0%B2%D1%81%D0%BA%D0%B8%D1%85%20%D0%BA%D0%B0 %D1%80%D1%82).%20%5Cu003Ca%20href=%5C%22%23%5C%22% 20id=%5C%22learn-more-link%5C%22%3E%D0%9F%D0%BE%D0%B4%D1%80%D0%BE%D0%B1% D0%BD%D0%B5%D0%B5%5Cu003C/a%3E%22,%22proceedButtonText%22%3A%22%22,%22protec tLogoHtml%22%3A%22%D0%A2%D0%B5%D1%85%D0%BD%D0%BE%D 0%BB%D0%BE%D0%B3%D0%B8%D1%8F%20%D0%B0%D0%BA%D1%82% D0%B8%D0%B2%D0%BD%D0%BE%D0%B9%20%D0%B7%D0%B0%D1%89 %D0%B8%D1%82%D1%8B%20%5Cu003Cb%3EProtect%5Cu003C/b%3E%22,%22subject%22%3A%22web.owencloud.ru%22,%22 tabTitle%22%3A%22%D0%A3%D0%B3%D1%80%D0%BE%D0%B7%D0 %B0%20%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D 0%BD%D0%BE%D1%81%D1%82%D0%B8%22,%22textdirection%2 2%3A%22ltr%22,%22type%22%3A%22SSL%22%7D;%3C/script%3E%3Cscript%3E//%20Copyright%20(c)%202012%20The%20Chromium%20Autho rs.%20All%20rights%20reserved.%0A//%20Use%20of%20this%20source%20code%20is%20governed %20by%20a%20BSD-style%20license%20that%20can%20be%0A//%20found%20in%20the%20LICENSE%20file.%0A%0A%0A%0A//%20Note%3A%20vulcanize%20sometimes%20disables%20GR IT%20processing.%20If%20you're%20importing%20i18n% 0A//%20stuff%20with%20%3Clink%20rel=%22import%22%3E,%2 0you%20should%20probably%20be%20using%0A//%20html/i18n_template.html%20instead%20of%20this%20file.%0 A%0A//%20//%20Copyright%20(c)%202012%20The%20Chromium%20Autho rs.%20All%20rights%20reserved.%0A//%20Use%20of%20this%20source%20code%20is%20governed %20by%20a%20BSD-style%20license%20that%20can%20be%0A//%20found%20in%20the%20LICENSE%20file.%0A%0A/**%20@typedef%20%7BDocument%7CDocumentFragment%7CE lement%7D%20*/%0Avar%20ProcessingRoot;%0A%0A/**%0A%20*%20@fileoverview%20This%20is%20a%20simple %20template%20engine%20inspired%20by%20JsTemplates %0A%20*%20optimized%20for%20i18n.%0A%20*%0A%20*%20 It%20currently%20supports%20three%20handlers%3A%0A %20*%0A%20*%20%20%20*%20i18n-content%20which%20sets%20the%20textContent%20of%20 the%20element.%0A%20*%0A%20*%20%20%20%20%20%3Cspan %20i18n-content=%22myContent%22%3E%3C/span%3E%0A%20*%0A%20*%20%20%20*%20i18n-options%20which%20generates%20%3Coption%3E%20eleme nts%20for%20a%20%3Cselect%3E.%0A%20*%0A%20*%20%20% 20%20%20%3Cselect%20i18n-options=%22myOptionList%22%3E%3C/select%3E%0A%20*%0A%20*%20%20%20*%20i18n-values%20is%20a%20list%20of%20attribute-value%20or%20property-value%20pairs.%0A%20*%20%20%20%20%20Properties%20a re%20prefixed%20with%20a%20'.'%20and%20can%20conta in%20nested%20properties.%0A%20*%0A%20*%20%20%20%2 0%20%3Cspan%20i18n-values=%22title%3AmyTitle;.style.fontSize%3AfontSi ze%22%3E%3C/span%3E%0A%20*%0A%20*%20This%20file%20is%20a%20cop y%20of%20i18n_template.js,%20with%20minor%20tweaks %20to%20support%20using%0A%20*%20load_time_data.js .%20It%20should%20replace%20i18n_template.js%20eve ntually.%0A%20*/%0A%0Avar%20i18nTemplate%20=%20(function()%20%7B%0 A%20%20/**%0A%20%20%20*%20This%20provides%20the%20handlers %20for%20the%20templating%20engine.%20The%20key%20 is%20used%20as%0A%20%20%20*%20the%20attribute%20na me%20and%20the%20value%20is%20the%20function%20tha t%20gets%20called%20for%20every%0A%20%20%20*%20sin gle%20node%20that%20has%20this%20attribute.%0A%20% 20%20*%20@type%20%7B!Object%7D%0A%20%20%20*/%0A%20%20var%20handlers%20=%20%7B%0A%20%20%20%20/**%0A%20%20%20%20%20*%20This%20handler%20sets%20th e%20textContent%20of%20the%20element.%0A%20%20%20% 20%20*%20@param%20%7B!HTMLElement%7D%20element%20T he%20node%20to%20modify.%0A%20%20%20%20%20*%20@par am%20%7Bstring%7D%20key%20The%20name%20of%20the%20 value%20in%20%7Cdata%7C.%0A%20%20%20%20%20*%20@par am%20%7B!LoadTimeData%7D%20data%20The%20data%20sou rce%20to%20draw%20from.%0A%20%20%20%20%20*%20@para m%20%7B!Set%3CProcessingRoot%3E%7D%20visited%0A%20 %20%20%20%20*/%0A%20%20%20%20'i18n-content'%3A%20function(element,%20key,%20data,%20v isited)%20%7B%0A%20%20%20%20%20%20element.textCont ent%20=%20data.getString(key);%0A%20%20%20%20%7D,% 0A%0A%20%20%20%20/**%0A%20%20%20%20%20*%20This%20handler%20adds%20op tions%20to%20a%20%3Cselect%3E%20element.%0A%20%20% 20%20%20*%20@param%20%7B!HTMLElement%7D%20select%2 0The%20node%20to%20modify.%0A%20%20%20%20%20*%20@p aram%20%7Bstring%7D%20key%20The%20name%20of%20the% 20value%20in%20%7Cdata%7C.%20It%20should%0A%20%20% 20%20%20*%20%20%20%20%20identify%20an%20array%20of %20values%20to%20initialize%20an%20%3Coption%3E.%2 0Each%20value,%0A%20%20%20%20%20*%20%20%20%20%20if %20a%20pair,%20represents%20%5Bcontent,%20value%5D .%20Otherwise,%20it%20should%20be%20a%0A%20%20%20% 20%20*%20%20%20%20%20content%20string%20with%20no% 20value.%0A%20%20%20%20%20*%20@param%20%7B!LoadTim eData%7D%20data%20The%20data%20source%20to%20draw% 20from.%0A%20%20%20%20%20*%20@param%20%7B!Set%3CPr ocessingRoot%3E%7D%20visited%0A%20%20%20%20%20*/%0A%20%20%20%20'i18n-options'%3A%20function(select,%20key,%20data,%20vi sited)%20%7B%0A%20%20%20%20%20%20var%20options%20= %20data.getValue(key);%0A%20%20%20%20%20%20options .forEach(function(optionData)%20%7B%0A%20%20%20%20 %20%20%20%20var%20option%20=%20typeof%20optionData %20==%20'string'%20%3F%0A%20%20%20%20%20%20%20%20% 20%20%20%20new%20Option(optionData)%20%3A%0A%20%20 %20%20%20%20%20%20%20%20%20%20new%20Option(optionD ata%5B1%5D,%20optionData%5B0%5D);%0A%20%20%20%20%2 0%20%20%20select.appendChild(option);%0A%20%20%20% 20%20%20%7D);%0A%20%20%20%20%7D,%0A%0A%20%20%20%20/**%0A%20%20%20%20%20*%20This%20is%20used%20to%20se t%20HTML%20attributes%20and%20DOM%20properties.%20 The%20syntax%20is%3A%0A%20%20%20%20%20*%20%20%20at tributename%3Akey;%0A%20%20%20%20%20*%20%20%20.dom Property%3Akey;%0A%20%20%20%20%20*%20%20%20.nested .dom.property%3Akey%0A%20%20%20%20%20*%20@param%20 %7B!HTMLElement%7D%20element%20The%20node%20to%20m odify.%0A%20%20%20%20%20*%20@param%20%7Bstring%7D% 20attributeAndKeys%20The%20path%20of%20the%20attri bute%20to%20modify%0A%20%20%20%20%20*%20%20%20%20% 20followed%20by%20a%20colon,%20and%20the%20name%20 of%20the%20value%20in%20%7Cdata%7C.%0A%20%20%20%20 %20*%20%20%20%20%20Multiple%20attribute/key%20pairs%20may%20be%20separated%20by%20semicolo ns.%0A%20%20%20%20%20*%20@param%20%7B!LoadTimeData %7D%20data%20The%20data%20source%20to%20draw%20fro m.%0A%20%20%20%20%20*%20@param%20%7B!Set%3CProcess ingRoot%3E%7D%20visited%0A%20%20%20%20%20*/%0A%20%20%20%20'i18n-values'%3A%20function(element,%20attributeAndKeys, %20data,%20visited)%20%7B%0A%20%20%20%20%20%20var% 20parts%20=%20attributeAndKeys.replace(/%5Cs/g,%20'').split(/;/);%0A%20%20%20%20%20%20parts.forEach(function(part )%20%7B%0A%20%20%20%20%20%20%20%20if%20(!part)%0A% 20%20%20%20%20%20%20%20%20%20return;%0A%0A%20%20%2 0%20%20%20%20%20var%20attributeAndKeyPair%20=%20pa rt.match(/%5E(%5B%5E%3A%5D+)%3A(.+)$/);%0A%20%20%20%20%20%20%20%20if%20(!attributeAndKe yPair)%0A%20%20%20%20%20%20%20%20%20%20throw%20new %20Error('malformed%20i18n-values%3A%20'%20+%20attributeAndKeys);%0A%0A%20%20 %20%20%20%20%20%20var%20propName%20=%20attributeAn dKeyPair%5B1%5D;%0A%20%20%20%20%20%20%20%20var%20p ropExpr%20=%20attributeAndKeyPair%5B2%5D;%0A%0A%20 %20%20%20%20%20%20%20var%20value%20=%20data.getVal ue(propExpr);%0A%0A%20%20%20%20%20%20%20%20//%20Allow%20a%20property%20of%20the%20form%20'.foo. bar'%20to%20assign%20a%20value%20into%0A%20%20%20% 20%20%20%20%20//%20element.foo.bar.%0A%20%20%20%20%20%20%20%20if%2 0(propName%5B0%5D%20==%20'.')%20%7B%0A%20%20%20%20 %20%20%20%20%20%20var%20path%20=%20propName.slice( 1).split('.');%0A%20%20%20%20%20%20%20%20%20%20var %20targetObject%20=%20element;%0A%20%20%20%20%20%2 0%20%20%20%20while%20(targetObject%20&&%20path.length%20%3E%201)%20%7B%0A%20%20%20%20%20% 20%20%20%20%20%20%20targetObject%20=%20targetObjec t%5Bpath.shift()%5D;%0A%20%20%20%20%20%20%20%20%20 %20%7D%0A%20%20%20%20%20%20%20%20%20%20if%20(targe tObject)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20 %20targetObject%5Bpath%5D%20=%20value;%0A%20%20%20 %20%20%20%20%20%20%20%20%20//%20In%20case%20we%20set%20innerHTML%20(ignoring%20 others)%20we%20need%20to%20recursively%0A%20%20%20 %20%20%20%20%20%20%20%20%20//%20check%20the%20content.%0A%20%20%20%20%20%20%20% 20%20%20%20%20if%20(path%20==%20'innerHTML')%20%7B %0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20for%2 0(var%20i%20=%200;%20i%20%3C%20element.children.le ngth;%20++i)%20%7B%0A%20%20%20%20%20%20%20%20%20%2 0%20%20%20%20%20%20processWithoutCycles(element.ch ildren%5Bi%5D,%20data,%20visited,%20false);%0A%20% 20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20 %20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%2 0%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D% 20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20eleme nt.setAttribute(propName,%20/**%20@type%20%7Bstring%7D%20*/%20(value));%0A%20%20%20%20%20%20%20%20%7D%0A%20%2 0%20%20%20%20%7D);%0A%20%20%20%20%7D%0A%20%20%7D;% 0A%0A%20%20var%20prefixes%20=%20%5B''%5D;%0A%0A%20 %20//%20Only%20look%20through%20shadow%20DOM%20when%20i t's%20supported.%20As%20of%20April%202015,%20iOS%0 A%20%20//%20Chrome%20doesn't%20support%20shadow%20DOM.%0A%2 0%20if%20(Element.prototype.createShadowRoot)%0A%2 0%20%20%20prefixes.push('*%20/deep/%20');%0A%0A%20%20var%20attributeNames%20=%20Objec t.keys(handlers);%0A%20%20var%20selector%20=%20pre fixes%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20 %20%20%20%20%20%20%20.map(function(prefix)%20%7B%0 A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20% 20%20%20%20%20%20%20return%20prefix%20+%20'%5B'%20 +%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20% 20%20%20%20%20%20%20%20%20%20%20%20attributeNames. join('%5D,%20'%20+%20prefix%20+%20'%5B')%20+%20'%5 D';%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2 0%20%20%20%20%20%20%7D)%0A%20%20%20%20%20%20%20%20 %20%20%20%20%20%20%20%20%20%20%20%20%20.join(',%20 ');%0A%0A%20%20/**%0A%20%20%20*%20Processes%20a%20DOM%20tree%20usi ng%20a%20%7Cdata%7C%20source%20to%20populate%20tem plate%20values.%0A%20%20%20*%20@param%20%7B!Proces singRoot%7D%20root%20The%20root%20of%20the%20DOM%2 0tree%20to%20process.%0A%20%20%20*%20@param%20%7B! LoadTimeData%7D%20data%20The%20data%20to%20draw%20 from.%0A%20%20%20*/%0A%20%20function%20process(root,%20data)%20%7B%0A %20%20%20%20processWithoutCycles(root,%20data,%20n ew%20Set(),%20true);%0A%20%20%7D%0A%0A%20%20/**%0A%20%20%20*%20Internal%20process()%20method%20 that%20stops%20cycles%20while%20processing.%0A%20% 20%20*%20@param%20%7B!ProcessingRoot%7D%20root%0A% 20%20%20*%20@param%20%7B!LoadTimeData%7D%20data%0A %20%20%20*%20@param%20%7B!Set%3CProcessingRoot%3E% 7D%20visited%20Already%20visited%20roots.%0A%20%20 %20*%20@param%20%7Bboolean%7D%20mark%20Whether%20n odes%20should%20be%20marked%20processed.%0A%20%20% 20*/%0A%20%20function%20processWithoutCycles(root,%20d ata,%20visited,%20mark)%20%7B%0A%20%20%20%20if%20( visited.has(root))%20%7B%0A%20%20%20%20%20%20//%20Found%20a%20cycle.%20Stop%20it.%0A%20%20%20%20% 20%20return;%0A%20%20%20%20%7D%0A%0A%20%20%20%20//%20Mark%20the%20node%20as%20visited%20before%20rec ursing.%0A%20%20%20%20visited.add(root);%0A%0A%20% 20%20%20var%20importLinks%20=%20root.querySelector All('link%5Brel=import%5D');%0A%20%20%20%20for%20( var%20i%20=%200;%20i%20%3C%20importLinks.length;%2 0++i)%20%7B%0A%20%20%20%20%20%20var%20importLink%2 0=%20/**%20@type%20%7B!HTMLLinkElement%7D%20*/%20(importLinks%5Bi%5D);%0A%20%20%20%20%20%20if%20 (!importLink.import)%20%7B%0A%20%20%20%20%20%20%20 %20//%20Happens%20when%20a%20%3Clink%20rel=import%3E%20 is%20inside%20a%20%3Ctemplate%3E.%0A%20%20%20%20%2 0%20%20%20//%20TODO(dbeam)%3A%20should%20we%20log%20an%20error %20if%20we%20detect%20that%20here%3F%0A%20%20%20%2 0%20%20%20%20continue;%0A%20%20%20%20%20%20%7D%0A% 20%20%20%20%20%20processWithoutCycles(importLink.i mport,%20data,%20visited,%20mark);%0A%20%20%20%20% 7D%0A%0A%20%20%20%20var%20templates%20=%20root.que rySelectorAll('template');%0A%20%20%20%20for%20(va r%20i%20=%200;%20i%20%3C%20templates.length;%20++i )%20%7B%0A%20%20%20%20%20%20var%20template%20=%20/**%20@type%20%7BHTMLTemplateElement%7D%20*/%20(templates%5Bi%5D);%0A%20%20%20%20%20%20if%20(! template.content)%0A%20%20%20%20%20%20%20%20contin ue;%0A%20%20%20%20%20%20processWithoutCycles(templ ate.content,%20data,%20visited,%20mark);%0A%20%20% 20%20%7D%0A%0A%20%20%20%20var%20isElement%20=%20ro ot%20instanceof%20Element;%0A%20%20%20%20if%20(isE lement%20&&%20root.webkitMatchesSelector(selector))%0A%20%20% 20%20%20%20processElement(/**%20@type%20%7B!Element%7D%20*/%20(root),%20data,%20visited);%0A%0A%20%20%20%20va r%20elements%20=%20root.querySelectorAll(selector) ;%0A%20%20%20%20for%20(var%20i%20=%200;%20i%20%3C% 20elements.length;%20++i)%20%7B%0A%20%20%20%20%20% 20processElement(elements%5Bi%5D,%20data,%20visite d);%0A%20%20%20%20%7D%0A%0A%20%20%20%20if%20(mark) %20%7B%0A%20%20%20%20%20%20var%20processed%20=%20i sElement%20%3F%20%5Broot%5D%20%3A%20root.children; %0A%20%20%20%20%20%20if%20(processed)%20%7B%0A%20% 20%20%20%20%20%20%20for%20(var%20i%20=%200;%20i%20 %3C%20processed.length;%20++i)%20%7B%0A%20%20%20%2 0%20%20%20%20%20%20processed%5Bi%5D.setAttribute(' i18n-processed',%20'');%0A%20%20%20%20%20%20%20%20%7D%0 A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20% 7D%0A%0A%20%20/**%0A%20%20%20*%20Run%20through%20various%20%5Bi18 n-*%5D%20attributes%20and%20populate.%0A%20%20%20*%2 0@param%20%7B!Element%7D%20element%0A%20%20%20*%20 @param%20%7B!LoadTimeData%7D%20data%0A%20%20%20*%2 0@param%20%7B!Set%3CProcessingRoot%3E%7D%20visited %0A%20%20%20*/%0A%20%20function%20processElement(element,%20data ,%20visited)%20%7B%0A%20%20%20%20for%20(var%20i%20 =%200;%20i%20%3C%20attributeNames.length;%20i++)%2 0%7B%0A%20%20%20%20%20%20var%20name%20=%20attribut eNames%5Bi%5D;%0A%20%20%20%20%20%20var%20attribute %20=%20element.getAttribute(name);%0A%20%20%20%20% 20%20if%20(attribute%20!=%20null)%0A%20%20%20%20%2 0%20%20%20handlers%5Bname%5D(element,%20attribute, %20data,%20visited);%0A%20%20%20%20%7D%0A%20%20%7D %0A%0A%20%20return%20%7Bprocess%3A%20process%7D;%0 A%7D());%0A%0A%0A//%20//%20Copyright%202017%20The%20Chromium%20Authors.%20 All%20rights%20reserved.%0A//%20Use%20of%20this%20source%20code%20is%20governed %20by%20a%20BSD-style%20license%20that%20can%20be%0A//%20found%20in%20the%20LICENSE%20file.%0A%0Ai18nTem plate.process(document,%20loadTimeData);%0A%0A%3C/script%3E#)
net::ERR_CERT_COMMON_NAME_INVALID

приборист
26.12.2017, 09:32
Ваше соединение не защищено


Владелец owencloud.ru неправильно настроил свой веб-сайт. Чтобы защитить вашу информацию от кражи, Firefox не соединился с этим веб-сайтом.


Подробнее…


Отправка сообщений о подобных ошибках поможет Mozilla обнаружить и заблокировать вредоносные сайты


owencloud.ru использует недействительный сертификат безопасности.


Сертификат действителен только для web.owencloud.ru


Код ошибки: SSL_ERROR_BAD_CERT_DOMAIN

Какой бубен брать?

spa
26.12.2017, 09:58
Ребята в облаке не корректно работают события с переменными типа BOOL. Значение этих переменных в событиях всегда равно 0 независимо меняются они или просто постоянно равно 1

Бинкевич Игорь
26.12.2017, 14:51
Уважаемые специалисты «Овен», работа сервиса якобы была восстановлена, однако хотелось бы получить комментарии о характере проблем.
К чему быть готовым интеграторам?
Сегодняшний сбой имел факт потери данных…

Чили-Рома
26.12.2017, 15:13
Здравствуйте. Внесли изменения, теперь можно записывать и дробные.

Спасибо. Еще бы кнопку "ВЕРНУТЬ МАСШТАБ" вынести за пределы графика или подпись к точке измерения опустить под точку. 34823

ventilyator
26.12.2017, 23:33
Хотелось бы увидеть комментарии от специалистов "Овен" по поводу неработающего до сих пор (уже 23 часа) Сервиса.
Это не только потеря данных мониторинга, как высказались предыдущие ораторы, - это полная потеря дистанционного доступа к управлению объектом автоматизации.
Сразу возникает вопрос о надёжности работы с облачным сервисом, хотя до этого случая в течении 4-х месяцев никаких проблем не было.

Бинкевич Игорь
27.12.2017, 08:25
Проблемы с сервисом продолжаются, в чем дело?

dsyabitov
27.12.2017, 08:35
Спасибо. Еще бы кнопку "ВЕРНУТЬ МАСШТАБ" вынести за пределы графика или подпись к точке измерения опустить под точку. 34823

Занесем в пожелания о проработке на будущее.

dsyabitov
27.12.2017, 08:47
Хотелось бы увидеть комментарии от специалистов "Овен" по поводу неработающего до сих пор (уже 23 часа) Сервиса.
Это не только потеря данных мониторинга, как высказались предыдущие ораторы, - это полная потеря дистанционного доступа к управлению объектом автоматизации.
Сразу возникает вопрос о надёжности работы с облачным сервисом, хотя до этого случая в течении 4-х месяцев никаких проблем не было.

23 декабря 2017 истек срок действия SSL сертификатов, выданных для всех доменов третьего уровня owencloud.ru. Доменом третьего уровня является web.owencloud.ru, www.owencloud.ru, api.owencloud.ru. Сертификаты были обновлены в течении для и доступ как к API (для мобильных приложений), так и к просмотру через браузер (web.owencloud.ru) был восстановлен (23-го же декабря). Изначальная настройка web-сервера owencloud.ru подразумевала перенаправление c http://owencloud.ru на httpS://web.owencloud.ru и совершенно не была настроена с httpS://owencloud.ru на httpS://web.owencloud.ru. Причина, по которой у кого-то работал редирект с httpS://owencloud.ru - не ясна, ибо по всей логике работать она не должа. Для того, что-бы сработал редирект должно быть сперва установлено защищенное соединение с owencloud.ru, а потом должно быть выполнено перенаправление. Защищенное соединение к owencloud.ru не могло быть установлено, по причине отуствия сертификата на домены второго уровня, коим является owencloud.ru.
Проблемы с доступом к WEB-части никоим образом не сказывались на приеме данных от конечных устройств.

На данный момент по Вашему обращению создан сертификат на домены 2-го уровня и настроен корректный редирект.

dsyabitov
27.12.2017, 08:56
26.12.2017г. с 1:05:08 нет обмена "Облака" с прибором.
Настройки прибора в облаке работают.
В чём проблема?

Здравствуйте.

Проверьте баланс на sim-карте модема и опишите индикацию.

dsyabitov
27.12.2017, 08:58
Доброго дня. Подскажите, одному пользователю, можно-ли назначить следующие права:
на один прибор = "управляющий приборами", а на второй прибор только как зритель ?
т.е. нужно что бы, пользователь видел оба прибора, но управлять(добавлять/редактировать параметры) мог только одним из них.
Спасибо.

Здравствуйте.

Нет, такой кейс в данный момент не реализован. Возможно возьмем в работу в следующем году.

dsyabitov
27.12.2017, 09:01
Ребята в облаке не корректно работают события с переменными типа BOOL. Значение этих переменных в событиях всегда равно 0 независимо меняются они или просто постоянно равно 1

Здравствуйте. Скиньте пожалуйста скриншоты настройки события и настройки параметров прибора, учавствующих в событии.
Так-же прошу скинуть и подобные настройки, касающиеся предидущего Вашего сообщения с QF

dsyabitov
27.12.2017, 09:06
Проблемы с сервисом продолжаются, в чем дело?

Здравствуйте.

Какого рода проблемы у Вас сейчас воспроизводятся и какие данные были утеряны?

ventilyator
27.12.2017, 09:08
Здравствуйте.
Проверьте баланс на sim-карте модема и опишите индикацию.


Облако пишет, что прибор на связи! С балансом тоже всё хорошо - до 15.01.2018г. Если бы с балансом было бы плохо, то прибор - не на связи.
А вот к модему - надо ехать, он на реальном объекте.

Бинкевич Игорь
27.12.2017, 09:14
Ситуация следующая:
При включении ПМ210 начинается нормальный обмен данными с сервисом, затем включается ошибка работы с сервисом, спустя приблизительно две минуты ошибка сети оператора.
В течении ночи связь возобновлялась самостоятельно несколько раз, после передачи нескольких отчетов опять отваливается.

dsyabitov
27.12.2017, 09:18
Ситуация следующая:
При включении ПМ210 начинается нормальный обмен данными с сервисом, затем включается ошибка работы с сервисом, спустя приблизительно две минуты ошибка сети оператора.
В течении ночи связь возобновлялась самостоятельно несколько раз, после передачи нескольких отчетов опять отваливается.

Пришлите ID прибора в личку - посмотрим по логам.

dsyabitov
27.12.2017, 09:19
Здравствуйте.
Проверьте баланс на sim-карте модема и опишите индикацию.


Облако пишет, что прибор на связи! С балансом тоже всё хорошо - до 15.01.2018г. Если бы с балансом было бы плохо, то прибор - не на связи.
А вот к модему - надо ехать, он на реальном объекте.

Присылайте ID прибора в личку - будем смотреть логи.

Бинкевич Игорь
27.12.2017, 10:05
Произошло чудо, после замены штатной антенны ПМ210 на выносную, сбои прекратились, вышка оператора находится в пределах прямой видимости, на штатной антенне тоже полный уровень сигнала. Дефектная антенна?

Сергей Лысов
27.12.2017, 10:46
Дефектная антенна?
К сожалению, антенна АНТ-1, которая идёт в комплекте, не самая мощная. Для большинства задач её достаточно, но иногда приходится применять что-то помощнее.

e.filatov
27.12.2017, 10:56
Ситуация следующая:
При включении ПМ210 начинается нормальный обмен данными с сервисом, затем включается ошибка работы с сервисом, спустя приблизительно две минуты ошибка сети оператора.
В течении ночи связь возобновлялась самостоятельно несколько раз, после передачи нескольких отчетов опять отваливается.

Лучше уточнить у оператора о связи. Наши СИМ-карты постоянно выкидывали со станции, пока не перешли на корпоративный тариф для IoT

Бинкевич Игорь
27.12.2017, 12:37
Лучше уточнить у оператора о связи. Наши СИМ-карты постоянно выкидывали со станции, пока не перешли на корпоративный тариф для IoT

Тариф корпоративный: Телеметрия 20. Проверил еще раз ,дело точно в антенне!

ventilyator
28.12.2017, 07:51
У меня отсутствие обмена вылечилось только путём извлечения/установки сим-карты в модем.
Слабый прижим, пришлось подложить на сим-карту кусочек пластика.
Всё опять работает.

e.filatov
28.12.2017, 10:43
Тариф корпоративный: Телеметрия 20. Проверил еще раз ,дело точно в антенне!
Небольшое уточнение. ПМ210 установлен в металический заземленный шкаф или просто на рейке/стене в открытом пространстве?

Бинкевич Игорь
28.12.2017, 11:53
Небольшое уточнение. ПМ210 установлен в металический заземленный шкаф или просто на рейке/стене в открытом пространстве?

Пока просто на столе.

Evdoc
28.12.2017, 17:20
Добрый день. Еще возникла одна хотелка.
Отображать размер трафика переданной информации.
удобно для выбора тарифа. Мегафон 200р. кончились за 3 дня.

ASo
28.12.2017, 17:58
Так смотрите в личном кабинете.

spa
30.12.2017, 18:51
Здравствуйте. Скиньте пожалуйста скриншоты настройки события и настройки параметров прибора, учавствующих в событии.
Так-же прошу скинуть и подобные настройки, касающиеся предидущего Вашего сообщения с QF

Переменная QF в текущих данных меняется, в отображении в виде таблице тоже видно изменение переменной.
Переменная равна 1, по условиям событие должно сработать, только когда переменная станет 0.
Пробовал с другими переменными, которые изначально равны 0, и при смене их значения на 1, событие так и не срабатывает.
Если же переменная типа UINT16, и принимает значения 1 или 0, то события работают как надо.
Скриншоты прилагаю.
34898348993490034901

magdag
02.01.2018, 17:57
Приветствую господа, подскажите пожалуйста, возможно ли подключение к сервису модулей ввода/вывода через преобразователь протокола MGate (Modbus-RTU/ASCII (RS-232/422/485) в Modbus/TCP) ?

dim1987
02.01.2018, 20:03
Почему то начала выскакивать ошибка 255, раньше такого не было

e.filatov
02.01.2018, 23:29
Почему то начала выскакивать ошибка 255, раньше такого не было

Добрый день. Какой прибор и каким способом у Вас подключен?

e.filatov
03.01.2018, 00:31
Приветствую господа, подскажите пожалуйста, возможно ли подключение к сервису модулей ввода/вывода через преобразователь протокола MGate (Modbus-RTU/ASCII (RS-232/422/485) в Modbus/TCP) ?

Думаю, что нет. Конечное устройство должно кроме общения по ModbusTCP уметь 1)само подключатся к серверу 2)передавать служебную информацию, необходимую для работы с сервером. Именно поэтому разработаны/разрабатываются шлюзы серии Пх210. В данный момент доступен только GSM исполнение, чуть позже появится версия с Ethernet.

Antinari
19.01.2018, 20:28
чуть позже появится версия с Ethernet.
Насколько "чуть позже"? На каком этапе ПЕ210/ПВ210? Очень ждем, дабы не заморачиваться с ОПСОСами, да и не в каждом подвале где стоит ОВЕН, есть надежная связь

e.filatov
20.01.2018, 16:29
Насколько "чуть позже"? На каком этапе ПЕ210/ПВ210? Очень ждем, дабы не заморачиваться с ОПСОСами, да и не в кждом подвале где стоит ОВЕН, есть надежная связь

Добрый день. Старт бета-теста ПЕ210 планируется в начале марта. По Пв 210 пока что не можем назвать точных дат.

Чили-Рома
25.01.2018, 16:19
Добрый день, уважаемые разработчики.
1) Было бы очень удобно иметь аварийное событие по появлению Ошибки 255. А то событие " Прибор не на связи" говорит лишь об отключении питания шлюза ПМ210. И зачем такая Авария от каждого прибора нужна, если о пропадании связи с ним можно понять лишь по появлении Ошибки 255?
2) У меня сейчас стоят 18шт ТРМ201. У них для создания события доступен лишь один параметр Вход1(PV[0])? Делаю Уставку Оперативным параметром, но она все равно не появляется в создании Выражения.

Сергей Лысов
25.01.2018, 17:47
Добрый день, уважаемые разработчики.
1) Было бы очень удобно иметь аварийное событие по появлению Ошибки 255

Добрый вечер.
Пожалуйста, в Руководстве пользователя (http://www.owen.ru/uploads/owencloud._rukovodstvo_polzovatelya_%5B0.81%5D.pdf ) на стр.24 есть пример как создать событие при появлении ошибки 255
35282



2) У меня сейчас стоят 18шт ТРМ201. У них для создания события доступен лишь один параметр Вход1(PV[0])? Делаю Уставку Оперативным параметром, но она все равно не появляется в создании Выражения.

Вы сами определяете какие параметры хотите видеть в событиях. Для этого установите галочку напротив "отображать в событиях". По умолчанию она только у параметра PV[0].
35284

Чужой
26.01.2018, 10:43
Добрый день, уважаемые разработчики....
проблема с подключением ПЛК 160 :confused:
3 ПЛК 160 на других объектах подключены успешно и уже давно работают.....
как проверить? куда копать?? :confused:

Сергей Лысов
26.01.2018, 13:08
проблема с подключением ПЛК 160 :confused:
3 ПЛК 160 на других объектах подключены успешно и уже давно работают.....
как проверить? куда копать?? :confused:

Информации, которую вы дали, пока недостаточно.
От вас:

Информация из PLCInfo
Содержимое файла local.addres.dat
Скриншот вкладки "Общие | Общие настройки"
Проект ПЛК. Все POU можете удалить, интересует конфигурация ПЛК
Информация о сети. Шлюз, DNS, стоит ли фаервол

Чужой
26.01.2018, 13:41
Информации, которую вы дали, пока недостаточно.
От вас:

Информация из PLCInfo
Содержимое файла local.addres.dat
Скриншот вкладки "Общие | Общие настройки"
Проект ПЛК. Все POU можете удалить, интересует конфигурация ПЛК
Информация о сети. Шлюз, DNS, стоит ли фаервол


1. 2. объект далеко, прошивка 2.17.0, target 2.12
3. 4. МАК Токен совпадают и прописаны верно
5. Шлюз, DNS, надо уточнять у сисадмина. фаервол разрешены исходящие соединения на: 91.109.201.87, 91.109.201.45 на порт 25502
из локальной сети CodeSys подключается к ПЛК

Чили-Рома
26.01.2018, 13:55
Спасибо, не дочитал до этого места.:o

Massmeter
31.01.2018, 11:35
Еще есть ПМ210 на продажу/тестирование? Я уже свой тестовый образец продал Заказчику. Еще нужен 1

Кирилл Валюнин
31.01.2018, 11:57
Еще есть ПМ210 на продажу/тестирование? Я уже свой тестовый образец продал Заказчику. Еще нужен 1

ПМ210 уже в свободной продаже

Кирилл Валюнин
31.01.2018, 11:59
Еще есть ПМ210 на продажу/тестирование? Я уже свой тестовый образец продал Заказчику. Еще нужен 1
Через пару недель можем дать вам на бету семпл шлюза RS485-Eth для OwenCloud ПЕ210

spa
31.01.2018, 15:16
Переменная QF в текущих данных меняется, в отображении в виде таблице тоже видно изменение переменной.
Переменная равна 1, по условиям событие должно сработать, только когда переменная станет 0.
Пробовал с другими переменными, которые изначально равны 0, и при смене их значения на 1, событие так и не срабатывает.
Если же переменная типа UINT16, и принимает значения 1 или 0, то события работают как надо.
Скриншоты прилагаю.
34898348993490034901

Ребята кто-нибудь пробовал бушевские переменные использовать в событиях?

Aleksandr
31.01.2018, 21:17
Здравствуйте. Как я понял, использовать одновременно OwenCloud и Modbus TCP, например для подключения панели к ПЛК100, не получится?

Massmeter
31.01.2018, 21:29
Здравствуйте. Как я понял, использовать одновременно OwenCloud и Modbus TCP, например для подключения панели к ПЛК100, не получится?

Если на контроллере 2 порта RS-485 в режиме SLAVE, то должно работать.

Aleksandr
31.01.2018, 21:41
Если на контроллере 2 порта RS-485 в режиме SLAVE, то должно работать.

Я имел ввиду через Ethernet, когда контроллер и панель в одной сети с доступом в интернет. Попробовал - связь с панелью работает, а к OwenCloud не подключается...35366

КИП
01.02.2018, 01:56
Может не втему но OwenCloud совсем не то что нужно рынку, слишком он примитивный, лучше бы сделали железо шлюз для связки и организации связи устройств ОВЕН по верх интернета. А приложение Cloud было бы связующим только не на сервисе овен а внутри этой железки пользы было куда больше и интересней.

Кому как. Мне например очень даже подходит, для контроля артезианских скважин. А этот рынок по стране просто огромный.
Вопрос только в одном, как долго Овен будет поддерживать сервис OwenCloud в бесплатном варианте и как в дальнейшем будет качество сервиса, когда повыситься количество пользователей?

dim1987
01.02.2018, 06:18
Покуал преобразователь 232-485 с алика - две недели отработал норм, а потом начала появляться ошибка 255, поставил овеновский преобразователь- пока работает, дальше посмотрим.
Для моих маленьких систем Owencloud самое то. Скаду ставить избыточно, да и со смартфона иногда подглядывать удобно, ну и аварийные ситуации на электронку приходят, что тоже плюс.

dsyabitov
01.02.2018, 06:58
Вот накроется один сервировок Ocloud и встанет у вас скважины, что будете делать.

Накроется один, другие продолжат работать.

dsyabitov
01.02.2018, 07:01
Кому как. Мне например очень даже подходит, для контроля артезианских скважин. А этот рынок по стране просто огромный.
Вопрос только в одном, как долго Овен будет поддерживать сервис OwenCloud в бесплатном варианте и как в дальнейшем будет качество сервиса, когда повыситься количество пользователей?

Базовый функционал будет оставаться бесплатным - такова изначальная задумка. Сервис разрабатывается с учетом большого количества пользователей и устройств изначально, т.е. на архитектурном уровне.

dsyabitov
01.02.2018, 07:04
Я имел ввиду через Ethernet, когда контроллер и панель в одной сети с доступом в интернет. Попробовал - связь с панелью работает, а к OwenCloud не подключается...35366

Настройки для доступа к OwenCloud проверили? Настройки DNS, токена, правильность мак-адреса?

Филоненко Владислав
01.02.2018, 07:05
Вот накроется один сервировок Ocloud и встанет у вас скважины, что будете делать.

Ну ежели сделать систему без локального режима - то и топор электрика перерубит кабель Ethernet и каюк.
Прост не надо так делать

Сергей Лысов
01.02.2018, 10:38
Я имел ввиду через Ethernet, когда контроллер и панель в одной сети с доступом в интернет. Попробовал - связь с панелью работает, а к OwenCloud не подключается...
ПЛК может одновременно работать с облаком и панелью по Modbus TCP.
В модуле Modbus(slave) в поле address установите 1.

Aleksandr
01.02.2018, 11:43
ПЛК может одновременно работать с облаком и панелью по Modbus TCP.
В модуле Modbus(slave) в поле address установите 1.
Адрес и был 1. Даже пробовал разносить cloud и ТСР на два modbus slave с разными адресами. Все равно панель работает а контроллер с OCloud не соединяется. Вечером ещё попробую.

Сергей Лысов
01.02.2018, 11:55
Адрес и был 1. Даже пробовал разносить cloud и ТСР на два modbus slave с разными адресами. Все равно панель работает а контроллер с OCloud не соединяется. Вечером ещё попробую.

Окей, давайте тогда разбираться подробнее. Внизу список информации, по которой я могу сказать где ошибка. Если не хотите выкладывать проект на форуме, можно на почту: s.lysov@owen.ru





Информация из PLCInfo
Содержимое файла local.addres.dat
Скриншот вкладки "Общие | Общие настройки"
Проект ПЛК. Все POU можете удалить, интересует конфигурация ПЛК
Информация о сети. Шлюз, DNS, стоит ли фаервол

Сергей Лысов
01.02.2018, 12:05
Ребята кто-нибудь пробовал бушевские переменные использовать в событиях?

Спасибо за вопрос, проблема действительно есть. Поправили на тестовой сборке, если не возникнет никаких трудностей, в конце следующей неделе выпустим обновление с фиксом.

КИП
01.02.2018, 18:09
Вот накроется один сервировок Ocloud и встанет у вас скважины, что будете делать.

Даже при отключении OwenCloud, все объекты будут работать, ведь я использую сервис для контроля артезианских скважин.
У каждой скважины есть свой плк или пр, и они управляют работой.

Aleksandr
01.02.2018, 20:51
Окей, давайте тогда разбираться подробнее. Внизу список информации, по которой я могу сказать где ошибка. Если не хотите выкладывать проект на форуме, можно на почту: s.lysov@owen.ru
Да получилось, панель по TCP и OCloud работают одновременно. Похоже я с токенами запутался. Тогда еще вопрос - планируется ли сделать выделение бита из переменных word, например для активации событий?

dsyabitov
01.02.2018, 21:11
Да получилось, панель по TCP и OCloud работают одновременно. Похоже я с токенами запутался. Тогда еще вопрос - планируется ли сделать выделение бита из переменных word, например для активации событий?

Битовые маски начнем реализовывать в следующем релизе. Т.е. через одно обновление.

Сергей Лысов
01.02.2018, 23:14
Адрей, пожалуйста, не отклоняйтесь от темы. Если вы хотите что-то обсудить с участником форума, удобнее всего это сделать в личных сообщениях. К сожалению, мне пришлось удалить ваше последнее сообщение :(
Все беседы, которые не относятся к сервису OwenCloud мне также придётся удалятъ.

lara197a
04.02.2018, 02:35
Здравствуйте!
Посмотрите пожалуйста, почему не идут данные?
Судя по логу от RS485 ПМ210 опрашивают прибор 77,
а в настройках овен клоуд адрес прибора 247.
почему так?
[04/02/2018 01:55:45] Read data
77 03 88 06 00 81 72 7d 77 03 88 84 00 81 53 bd w.И..Бr}w.ИД.БS╜
77 03 00 e2 00 81 30 aa 77 03 88 81 00 81 c3 3c w..т.Б0кw.ИБ.Б├<
77 03 88 82 00 81 33 3c 77 03 88 03 00 81 e2 fc w.ИВ.Б3
77 03 88 84 00 81 53 bd 77 03 00 60 00 81 11 6a w.ИД.БS╜w..`.Б.j
77 03 00 e1 00 81 c0 aa 77 03 88 84 00 81 53 bd w..с.Б└кw.ИД.БS╜
77 03 00 e2 00 81 30 aa 77 03 88 81 00 81 c3 3c w..т.Б0кw.ИБ.Б├<
77 03 88 82 00 81 33 3c 77 03 88 03 00 81 e2 fc w.ИВ.Б3
77 03 88 84 00 81 53 bd 77 03 00 60 00 81 11 6a w.ИД.БS╜w..`.Б.j
77 03 00 e1 00 81 c0 aa 77 03 88 84 00 81 53 bd w..с.Б└кw.ИД.БS╜
77 03 00 e2 00 81 30 aa 77 03 00 63 00 81 e1 6a w..т.Б0кw..c.Бсj
77 03 00 88 00 81 11 de 77 03 88 81 00 81 c3 3c w..И.Б.▐w.ИБ.Б├<
77 03 88 82 00 81 33 3c 77 03 88 03 00 81 e2 fc w.ИВ.Б3
77 03 88 06 00 81 72 7d 77 03 88 84 00 81 53 bd w.И..Бr}w.ИД.БS╜

При попытке записи ПМ210 виснет.
Пробовал менять адрес, при адресе 1 в логе адрес 87 ?

dsyabitov
04.02.2018, 07:45
Здравствуйте!
Посмотрите пожалуйста, почему не идут данные?
Судя по логу от RS485 ПМ210 опрашивают прибор 77,
а в настройках овен клоуд адрес прибора 247.
почему так?
[04/02/2018 01:55:45] Read data
77 03 88 06 00 81 72 7d 77 03 88 84 00 81 53 bd w.И..Бr}w.ИД.БS╜
77 03 00 e2 00 81 30 aa 77 03 88 81 00 81 c3 3c w..т.Б0кw.ИБ.Б├<
77 03 88 82 00 81 33 3c 77 03 88 03 00 81 e2 fc w.ИВ.Б3
77 03 88 84 00 81 53 bd 77 03 00 60 00 81 11 6a w.ИД.БS╜w..`.Б.j
77 03 00 e1 00 81 c0 aa 77 03 88 84 00 81 53 bd w..с.Б└кw.ИД.БS╜
77 03 00 e2 00 81 30 aa 77 03 88 81 00 81 c3 3c w..т.Б0кw.ИБ.Б├<
77 03 88 82 00 81 33 3c 77 03 88 03 00 81 e2 fc w.ИВ.Б3
77 03 88 84 00 81 53 bd 77 03 00 60 00 81 11 6a w.ИД.БS╜w..`.Б.j
77 03 00 e1 00 81 c0 aa 77 03 88 84 00 81 53 bd w..с.Б└кw.ИД.БS╜
77 03 00 e2 00 81 30 aa 77 03 00 63 00 81 e1 6a w..т.Б0кw..c.Бсj
77 03 00 88 00 81 11 de 77 03 88 81 00 81 c3 3c w..И.Б.▐w.ИБ.Б├<
77 03 88 82 00 81 33 3c 77 03 88 03 00 81 e2 fc w.ИВ.Б3
77 03 88 06 00 81 72 7d 77 03 88 84 00 81 53 bd w.И..Бr}w.ИД.БS╜

При попытке записи ПМ210 виснет.
Пробовал менять адрес, при адресе 1 в логе адрес 87 ?

Здравствуйте. Настройка com-порта - 8E1 - так и настроено везде или ошиблись и должно быть 8N1?

lara197a
04.02.2018, 09:17
Да. Это фиксированное (елинственно возможное) значение.
Опрашивал прибор ПЛК и конфигуратором, отвечает правильно.

александр 64
04.02.2018, 11:11
тестировал сервис все получилось но если редактировать переменные после загрузки приложения на андроид новые переменные появляются только на компьютере андроид их не видит, решается перезагрузкой приложения но это не очень удобно

lara197a
04.02.2018, 12:25
Проверил с ПЛК работу по RS485.
С настройками 8N1- работает.
С настройками 8Е1- не работает.
Проблема со стороны Овен клауд или ПМ210.
Запрос к прибору при 8Е1 совершенно не верный.
По этому нет ответа.
Прошу исправить ошибку или убрать эти параметры из выпадающего списка выбора параметров.

lara197a
04.02.2018, 16:37
Установлено точно, что Овен Клауд или ПМ210 не могут работать с настройкой 8Е1.
Изменил прошивку прибора на 8N1 и все заработало.
Теперь придется править конфигуратор.

Вопрос к знатокам, с мобильного приложения Овен клауд для андроид можно управлять или доступно только отображение параметров?

Евгений Багаев
04.02.2018, 16:37
Проверил с ПЛК работу по RS485.
С настройками 8N1- работает.
С настройками 8Е1- не работает.
Проблема со стороны Овен клауд или ПМ210.
Запрос к прибору при 8Е1 совершенно не верный.
По этому нет ответа.
Прошу исправить ошибку или убрать эти параметры из выпадающего списка выбора параметров.

Здравствуйте, lara197a.
Это уже обсуждалось ранее. Ответ здесь: http://www.owen.ru/forum/showthread.php?t=27493&p=264023&viewfull=1#post264023

lara197a
04.02.2018, 16:43
Евгений Багаев
спасибо, только сутки весело проведенного времени с танцами и бубном уже пролетели и судя по дате в вашей ссылке
ждут обновлений давно, а воз и ныне там.:(

lara197a
04.02.2018, 17:26
Вопрос к знатокам, с мобильного приложения Овен клауд для андроид можно управлять или доступно только отображение параметров?
отвечу сам.
да можно,
нужно было установить версию 2.1

Сергей Лысов
04.02.2018, 17:56
спасибо, только сутки весело проведенного времени с танцами и бубном уже пролетели и судя по дате в вашей ссылке
ждут обновлений давно, а воз и ныне там.:(

Приношу свои извинения. Завтра узнаю у разработчиков статус фикса и сроки исправления.

lara197a
05.02.2018, 13:32
Приношу свои извинения. Завтра узнаю у разработчиков статус фикса и сроки исправления.
Здавствуйте!
Что ответили разработчики?

Сергей Лысов
05.02.2018, 18:02
Здавствуйте!
Что ответили разработчики?

Добрый вечер.
Приблизительно две недели уйдёт на то, чтобы поправить прошивки на ПМ210 и ПЕ210. После ещё две недели на тестирование, правку документации и установку в серию на заводе.
Если работать в режиме 8E1 и 8O1 нужно срочно, то могу отправить вам прошивку раньше, одновременно с тестом.

lara197a
05.02.2018, 18:48
Спасибо. мы уже сделали резервную прошивку и конфигуратор с новыми настройками для прибора.
с учетом особенностей овен клауд.
напишите на форуме, как получите прошивку.
при конфигурировании обнаружен еще одна нерабочая настройка.
Про не возможность чтения записи bool я читал. Специально для Овен клауд добавили регистры.
Однако в настройках речь идет про отображение, а лог сообщает об ошибке при записи.
Не читает кстати тоже, но ошибки нет.

КИП
08.02.2018, 12:31
Почему в тестовом аккаунте обновление данных происходит не периодически.
То нормально 10-15сек., то несколько минут.
А на самом деле глядя на таблицы и графики обновление происходит нормально.

dsyabitov
08.02.2018, 13:03
Почему в тестовом аккаунте обновление данных происходит не периодически.
То нормально 10-15сек., то несколько минут.
А на самом деле глядя на таблицы и графики обновление происходит нормально.

Здравствуйте. Исправили.

Сергей Лысов
08.02.2018, 15:02
Всем привет :)

Завтра с 7:00 до 9:00 мы будем обновлять сервис OwenCloud (https://web.owencloud.ru/).
В это время возможны перебои в работе.
Мы постараемся провести обновление как можно быстрее.

Список изменений:

1. Добавили шаблоны Modbus для продукции Овен.
2. Для протокола Modbus:
а) добавили «множитель» (коэффициент умножения значения параметра) и «точность» (количество знаков после запятой).

б) добавили просмотр и управление списком категорий параметров. Распределение параметров аналогично дереву объектов.
3. Добавили экспорт отчёта в Excel для вкладок "События", "Аварии" и "Текущие параметры"
4. На графиках теперь отображаются начало и окончание событий
5. В отчётах отображается структура дерева категорий у параметров
6. Добавили навигацию по списку устройств на Главной странице
7. На Главной странице добавили просмотр списка устройств и категорий
8. Добавили переход в основные разделы системы со страницы "Администрирование"
9. Добавили категорию в профиль устройства и на страницу "Администрирование"
10. Исправлены ошибки, про которые вы нам рассказывали.

После обновления рекомендую в браузере нажать "CTRL+F5".
А ещё мы обновили Руководство Пользователя:

lara197a
08.02.2018, 16:30
Уточните про ошибку в параметрах порта с четностью (Е).
Будет исправлена сейчас или как писали ранее только в следующее обновление?
Я к тому, что будет смысл проверять или пока ждать?

Сергей Лысов
08.02.2018, 16:43
Уточните про ошибку в параметрах порта с четностью (Е).
Будет исправлена сейчас или как писали ранее только в следующее обновление?
Я к тому, что будет смысл проверять или пока ждать?

Ошибка работы с контролем чётности - это баг в прошивках ПМ210 и ПЕ210.
Завтрашнее обновление затрагивает только сервис OwenCloud, а не прошивки шлюзов :)

Чили-Рома
09.02.2018, 16:34
Всем привет :)

Завтра с 7:00 до 9:00 мы будем обновлять сервис OwenCloud (https://web.owencloud.ru/).
В это время возможны перебои в работе.
Мы постараемся провести обновление как можно быстрее.

Список изменений:

Забыли упомянуть в списке изменений то, что вы убрали "Избранные приборы" из панели слева. Было очень удобно. Например, перейдя в раздел Администрирование, можно было одним щелчком мышки переходить в Администрирование любого прибора из Избранного. Теперь ставить звездочки стало бессмысленно. Но новый древовидный список приборов тоже очень удобен, это хорошее нововведение, только сделайте, чтобы он отображался в Администрировании.

КИП
12.02.2018, 00:28
После обновления облака в тестовом аккаунте обновление данных происходит не периодически.
То нормально 10-15сек., то несколько минут.
А на самом деле глядя на таблицы и графики обновление происходит нормально.
Запись данных происходит только после нажатия крестика отмены активных команд.
До обновления облака запись происходила нормально.
Я ранее хотел перейти на диспетчеризацию насосных через облако, но Вы не можете даже наладить нормальную работу тестового аккаута. Когда будет сделан нормальная работа облака, чтобы можно его использовать на реальных объектах?

dsyabitov
12.02.2018, 13:25
После обновления облака в тестовом аккаунте обновление данных происходит не периодически.
То нормально 10-15сек., то несколько минут.
А на самом деле глядя на таблицы и графики обновление происходит нормально.
Запись данных происходит только после нажатия крестика отмены активных команд.
До обновления облака запись происходила нормально.
Я ранее хотел перейти на диспетчеризацию насосных через облако, но Вы не можете даже наладить нормальную работу тестового аккаута. Когда будет сделан нормальная работа облака, чтобы можно его использовать на реальных объектах?

Здравствуйте.

Решаем данную проблему в приоритетном режиме.

Pavel_
12.02.2018, 16:16
Здравствуйте.
Подкажите пожалуйста, как в новом интерфейсе облака, отсортировать параметры в необходимом порядке?
В предыдущем интерфейсе, до обновления, я специально назначал код (номер) параметру и именно в том порядке, в котором мне не необходимо было видеть параметры в облаке, теперь все параметры просто сортируются по имени параметра.
С категориями несомненно стало удобней, но управление сортировкой, хотя бы с помощью кода параметра все-же необходимо.

Митрий
12.02.2018, 17:44
Здравствуйте, тестирую данную технологию. Плюсов много. Мониторил датчики канальные температуры ОВЕН и заметил что один стал понемногу врать, полез, клеммы почистил. Но пока чистил в облако записалась температура 700 градусов. Теперь эта "дичь" мешает смотреть долгосрочный тренд. Как её можно почистить в облаке?

dsyabitov
13.02.2018, 09:05
Здравствуйте, тестирую данную технологию. Плюсов много. Мониторил датчики канальные температуры ОВЕН и заметил что один стал понемногу врать, полез, клеммы почистил. Но пока чистил в облако записалась температура 700 градусов. Теперь эта "дичь" мешает смотреть долгосрочный тренд. Как её можно почистить в облаке?

Здравствуйте.

В данный момент функционал удаления данных в OwenCloud не предусмотрен.

dsyabitov
13.02.2018, 09:12
Здравствуйте.
Подкажите пожалуйста, как в новом интерфейсе облака, отсортировать параметры в необходимом порядке?
В предыдущем интерфейсе, до обновления, я специально назначал код (номер) параметру и именно в том порядке, в котором мне не необходимо было видеть параметры в облаке, теперь все параметры просто сортируются по имени параметра.
С категориями несомненно стало удобней, но управление сортировкой, хотя бы с помощью кода параметра все-же необходимо.

Здравствуйте.

Основное назначение кода параметра - это участие в формулах для событий и "совместимость" с параметрами приборов, работающих по протоколу Овен. Сортировка - это скорее побочный эффект, который до некоторого момента работал. Сейчас сортировка идет по названию параметра. В следующем релизе продумаем другие возможности сортировки.

xitrel
15.02.2018, 10:41
Здравствуйте! На компьютере установлен ОПС сервер и СКАДА. ОПС опрашивает больше 10 ТРМ 202 по RS 485. Возможно ли данные напрямую без СКАДЫ отправить в OwenCloud? Без использования ПМ210?

Сергей Лысов
15.02.2018, 12:08
Здравствуйте! На компьютере установлен ОПС сервер и СКАДА. ОПС опрашивает больше 10 ТРМ 202 по RS 485. Возможно ли данные напрямую без СКАДЫ отправить в OwenCloud? Без использования ПМ210?

Чтобы вывести ТРМ202 в облако есть два способа:
1. Использовать ПМ210. Способ подключения к облаку - GPRS
2. Подключить ТРМ202 к ПЛК. ПЛК подключится к облаку. Способ подключения - Ethernet

SCADA системы, к сожалению, подключаться к OwenCloud не умеют. Но умеют получать значения из облака через OPC ОВЕН (http://www.owen.ru/catalog/36242946).

capzap
15.02.2018, 12:12
Чтобы вывести ТРМ202 в облако есть два способа:
1. Использовать ПМ210. Способ подключения к облаку - GPRS
2. Подключить ТРМ202 к ПЛК. ПЛК подключится к облаку. Способ подключения - Ethernet

SCADA системы, к сожалению, подключаться к OwenCloud не умеют. Но умеют получать значения из облака через OPC ОВЕН (http://www.owen.ru/catalog/36242946).

как туманно написали, ОРС умеет, кроме чтения из облака, писать в регистры свободно программируемого устройства в облаке, если да то нет же причин ОРС считать инфу с трм-ок и переслать в облачные регистры

xitrel
15.02.2018, 12:37
Чтобы вывести ТРМ202 в облако есть два способа:
1. Использовать ПМ210. Способ подключения к облаку - GPRS
2. Подключить ТРМ202 к ПЛК. ПЛК подключится к облаку. Способ подключения - Ethernet

SCADA системы, к сожалению, подключаться к OwenCloud не умеют. Но умеют получать значения из облака через OPC ОВЕН (http://www.owen.ru/catalog/36242946).

Одновременно иметь данные и на компьютере где стоит СКАДА и в OwenCloud не получится?

Сергей Лысов
15.02.2018, 12:41
нет же причин ОРС считать инфу с трм-ок и переслать в облачные регистры

Но я не предлагал ОРС читать данные с ТРМ :)

Сергей Лысов
15.02.2018, 12:44
Одновременно иметь данные и на компьютере где стоит СКАДА и в OwenCloud не получится?

Получится. Подключаете ТРМки в облако через шлюз или любое программируемое устройство. На компьютере устанавливаете ОРС с поддержкой тучки. ОРС получает инфомрацию из облака. SCADA получает данные из ОРС.
Инструкция тут: http://www.owen.ru/uploads/instrukciya_po_podklyucheniyu_oven_opc_k_owencloud .pdf

capzap
15.02.2018, 12:45
Но я не предлагал ОРС читать данные с ТРМ :)

так вот это и смущает, отвечаете на вопрос про ОРС и скаду, и пишите что скада не подключается, оставив на перепутье про ОРС, можно или нельзя

xitrel
15.02.2018, 12:49
На компьютере стоит простая SCADA Owen Process Manager продублировать снятые значения в OwenCloud не удастся? Но на другом стоит ОПС сервер и СКАДА ИНСАТ вариантов нет как отправить в OwenCloud значения параметров? Компьютер имеет доступ в инет.

xitrel
15.02.2018, 12:52
Сейчас я напрямую получаю а теперь буду через кучу промежуточных звеньев и если инет пропадет то всё конец?

Сергей Лысов
15.02.2018, 17:19
На компьютере стоит простая SCADA Owen Process Manager продублировать снятые значения в OwenCloud не удастся? Но на другом стоит ОПС сервер и СКАДА ИНСАТ вариантов нет как отправить в OwenCloud значения параметров? Компьютер имеет доступ в инет.

OPM, к сожалению, не умеет работать с OwenCloud. Отправить данные из OPM в другую SCADA или в OwenCloud возможности нет.

DIPHENHYDRAMINE
19.02.2018, 13:15
Добрый день, уважаемые разработчики....
а нельзя сделать одновременно 2 графика на странице....?
или в настройках сделать возможность включения...
я думаю было бы удобнее.....
примерно так...

dsyabitov
19.02.2018, 13:32
Добрый день, уважаемые разработчики....
а нельзя сделать одновременно 2 графика на странице....?
или в настройках сделать возможность включения...
я думаю было бы удобнее.....
примерно так...

Здравствуйте. Подобный запрос уже был недавно. Проработаем, и, возможно, в одном из следующих релизов сделаем.

dsyabitov
19.02.2018, 13:33
После обновления облака в тестовом аккаунте обновление данных происходит не периодически.
То нормально 10-15сек., то несколько минут.
А на самом деле глядя на таблицы и графики обновление происходит нормально.
Запись данных происходит только после нажатия крестика отмены активных команд.
До обновления облака запись происходила нормально.
Я ранее хотел перейти на диспетчеризацию насосных через облако, но Вы не можете даже наладить нормальную работу тестового аккаута. Когда будет сделан нормальная работа облака, чтобы можно его использовать на реальных объектах?

Здравствуйте.

Проблема с нестабильной записью параметров решена.

DIPHENHYDRAMINE
19.02.2018, 13:38
Здравствуйте. Подобный запрос уже был недавно. Проработаем, и, возможно, в одном из следующих релизов сделаем.

Спасибо...
видимо не внимательно читал тему...

КИП
19.02.2018, 18:11
Здравствуйте.

Проблема с нестабильной записью параметров решена.

Проверил запись на своем личном аккаунте, все работает отлично.

ДаниилСПб
21.02.2018, 12:17
Добрый день, возможно ли настроить задержку срабатывания системного события "прибор не на связи" для исключения ложных тревог и добавить функционал отправки сообщения выхода из аварии: "прибор на связи"?

dsyabitov
21.02.2018, 12:49
Добрый день, возможно ли настроить задержку срабатывания системного события "прибор не на связи" для исключения ложных тревог и добавить функционал отправки сообщения выхода из аварии: "прибор на связи"?

Здравствуйте.

Задержка срабатывания для этого события сейчас задана жестко и возможности поменять это сейчас нету.
Отправка сообщения (вопрос куда?) должна осуществляться как при срабатывании аварии, так и при завершении, если событие обозначено аварийным.

Вопрос в другом - у Вас есть ложные срабатывания данного события?

ДаниилСПб
21.02.2018, 15:09
Здравствуйте.

Задержка срабатывания для этого события сейчас задана жестко и возможности поменять это сейчас нету.
Отправка сообщения (вопрос куда?) должна осуществляться как при срабатывании аварии, так и при завершении, если событие обозначено аварийным.

Вопрос в другом - у Вас есть ложные срабатывания данного события?

Текущая задержка срабатывания не устраивает заказчика.

Потеря связи на минуты-десятки минут не критична.

Если нажата пиктограмма красный восклицательный знак то будут приходить сообщения "прибор снова на связи"?

dsyabitov
21.02.2018, 20:41
Текущая задержка срабатывания не устраивает заказчика.

Потеря связи на минуты-десятки минут не критична.

Если нажата пиктограмма красный восклицательный знак то будут приходить сообщения "прибор снова на связи"?

Да, если нажата красная пиктограмма справа от события - то будут приходить уведомления. Потеря связи на десятки минут может быть связана только с неустойчивым уровнем сигнала сотовой сети.

Sergey788
22.02.2018, 05:38
Подскажите. Не могу изменить управляемые параметры с помощью OwenCloud. ТРМ-32 Щ.. Ошибка 40

Sergey788
22.02.2018, 05:41
.....................................Щ4

dsyabitov
22.02.2018, 05:51
Подскажите. Не могу изменить управляемые параметры с помощью OwenCloud. ТРМ-32 Щ.. Ошибка 40

Здравствуйте.
Прибор создавали из шаблона в OwenCloud или сами регистры прописывали?

Sergey788
22.02.2018, 06:00
По шаблону

dsyabitov
22.02.2018, 06:35
Какой параметр?

Sergey788
22.02.2018, 06:40
У меня трм-32 щ.4. Он modbus понимает ?

Sergey788
22.02.2018, 06:43
Все управляемые параметры которые могут назначаться не читаются и соответственно не меняються

dsyabitov
22.02.2018, 07:02
Все управляемые параметры которые могут назначаться не читаются и соответственно не меняються

В шаблоне есть ошибка, которая выставляет оперативные параметры управляемыми - сегодня это исправим. С чтением будем разбираться.

Sergey788
22.02.2018, 07:34
Управляемые там которые корректировка температуры наружнего воздуха, параметры u - задание температур подачи от наружного воздуха и т.д. Попозже могу приложить скриншоты.

Sergey788
22.02.2018, 07:55
357693576835770

DIPHENHYDRAMINE
23.02.2018, 15:28
Вчера в 9.29 отвалились от тучи 2 объекта одновременно..... Сегодня в 12.37 еще 2 объекта одновременно....
через CodeSys подключение нормально.....
где искать проблему???

КИП
23.02.2018, 20:59
Вчера в 9.29 отвалились от тучи 2 объекта одновременно..... Сегодня в 12.37 еще 2 объекта одновременно....
через CodeSys подключение нормально.....
где искать проблему???
У меня тоже вчера примерно в 10 часов отвалился плк 100 от облака, что мне делать?
Плк сам работает нормально, но связи с тучкой нет, интернет на объекте в норме.

Сергей Лысов
23.02.2018, 21:52
У меня тоже вчера примерно в 10 часов отвалился плк 100 от облака, что мне делать?
Плк сам работает нормально, но связи с тучкой нет, интернет на объекте в норме.

Отправьте мне MAC-адрес в ЛС, посмотрим в чём дело


Вчера в 9.29 отвалились от тучи 2 объекта одновременно..... Сегодня в 12.37 еще 2 объекта одновременно....
через CodeSys подключение нормально.....
где искать проблему???

Вы тоже напишите MAC-адреса контроллеров

DIPHENHYDRAMINE
23.02.2018, 23:07
Отправьте мне MAC-адрес в ЛС, посмотрим в чём дело



Вы тоже напишите MAC-адреса контроллеров

восстановилось сегодня в 22 26

КИП
24.02.2018, 14:03
Отправьте мне MAC-адрес в ЛС, посмотрим в чём дело



Вы тоже напишите MAC-адреса контроллеров

У меня тоже все восстановилось.
Интересно что это было и как избежать в дальнейшем?

Сергей Лысов
24.02.2018, 14:27
У меня тоже все восстановилось.
Интересно что это было и как избежать в дальнейшем?

Рад, что у вас всё заработало, но жаль, что номера устройств я так и не узнал. Это затрудняет диагностику, поскольку на демо-стенде зависаний не было.

dsyabitov
24.02.2018, 15:03
У меня тоже все восстановилось.
Интересно что это было и как избежать в дальнейшем?

Здравствуйте. Напишите, пожалуйста, во сколько восстановилась связь.

КИП
25.02.2018, 00:09
Здравствуйте. Напишите, пожалуйста, во сколько восстановилась связь.

После как 22 февраля примерно в 10 часов пропала связь с плк-100, я сразу посмотрел в ваш тестовый аккаунт (там было все в порядке) и это ввело меня в заблуждение.
Я подумал что у меня неисправен плк-100 или сетевое оборудование и я 23 февраля менял прошивку в плк и проверял интернет. И на последок я удалил и снова создал прибор в облаке.
24 февраля примерно 13 часов я вновь попробовал и связь восстановилась, теперь облако работает нормально. Так что 22 и 23 февраля мой аккаунт не работал.

dsyabitov
25.02.2018, 07:49
Здравствуйте. В понедельник поизучаем внимательно логи за указанные периоды.

Ovnomatic
25.02.2018, 14:07
Здравствуйте!
В новом таргете присутствует настройка OwencloudIPFilename со значением owencloud.txt.
Самого файла на ПЛК100 нет, может ли это быть причиной отсутствия связи с облаком?

Сергей Лысов
25.02.2018, 16:25
Здравствуйте!
В новом таргете присутствует настройка OwencloudIPFilename со значением owencloud.txt.
Самого файла на ПЛК100 нет, может ли это быть причиной отсутствия связи с облаком?

Добрый день :)
Файл owencloud.txt на старых контроллерах включён в состав прошивки и пользователь не может его редактировать или удалить.
Командой filedir файл также не видно.
Причин отсутствия связи может быть несколько. Типовые рекомендации ниже.
Если не разберётесь сами - оставьте, пожалуйста, ваши контактные данные. В понедельник инженер тех.поддержи с вами свяжется и поможет настроить контроллер.

35828

Сергей Лысов
25.02.2018, 16:43
А на стенде зависаний и не будет при пинге 1ms. А вот пользователи чей интернет проходит через кучу провайдеров до вашего сервера, зависание буду постоянны, так что с этим нужно смирится кто это еще не понял

Демостенд установлен в офисе компании, а сервера облака в ЦОДе. Поскольку стенд и сервер удалены друг от друга и работают в сетях разных провайдеров, то стенд не отличается от типового клиента облака. Тем более стенд подключен в корпоративную сеть с кучей компьютеров, оргтехники и через несколько уровней коммутаторов. Поэтому ping между стендом и облаком куда больше 1мс :)

КИП
26.02.2018, 17:40
В моем аккаунте днем обновление данных, на странице параметры происходит не периодически.
То нормально 10-15сек., то несколько минут.
А на самом деле глядя на таблицы и графики обновление происходит нормально.
В ночное время обновление происходит почти нормально.
Кстати в тестовом аккаунте такая же проблема.
Интернет у меня нормальный.
Когда исправите проблему?

DIPHENHYDRAMINE
26.02.2018, 19:04
26-02-2018 00:09:06 на одном из объектов снова пропала связь......

dsyabitov
26.02.2018, 20:02
26-02-2018 00:09:06 на одном из объектов снова пропала связь......

Здравствуйте. Сейчас проверьте пожалуйста. Если связь восстановилась - напишите время первых данных после восстановления.

DIPHENHYDRAMINE
26.02.2018, 20:10
Здравствуйте. Сейчас проверьте пожалуйста. Если связь восстановилась - напишите время первых данных после восстановления.

пока изменений нет.....

dsyabitov
26.02.2018, 20:38
А сейчас восстановилоась? В логах были ошибки по таймауту по чтению, сейчас увеличил в настройках, если это был Ваш плк - то должен появиться в сети.

DIPHENHYDRAMINE
26.02.2018, 20:49
А сейчас восстановилоась? В логах были ошибки по таймауту по чтению, сейчас увеличил в настройках, если это был Ваш плк - то должен появиться в сети.

к сожалению не мой....((

КИП
04.03.2018, 18:35
В моем аккаунте днем обновление данных, на странице параметры происходит не периодически.
То нормально 10-15сек., то несколько минут.
А на самом деле глядя на таблицы и графики обновление происходит нормально.
В ночное время обновление происходит почти нормально.
Кстати в тестовом аккаунте такая же проблема.
Интернет у меня нормальный.
Когда исправите проблему?

Ответьте пожалуйста когда исправите проблему?

dsyabitov
04.03.2018, 21:00
Ответьте пожалуйста когда исправите проблему?
Здравствуйте. На следующей неделе постараемся.

КИП
06.03.2018, 21:26
У меня сегодня в 18.06 часов отвалился плк 100 от облака, что мне делать?
Плк сам работает нормально, но связи с тучкой нет, интернет на объекте в норме.
Это уже второй раз, первый случай был 22 февраля.

dsyabitov
06.03.2018, 21:41
У меня сегодня в 18.06 часов отвалился плк 100 от облака, что мне делать?
Плк сам работает нормально, но связи с тучкой нет, интернет на объекте в норме.
Это уже второй раз, первый случай был 22 февраля.

Здравствуйте. MAC в личку скиньте.

КИП
06.03.2018, 21:49
Здравствуйте. MAC в личку скиньте.
отправил мас адрес

КИП
06.03.2018, 22:16
В 22.13 связь восстановилась, что это было?
Такие сбои бывают или нет, если оборудование подключен к облаку через ПМ210 ?
Я сейчас готовлю проектное решение и мне эта информация важна?

dsyabitov
06.03.2018, 22:26
В 22.13 связь восстановилась, что это было?
Такие сбои бывают или нет, если оборудование подключен через ПМ210 ?
Я сейчас готовлю проектное решение и мне эта информация важна?

Проблема в сервисе, которая явно проявляется именно с Вашим устройством.

КИП
06.03.2018, 22:57
Мне ваш OwenCloud очень нравиться и я хочу подключить к облаку много насосных станций (для их контроля).
Но встает вопрос надежности вашего сервиса, так как даже на моем тестовом плк, за короткий промежуток времени, уже случились два пропадания связи с тучкой.
Хотя вы молодцы связь восстанавливаете быстро.
Как вы считаете пора или еще нет подключать к облаку серьезные промышленные объекты?
Много сейчас пользователей у данного сервиса и как часто происходят сбои?

gadgadgets@gmail.com
07.03.2018, 04:01
Подскажите локальный вариант есть? Облако не рассматриваем нужна надежность и независимость от интернета(Производство) У нас есть ПР200 и нужно получать данные в 1C подскажите как лучше реализовать может есть какие то варианты.

melky
07.03.2018, 07:10
Меня вот интересует несколько вопросов
1. в соглашении есть пункты о возможных перерывах связи и кто за них в конечном итоге будет платить ? или будешь потом бегать и доказывать чья была вина, оператора сотовой связи или облака ?
2. Если на объект после внедрения заставят добавить шифрование по ГОСТ с сертификатами ФСТЭК мы тут же приплывем к кучке ненужного железа ?

gadgadgets@gmail.com, любая Scada система вам в руки, умеющая передавать данные в БД к которой будет подключаться 1С. Тут точно к облаку подходить нельзя.

Сергей Лысов
07.03.2018, 10:52
Мне ваш OwenCloud очень нравиться и я хочу подключить к облаку много насосных станций (для их контроля).
Но встает вопрос надежности вашего сервиса, так как даже на моем тестовом плк, за короткий промежуток времени, уже случились два пропадания связи с тучкой.
Хотя вы молодцы связь восстанавливаете быстро.
Как вы считаете пора или еще нет подключать к облаку серьезные промышленные объекты?
Много сейчас пользователей у данного сервиса и как часто происходят сбои?

Спасибо за отзыв, приятно, что цените результат работы :)
Зависание вашего ПЛК100 - это частный случай. Дамир изучает логи и ищет в чем причина зависаний.

Сервер постоянно мониторит количество устройств онлайн - если оно резко падает, то мы моментально получаем оповещение.
Вчера никакой просадки пользователей не было, обращений в техподдержку с жалобами тоже. Лично проверю каждый день :rolleyes:

Сергей Лысов
07.03.2018, 11:22
Меня вот интересует несколько вопросов
1. в соглашении есть пункты о возможных перерывах связи и кто за них в конечном итоге будет платить ? или будешь потом бегать и доказывать чья была вина, оператора сотовой связи или облака ?
2. Если на объект после внедрения заставят добавить шифрование по ГОСТ с сертификатами ФСТЭК мы тут же приплывем к кучке ненужного железа?

Melky, я понимаю, что вы не пользуетесь сервисом и даже не планируете. Понимаю, что сервис не решает ваши задачи и ПМ210 не подходит. Слышать такие вещи с одной стороны грустно, но с другой стороны у нас есть пользователи, которым сервис нравится. И пока довольных пользователей большинство, я делаю вывод, что мы двигаемся в нужную сторону.

Как и любое SaaS решение, OwenCloud удовлетворяет запросы большинства. Для решения узких и специфических задач стоит присмотреться к другим облачным решениями. Возможно, даже поднять собственные сервера. Но это уже другая история и деньги.

Прошу вас в теме с облаком прекратить нападки на сервис. Вас же никто не заставляет им пользоваться \ _ (ツ) _ /

DIPHENHYDRAMINE
07.03.2018, 16:18
В 22.13 связь восстановилась, что это было?
Такие сбои бывают или нет, если оборудование подключен к облаку через ПМ210 ?
Я сейчас готовлю проектное решение и мне эта информация важна?

у меня тоже в это в время связь пропала....
Прибор не на связи 06-03-2018 18:01:47 06-03-2018 22:13:22

lara197a
07.03.2018, 16:48
....
2. Если на объект после внедрения заставят добавить шифрование по ГОСТ с сертификатами ФСТЭК мы тут же приплывем к кучке ненужного железа ?

gadgadgets@gmail.com, любая Scada система вам в руки, умеющая передавать данные в БД к которой будет подключаться 1С. Тут точно к облаку подходить нельзя.
melky
ты не прав.
vpn должно шифроваться само, хотя возможно овен клауд использует tcp или udp в неизменном виде, точно не знаю. в любом случае не представлюя, какой такой важности данные нужно шифровать с ПР?
пусть к примеру в сети 100 приборов. скада требует статического ip.
это 200р и не все предоставляют.
200р *100=20000р в месяц*12=240000 в год.
а в 1с и скаду можно передать из овен клауд через орс.

melky
07.03.2018, 21:42
Сергей Лысов это не нападки, а реалии жизни. Для себя любимого годится любой облачный сервис, но вы забываете о простой вещи, делая облако, вы наверняка предполагали, что к нему будут подключаться и коммерческие объекты у которых могут быть различные правила, связанные с безопасностью или могут появиться дополнительные правила.

Да, в данном варианте я не буду пользоваться вашим сервисом и никому его не могу предложить и причина в этом ваша реализация.

1. Ваши ПМ210 способны обращаться к другим IP адресам ?, почему спрашиваю, возможно ли в будущем развернуть ваш OwenCluod (а это по сути та же Scada система) локально у заказчика и настроить ПМ210 на IP развернутого сервера ? где то вы ответили что этого сделать нельзя - Это первое упущение.
2. Я не просто спросил, можно ли настроить шифрование, так как сейчас это начинает внедряться, и если я поставлю заказчику ПМ210 а через пару лет заказчика обяжут защитить каналы связи, то и ПМ210 и облако на чужом сервер придется выбросить, а бесплатно у вас не все.

Собственно отступление, когда-то Овен приезжал в Краснодар и я задавал простой вопрос, когда появится следующее поколение модемом (тогда у вас были уже на то время допотопные ПМ01), в котором будет реализован VPN для возможности организации прозрачной сети без применения СИМ карт со статическим IP. Сотрудники тогда чуть ли не зуб отдавали, что идет разработка. Я ее увидел, это ПМ210, где не реализовано НИЧЕГО для возможности перехода с облака, предоставляемого производителем на локальные сервера. Просто печально.

угу, любой впн шифруется, вот когда столкнетесь с необходимостью наличия сертификатов по ГОСТ, вот тогда пляски начинаются. Имея роутер и свисток, все решаемо. Имея ПМ210 их придется выбросить.

собственно к чему я все это, все мы прекрасно помним проект Модус - дальше продолжать ?

lara197a Совершенно верно, Scada требует статического IP, статические IP для клиентов в VPN не требуются.

capzap
07.03.2018, 21:57
Сергей Лысов это не нападки, а реалии жизни. Для себя любимого годится любой облачный сервис, но вы забываете о простой вещи, делая облако, вы наверняка предполагали, что к нему будут подключаться и коммерческие объекты у которых могут быть различные правила, связанные с безопасностью или могут появиться дополнительные правила.

Да, в данном варианте я не буду пользоваться вашим сервисом и никому его не могу предложить и причина в этом ваша реализация.

1. Ваши ПМ210 способны обращаться к другим IP адресам ?, почему спрашиваю, возможно ли в будущем развернуть ваш OwenCluod (а это по сути та же Scada система) локально у заказчика и настроить ПМ210 на IP развернутого сервера ? где то вы ответили что этого сделать нельзя - Это первое упущение.
2. Я не просто спросил, можно ли настроить шифрование, так как сейчас это начинает внедряться, и если я поставлю заказчику ПМ210 а через пару лет заказчика обяжут защитить каналы связи, то и ПМ210 и облако на чужом сервер придется выбросить, а бесплатно у вас не все.

Собственно отступление, когда-то Овен приезжал в Краснодар и я задавал простой вопрос, когда появится следующее поколение модемом (тогда у вас были уже на то время допотопные ПМ01), в котором будет реализован VPN для возможности организации прозрачной сети без применения СИМ карт со статическим IP. Сотрудники тогда чуть ли не зуб отдавали, что идет разработка. Я ее увидел, это ПМ210, где не реализовано НИЧЕГО для возможности перехода с облака, предоставляемого производителем на локальные сервера. Просто печально.

угу, любой впн шифруется, вот когда столкнетесь с необходимостью наличия сертификатов по ГОСТ, вот тогда пляски начинаются. Имея роутер и свисток, все решаемо. Имея ПМ210 их придется выбросить.

собственно к чему я все это, все мы прекрасно помним проект Модус - дальше продолжать ?

lara197a Совершенно верно, Scada требует статического IP, статические IP для клиентов в VPN не требуются.

сможете выложить скрин своего сертификата по ИБ, чтоб это звучало из уст специалиста, а не человека просто просчитавшего страшилки из интернетов

melky
07.03.2018, 22:04
capzap, вы или недочитали или недопоняли. У меня нет сертификатов, если вам или заказчику необходимо шифрование по ГОСТ с сертификатом, для этого есть VipNET и еще какая-то контора или две. Вот эти вещи могут потребовать реализовать. То есть защитить каналы связи при помощи данных решений.

Мне уже приходилось с этим сталкиваться на объектах энергетиков, связанных с чемпионатом мира. Так что думаю это затронет все города, где они проходят. Ну правда там и контора посерьезнее, она точно не будет использовать чужие облака, там это строго запрещено. Отсюда и был мой 1 вопрос, возможность развернуть сервер локально

melky
07.03.2018, 22:19
Посмотрел внимательно характеристики ПМ210, не уверен вообще, что на нем можно реализовать VPN, хотя старые свистки модемы вроде не мешают этому.
2 пункт пока снимается. Потому что без 1-ого пункта ПМ210 привлекает разве что ценой.

capzap
07.03.2018, 22:21
capzap, вы или недочитали или недопоняли. У меня нет сертификатов
Т.е Вы поверхностно знаете всю суть защищенных сетей, Вы не специалист по информационной безопасности. Разместив у себя локальный сервер, как раз на Вас и ляжет проблема обеспечить соответствие программной и аппаратной поддержки требований ФСТЭК и ФСБ.

ЗЫ хотябы этот документ прочтите https://fstec.ru/normotvorcheskaya/akty/53-prikazy/702-prikaz-fstek-rossii-ot-11-fevralya-2013-g-n-17, ни чего запредельного не требуется

ASo
07.03.2018, 22:21
Отсюда и был мой 1 вопрос, возможность развернуть сервер локальноТек разверните скаду с веб-мордой, проблемы то?
Не говоря про то, что и доступ по https в этом случае должны запретить. А тогда нафига все это надо?

lara197a
07.03.2018, 23:32
Посмотрел внимательно характеристики ПМ210, не уверен вообще, что на нем можно реализовать VPN, хотя старые свистки модемы вроде не мешают этому.
2 пункт пока снимается. Потому что без 1-ого пункта ПМ210 привлекает разве что ценой.
а как по вашему организована связь в овен клауд?
после подключения ПМ210 получает динамический IP,
устанавливает связь с сервером и
передает его серверу.
или вы знаете другой способ?
я полагаю здесь используется vpn.

capzap
08.03.2018, 06:14
Все эти требования ФСТЭК касаются государственных муниципальных предприятий, Овен к ним не относится, ни кто не вправе требовать сменить собственную политику безопасности.
Пм210 можно работать только с овеновским облаком, ни к какому другому серверу он не подключиться, чтоб организовать локальное облако Овен должен передать приватные ключи, это как просить ключи от квартиры где деньги лежат

SA104
08.03.2018, 07:02
Доброго времени.
На первой странице темы упомянуто, что СПК207 можно подключить к облаку без использования шлюза.
Если это так, можно ли выложить такую же инструкция по подключению, как для ПЛК?

capzap
08.03.2018, 07:34
Доброго времени.
На первой странице темы упомянуто, что СПК207 можно подключить к облаку без использования шлюза.
Если это так, можно ли выложить такую же инструкция по подключению, как для ПЛК?

так вроде так же по мас адресу, потому что в модули ввода-вывода с ethernet зашит идентификатор, который можно узнать через конфигуратор, этот вариант точно не подходит

Евгений Кислов
08.03.2018, 07:45
Доброго времени.
На первой странице темы упомянуто, что СПК207 можно подключить к облаку без использования шлюза.
Если это так, можно ли выложить такую же инструкция по подключению, как для ПЛК?

Добрый день. Эта инструкция входит в состав РП:
http://www.owen.ru/forum/attachment.php?attachmentid=35457&d=1518092495

SA104
08.03.2018, 09:07
Спасибо за ссылку, продолжу свои эксперименты )

melky
08.03.2018, 12:26
Т.е Вы поверхностно знаете всю суть защищенных сетей, Вы не специалист по информационной безопасности. Разместив у себя локальный сервер, как раз на Вас и ляжет проблема обеспечить соответствие программной и аппаратной поддержки требований ФСТЭК и ФСБ.

ЗЫ хотябы этот документ прочтите https://fstec.ru/normotvorcheskaya/akty/53-prikazy/702-prikaz-fstek-rossii-ot-11-fevralya-2013-g-n-17, ни чего запредельного не требуется

Лично мне и не надо много знать из ИБ. просто были объекты где сейчас твори что хочешь (Тот же Овенклоуд), а завтра бац, и как это все добро защитить с учетом сертификатов ФСТЭК.

lara197a так никто же и не спорит, что оно как-то так и работает. Просто в продукции должен быть вариант выбора. Я так считаю.
Например.
1. как есть подключаемся к облаку производителя
2. развертываем облако производителя на локальном сервере, ключи в виде флеш или еще как не суть важно
3. используем модем вообще со своими серверами VPN и со сторонней Scada, закинув в устройство собственные сертификаты и настройки VPN (кстати именно такой вариант ожидался от их нового детища несколько лет назад)

в итоге получили из обещанного только п.1

capzap
08.03.2018, 12:56
Лично мне и не надо много знать из ИБ. просто были объекты где сейчас твори что хочешь (Тот же Овенклоуд), а завтра бац, и как это все добро защитить с учетом сертификатов ФСТЭК.

ни какого бац не будет, ну как еще объяснить, например хоть раз пользовались сайтом госуслуг, что разве для его посещения Вы приобретаете сертифицированное устройство? Или допускаете что он не имеет сертификата ФСТЭК?
Вам уже модераторы объясняли, что не заставляйте себя пользоваться облаком, ищите другое решение

ЗЫ вот кстати https://xakep.ru/2018/03/08/ssl-tls-fuckup/ сегодня статья вышла с действительными проблемами защищенного соединения, касающихся и облаков тоже, а ни как отсутстввие или наличие впн

melky
08.03.2018, 15:11
capzap мне пришлось пользоваться VipNET и разбираться с ним, чтобы понять, что и как я могу защитить им в АСУТП или АСКУЭ.
Сайты госуслуг тут совершенно ни при чем и никаким боком.
Установить его на ПМ210 скорее всего и не удастся, покупать его ради подобной забавы я точно не буду, дать его в пользование Овен вероятнее всего не захочет с предоставлением прошивок и т.д. если он на базе Linux сделан, что вряд ли.

з.ы. всего лишь указал на ошибки в разработке, по моему мнению. Так как это приведет в дальнейшем к появления ПМ220, 310, и т.д. в то время когда можно было обойтись одним устройством на разные варианты реализации построения сетей.
з.з.ы. Больше не буду участвовать в теме облака, дабы не обижать постоянных обитателей. Удачи.

ASo
08.03.2018, 17:34
Да нет тут ошибки в разработке. Устройство разработано под конкретную задачу, для использования "из коробки"
Не стояло цели сделать универсальный сотовый роутер. Нужен такой возьмите у другого, в т.ч. российского производителя. С линуксом и пр. открытыми фичами внутри. Проблемы то.

Одесса
12.03.2018, 14:59
Прошу ответа у знающих людей. Прошу прощения за недопонимание. Ну от например. Есть у меня какая-то приблуда
и за ней я в облаке хочу следить. По Вашему я должен купить какую то кибернетику . Потом при ее помощи подсоединить
свою приблуду к Вашему облаку. И наблюдать ,как моя приблуду дышит. Ну так я легко регистрируюсь на Thingcpeak ,
за бесплатно резервирую канал и так само наблюдаю за своей приблудой с графиками и пр. Математическими услугами
которые предоставляет сервис облака.
Вопрос зачем покупать у Вас шлюзы ? Зачем мне надо Ваше недавно рождённое облако с нерешёнными проблемами,
если есть надёжный thingcpeak ,которым пользуется весь мир и при этом без Вашего шлюзования.

capzap
12.03.2018, 15:07
Прошу ответа у знающих людей. Прошу прощения за недопонимание. Ну от например. Есть у меня какая-то приблуда
и за ней я в облаке хочу следить. По Вашему я должен купить какую то кибернетику . Потом при ее помощи подсоединить
свою приблуду к Вашему облаку. И наблюдать ,как моя приблуду дышит. Ну так я легко регистрируюсь на Thingcpeak ,
за бесплатно резервирую канал и так само наблюдаю за своей приблудой с графиками и пр. Математическими услугами
которые предоставляет сервис облака.
Вопрос зачем покупать у Вас шлюзы ? Зачем мне надо Ваше недавно рождённое облако с нерешёнными проблемами,
если есть надёжный thingcpeak ,которым пользуется весь мир и при этом без Вашего шлюзования.
шлюз нужен соединять устройства с интерфейсом RS485 к облаку. А по всему остальному, взять тот же microsoft, дает он доступ к OneDrive, это же не мешает пользователю подключаться к другим хранилищам, в чем претензия то? Просто SaaS заточеный под собственные приборы, Вам не спится что ли из-за этого

lara197a
12.03.2018, 15:10
Прошу ответа у знающих людей. Прошу прощения за недопонимание. ...
твоя приблуда работает только с ардуино или устройством формирующим запросы.
а шлюз овен работает с устройствами модбас.
для этого и покупают.
ну и модем стоит ничуть не дешевле шлюза,
а работать с ним удобнее.

Massmeter
12.03.2018, 15:18
Уважаемый Администратор. Вдруг перестала работать "запись параметров". Логин massmeter@gmail.com. Совсем недавно все работало.

Сергей Лысов
12.03.2018, 15:37
Вопрос зачем покупать у Вас шлюзы ? Зачем мне надо Ваше недавно рождённое облако с нерешёнными проблемами,
если есть надёжный thingcpeak ,которым пользуется весь мир и при этом без Вашего шлюзования.

Вы в праве использовать любое решение, которое сочтёте нужным. Мы не настаиваем. Рынок свободный, вариантов великое множество.
Мне было очень интересно наблюдать за вашим диалогом в соседней ветке форуме. Прошу вас, в этой ветке флуд и отвлечённые беседы не разводить. Для рассуждений есть ветка "трёп, курилка (http://www.owen.ru/forum/forumdisplay.php?f=6)".

КИП
12.03.2018, 23:23
Подскажите при проблемах с OwenCloud на какую электронную почту писать для более быстрого реагирования?
Какое время реакции на проблему, например в выходной день?

dsyabitov
13.03.2018, 17:25
Уважаемый Администратор. Вдруг перестала работать "запись параметров". Логин massmeter@gmail.com. Совсем недавно все работало.

Здравствуйте. Проблема в каком-то одном параметре или во всех?

dsyabitov
13.03.2018, 17:33
Подскажите при проблемах с OwenCloud на какую электронную почту писать для более быстрого реагирования?
Какое время реакции на проблему, например в выходной день?

Здравствуйте.
Время реакции зависит от тяжести - затронуто одно устройство или все. Или это может быть проблема с доступом к вэб-серверам, затрагивающая всех пользователей.
Если проблемы с подключением нового устройства или настройками - можно писать сюда или в саппорт. Если вдруг что-то совсем глобальное и наша система мониторинга это пропустила - звонить в саппорт.

rovki
13.03.2018, 17:49
А если в часах ,днях -какое время реакции поддержки ?

dsyabitov
13.03.2018, 18:39
А если в часах ,днях -какое время реакции поддержки ?

Здравствуйте. От нескольких минут и больше в зависимости от проблемы, времени суток, занятости специалистов.

Massmeter
14.03.2018, 12:10
Здравствуйте. Проблема в каком-то одном параметре или во всех?

Проблема со всеми параметрами на запись. Иногда работает, иногда нет Вот 14.03.2018 в 12-04 работать не хочет никак. Логин massmeter@gmail.com

Massmeter
14.03.2018, 12:19
Здравствуйте. Проблема в каком-то одном параметре или во всех?

Вот скрин экрана на 12-16. Команда отправлена в 12-14

dsyabitov
14.03.2018, 13:31
Проблема со всеми параметрами на запись. Иногда работает, иногда нет Вот 14.03.2018 в 12-04 работать не хочет никак. Логин massmeter@gmail.com

Здравствуйте.
Проверьте личку.

Герман Евсеев
16.03.2018, 06:22
Здравствуйте!
Возможно ли подцепить ТРМ202 с RS485 через данное устройство ([ссылка удалена]) к OwenCloud?
И вопрос второй: Есть ли возможность вывода данных через ПМ210 в OwenCloud по параметрам, без деления на приборы? Для диспетчеров неудобно искать необходимые параметры по приборам, о которых они имеют весьма смутное представление. А количество параметров превышает 8, поэтому и количество МВ110 более одного. Т.е. желательно, после раскрытия категории видеть все параметры данного объекта одним списком.

Сергей Лысов
16.03.2018, 06:52
Здравствуйте!
Возможно ли подцепить ТРМ202 с RS485 через данное устройство ([ссылка удалена]) к OwenCloud?

Доброе утро.
OwenCloud не поддерживает работу со сторонними модемами. Для подключения ТРМ202 можно использовать ПМ210 (ссылка (http://www.owen.ru/catalog/40836687))



И вопрос второй: Есть ли возможность вывода данных через ПМ210 в OwenCloud по параметрам, без деления на приборы? Для диспетчеров неудобно искать необходимые параметры по приборам, о которых они имеют весьма смутное представление. А количество параметров превышает 8, поэтому и количество МВ110 более одного. Т.е. желательно, после раскрытия категории видеть все параметры данного объекта одним списком.

Сейчас сервис группирует параметры по приборам. Функционал группировки по цехам/предприятиям есть в планах разработки.

Герман Евсеев
16.03.2018, 07:49
Доброе утро.
OwenCloud не поддерживает работу со сторонними модемами. Для подключения ТРМ202 можно использовать ПМ210 (ссылка (http://www.owen.ru/catalog/40836687))



Сейчас сервис группирует параметры по приборам. Функционал группировки по цехам/предприятиям есть в планах разработки.

Спасибо, понял.

Sergey788
16.03.2018, 11:51
подскажите почему параметр F-01 (корректировка температуры наружного воздуха) не воспринимает отрицательные значения пишет что "Новые значения некорректны. Для записи в прибор введите корректные новые значения параметров". Прибор трм-32. Щ7 введен в облако как шаблон "Произвольное устройство Modbus". Может быть что то делаю не так. Хотя положительные значения воспринимает и записывает

Massmeter
16.03.2018, 17:03
Здравствуйте.
Проверьте личку.

Спасибо за совет. Все работает отлично.

dsyabitov
16.03.2018, 17:48
подскажите почему параметр F-01 (корректировка температуры наружного воздуха) не воспринимает отрицательные значения пишет что "Новые значения некорректны. Для записи в прибор введите корректные новые значения параметров". Прибор трм-32. Щ7 введен в облако как шаблон "Произвольное устройство Modbus". Может быть что то делаю не так. Хотя положительные значения воспринимает и записывает

Здравствуйте. Вы типом переменной не ошиблись?

dsyabitov
16.03.2018, 17:48
Спасибо за совет. Все работает отлично.

Не за что!

Sergey788
17.03.2018, 06:24
да нет. вбиваю положительное число затем проверяю трм все правильно записывается F-01. А когда отрицательное хочу вписать с OwenCloud пишет "Новые значения некорректны. Для записи в прибор введите корректные новые значения параметров". В шаблоне может быть что-то не так ? Программа и записывать то не начинает а сразу выдает эту ошибку как будто в шаблоне в этот параметр отрицательные значения нельзя вписывать

dsyabitov
17.03.2018, 08:41
да нет. вбиваю положительное число затем проверяю трм все правильно записывается F-01. А когда отрицательное хочу вписать с OwenCloud пишет "Новые значения некорректны. Для записи в прибор введите корректные новые значения параметров". В шаблоне может быть что-то не так ? Программа и записывать то не начинает а сразу выдает эту ошибку как будто в шаблоне в этот параметр отрицательные значения нельзя вписывать

Пришлите, пожалуйста, скриншот с настройками параметров Вашего устройства.

КИП
20.03.2018, 14:31
В моем аккаунте днем обновление данных, на странице параметры происходит не периодически.
То нормально 10-15сек., то несколько минут.
А на самом деле глядя на таблицы и графики обновление происходит нормально.
В ночное время обновление происходит почти нормально.
Кстати в тестовом аккаунте такая же проблема.
Интернет у меня нормальный.
Когда исправите проблему?
Уже прошел почти месяц, когда исправите проблему?

Сергей Лысов
21.03.2018, 15:15
Уже прошел почти месяц, когда исправите проблему?

Проблема частично решена. На сервере внесём изменения на следующей неделе вместе с обновлением.

Герман Евсеев
22.03.2018, 03:18
Подскажите когда появятся мнемосхемы? Ожидать ли этот функционал в этом году?

dsyabitov
23.03.2018, 12:19
Подскажите когда появятся мнемосхемы? Ожидать ли этот функционал в этом году?

Здравствуйте.

Точных сроков нет, но сами ожидаем в этом году, скорее к его концу.

Finn2
26.03.2018, 20:18
Здравствуйте! Подскажите, пожалуйста, существует ли возможность удалить данные из облака? Причина - система в отладке, накапливается определенный "мусор", при вводе в эксплуатацию желательно иметь "чистый" архив данных.

dsyabitov
26.03.2018, 20:50
Здравствуйте! Подскажите, пожалуйста, существует ли возможность удалить данные из облака? Причина - система в отладке, накапливается определенный "мусор", при вводе в эксплуатацию желательно иметь "чистый" архив данных.

Здравствуйте. Такой возможности не предусмотрено. Как обходной вариант - настраиваете устройство, делаете экспорт параметров в файл (актуально для модбас устройств), удаляете устройство, создаете заново и импортируете в него сохраненные настройки.

Finn2
27.03.2018, 20:38
Спасибо. Жалко, что нет такой опции. Как и опции удалять лог событий и аварий. Необходимость та же самая - передача в эксплуатацию после отладки. И просто периодическая чистка с уровня админа.
Попытался опробовать другой способ очистки - установил время хранения архива 1 день. И ничего не произошло, ни сразу, ни через сутки - данные остались тем же самым объемом с первого дня синхронизации с облаком. Несколько удивило :)

dsyabitov
27.03.2018, 21:06
А вот это завтра проверим. Спасибо!

Герман Евсеев
28.03.2018, 06:02
Добрый день! Есть возможность подцепиться для считывания к проекту demo OPC-сервером? :) Свой проект в OwenCloud есть, но приборы еще не установлены. Хотелось бы протестировать Скаду

capzap
28.03.2018, 08:13
Добрый день! Есть возможность подцепиться для считывания к проекту demo OPC-сервером? :) Свой проект в OwenCloud есть, но приборы еще не установлены. Хотелось бы протестировать Скаду

скачайте с сайта hmisys.com симулятор слейва и используйте его в качестве демки прибора, я именно так и делаю

Герман Евсеев
28.03.2018, 08:37
скачайте с сайта hmisys.com симулятор слейва и используйте его в качестве демки прибора, я именно так и делаю

дак мне мало иметь на com Modbus-RTU (демку прибора), мне надо иметь его в OwenCloud, в проекте. А к проекту подцепить OPC-сервер. Предполагается приборы с rs485 через шлюзы ПМ210 в Owencloud, но сейчас они не подцеплены, а скаду надо настроить и покатать. Когда там еще приборы придут.
PeakHMISlaveSimulator скачал, но как это загнать в облако еще не догнал

capzap
28.03.2018, 08:44
у Вас есть шлюз ПМ210 к нему со стороны RS485 подключаете комп, запускаете симулятор, в настройках симулятора задаете адрес слейва, сетевые настройки, в облаке этот слейв для Вас будет как произвольное устройство модбас(можно ставить и шаблон Вашего прибора), задаете ему те же сетевые настройки, регистры указываете какие будут в приборе(если выбрано произвольное устройство), добиваетесь коннекта и все. Дальше отлаживаете скаду, тут же меняете значения регистров в слейве, чтоб видеть эти изменения в визуализации

ЗЫ на картинке вместо ПР200 как раз у меня работает такая связка, сейчас дома комп выключен, поэтому в место значений приходит ошибка по таймауту

Герман Евсеев
28.03.2018, 08:51
Спасибо. Но это я понял. Дело то в другом - сейчас отсутствует и шлюз тоже. Был бы ПМ210, я бы нашел что к нему подцепить. :)
А вообще, спасибо за ссылку. Пригодится

capzap
28.03.2018, 08:55
Дело то в другом - сейчас отсутствует и шлюз тоже
хоть какой нибудь плк1хх есть, они и без шлюзов цепляются к облаку

lara197a
28.03.2018, 12:45
Мой собственный контроллер(КДМ) с модбас работает в овен клауд.
Любое устройство модбас слейв будет работать.
ПЛК 1хх какие может иметь проблемы?

Newcomer
29.03.2018, 12:24
хоть какой нибудь плк1хх есть, они и без шлюзов цепляются к облаку

Поясните, пожалуйста, как без шлюза подключить к облаку ПЛК1хх.

Сергей Лысов
29.03.2018, 12:32
Поясните, пожалуйста, как без шлюза подключить к облаку ПЛК1хх.

Вот по этой инструкции: http://www.owen.ru/uploads/instrukciya_po_podklyucheniyu_plk1xx_k_owencloud_1 .pdf

SA104
29.03.2018, 12:33
Поясните, пожалуйста, как без шлюза подключить к облаку ПЛК1хх.

В первом посте ссылка на инструкцию по подключению есть.
Все работает ОК, только файл конфигурации , который Codesys создает при экспорте переменных не совсем корректный получается.
Потом в облаке вручную приходится править команду на запись одиночных битов.

Newcomer
29.03.2018, 12:50
Вот по этой инструкции: http://www.owen.ru/uploads/instrukciya_po_podklyucheniyu_plk1xx_k_owencloud_1 .pdf

Это просто замечательно. Хвала ОВЕН. А что на счет платы за сервис ? Что платно, а что бесплатно ?

Сергей Лысов
29.03.2018, 13:32
А что на счет платы за сервис ? Что платно, а что бесплатно ?

Облако бесплатное. Платные функции будут добавлены позже.

Сергей Лысов
30.03.2018, 18:30
Спасибо. мы уже сделали резервную прошивку и конфигуратор с новыми настройками для прибора.
с учетом особенностей овен клауд.
напишите на форуме, как получите прошивку

Пишу на форуме, прошивку получили и протестировали :)
Скачать можно тут (http://www.owen.ru/forum/showthread.php?t=26255&p=274296&viewfull=1#post274296)

andrenuga
31.03.2018, 17:19
Просто как несколько предложений:
- добавить галочку автоматическое обновление на графиках
- не сбрасывать сеанс при неактивности пользователя (приходится заново логиниться)
- добавить время срабатывания на системные события (прибор не на связи) смс нынче дорогие :)
- ну и ждем приложения под iOS

dsyabitov
31.03.2018, 22:50
Просто как несколько предложений:
- добавить галочку автоматическое обновление на графиках
- не сбрасывать сеанс при неактивности пользователя (приходится заново логиниться)
- добавить время срабатывания на системные события (прибор не на связи) смс нынче дорогие :)
- ну и ждем приложения под iOS

Здравствуйте.
1) В далеких планах
2) В окне авторизации есть галочка "Запомнить" и она работает.
3) В не очень далеких планах (одновременно с увеличением настройки интервала опроса прибора)
4) В ближайших планах нет. Разработку официального приложения будем рассматривать при большем количестве запросов пользователей.

andrenuga
01.04.2018, 13:28
Здравствуйте.
1) В далеких планах
2) В окне авторизации есть галочка "Запомнить" и она работает.
3) В не очень далеких планах (одновременно с увеличением настройки интервала опроса прибора)
4) В ближайших планах нет. Разработку официального приложения будем рассматривать при большем количестве запросов пользователей.
Здравствуйте. Спасибо за ответ.
По п.2 извиняюсь - заработало
По п.3 не совсем мне понятно. Я конечно не со всеми Вашими приборами работал, но с моим мне удалось добиться более-менее стабильной связи только на 290 сек.
Ну и еще одна "хотелка" раз уж разошелся :) :
- возможность прикрутить звуковой сигнал на события (в свое время эта функция на аналогичной системе помогла сэкономить достаточно много ден. знаков заказчика)

Finn2
01.04.2018, 16:59
Не помню, обсуждали здесь, но ситуация любопытная - если установить период опроса 300 сек, то шлюз/облако постоянно и безостановочно генерит сообщения "Прибор не на связи" со средним периодом эти же 10 минут в логе и средней продолжительностью события несколько секунд. 295 сек и меньше - никаких замечаний. Или - это проблема конкретного прибора? Или общая?

dsyabitov
02.04.2018, 06:48
Не помню, обсуждали здесь, но ситуация любопытная - если установить период опроса 300 сек, то шлюз/облако постоянно и безостановочно генерит сообщения "Прибор не на связи" со средним периодом эти же 10 минут в логе и средней продолжительностью события несколько секунд. 295 сек и меньше - никаких замечаний. Или - это проблема конкретного прибора? Или общая?

Здравствуйте.

Проблема общая, будет решаться позже.