{"version":3,"file":"coursesFeedbackShow.b012012522c672769d69.js","mappings":"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","sources":["webpack://wp/./locales/ sync ^\\.\\/.*\\.yml$","webpack://wp/./modules/courses/locales/ sync ^\\.\\/.*\\.yml$","webpack://wp/./modules/engine/koa/error/locales/network/ sync ^\\.\\/.*\\.yml$","webpack://wp/./modules/client/clientRender.js","webpack://wp/./modules/client/config.js","webpack://wp/./modules/client/delegate.js","webpack://wp/./modules/client/getCsrfCookie.js","webpack://wp/./modules/client/image.js","webpack://wp/./modules/client/notification/index.js","webpack://wp/./modules/client/spinner.js","webpack://wp/./modules/client/xhr.js","webpack://wp/./modules/engine/i18n/t.js","webpack://wp/./node_modules/babelfish/index.js","webpack://wp/./node_modules/babelfish/lib/parser.js","webpack://wp/./node_modules/plurals-cldr/index.js","webpack://wp/./modules/courses/templates/feedback/comment-form.pug","webpack://wp/./node_modules/pug-runtime/index.js","webpack://wp/./locales/ru.yml","webpack://wp/./modules/courses/locales/cert/ru.yml","webpack://wp/./modules/courses/locales/email/ru.yml","webpack://wp/./modules/courses/locales/feedback/ru.yml","webpack://wp/./modules/courses/locales/frontpage/ru.yml","webpack://wp/./modules/courses/locales/groups/ru.yml","webpack://wp/./modules/courses/locales/models/ru.yml","webpack://wp/./modules/courses/locales/ru.yml","webpack://wp/./modules/courses/locales/signup/ru.yml","webpack://wp/./modules/courses/locales/teacher/ru.yml","webpack://wp/./modules/engine/koa/error/locales/network/ru.yml","webpack://wp/webpack/bootstrap","webpack://wp/webpack/runtime/define property getters","webpack://wp/webpack/runtime/hasOwnProperty shorthand","webpack://wp/webpack/runtime/make namespace object","webpack://wp/./modules/courses/client/feedbackShow/index.js"],"sourcesContent":["var map = {\n\t\"./ru.yml\": 321\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 205;","var map = {\n\t\"./cert/ru.yml\": 533,\n\t\"./email/ru.yml\": 237,\n\t\"./feedback/ru.yml\": 648,\n\t\"./frontpage/ru.yml\": 949,\n\t\"./groups/ru.yml\": 243,\n\t\"./models/ru.yml\": 485,\n\t\"./ru.yml\": 962,\n\t\"./signup/ru.yml\": 19,\n\t\"./teacher/ru.yml\": 199\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 706;","var map = {\n\t\"./ru.yml\": 660\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 188;","const thumb = require('client/image').thumb;\nconst config = require('config');\n\nconst t = require('engine/i18n/t');\n\nmodule.exports = function(template, locals) {\n locals = locals ? Object.create(locals) : {};\n addStandardHelpers(locals);\n\n return template(locals);\n};\n\nfunction addStandardHelpers(locals) {\n locals.t = t;\n locals.thumb = thumb;\n locals.lang = config.lang;\n locals.env = config.env;\n}\n\n","module.exports = {\n lang: LANG,\n localCurrency: localCurrency,\n shopCurrency: shopCurrency,\n env: NODE_ENV,\n rateShopTo: rateShopTo,\n countryCode: countryCode,\n ordersMail: ordersMail,\n providers: providers,\n stripeKey: stripeKey,\n paypalClientId: paypalClientId,\n telegramBotId: telegramBotId,\n lookatCodeUrlBase: lookatCodeUrlBase,\n isRTL: isRTL\n};\n","\nfunction findDelegateTarget(event, selector) {\n let currentNode = event.target;\n while (currentNode) {\n if (currentNode.matches(selector)) {\n return currentNode;\n }\n\n if (currentNode == event.currentTarget) {\n break;\n }\n currentNode = currentNode.parentElement;\n }\n return null;\n}\n\n// delegate(table, 'th', click, handler)\n// table\n// thead\n// th ^*\n// code <--\nfunction delegate(topElement, selector, eventName, handler, context) {\n /* jshint -W040 */\n topElement.addEventListener(eventName, function(event) {\n let found = findDelegateTarget(event, selector);\n\n // .currentTarget is read only, I can not overwrite it to the \"found\" element\n // Object.create wrapper would break event.preventDefault()\n // so, keep in mind:\n // --> event.currentTarget is always the top-level (delegating) element!\n // use \"this\" to get the found target\n\n event.delegateTarget = found; // use instead of \"this\" in object methods\n\n if (found) {\n // if in context of object, use object as this,\n handler.call(context || this, event);\n }\n });\n}\n\ndelegate.delegateMixin = function(obj) {\n obj.delegate = function(selector, eventName, handler) {\n delegate(this.elem, selector, eventName, handler, this);\n };\n};\n\nmodule.exports = delegate;\n\n","module.exports = function() {\n let csrfCookie = document.cookie.match(/XSRF-TOKEN=([\\w-]+)/);\n return csrfCookie ? csrfCookie[1] : null;\n};\n\n","\nexports.thumb = function(url, width, height) {\n // sometimes this may be called without url\n if (!url) return url;\n\n let pixelRatio = window.devicePixelRatio;\n\n // return pixelRatio times larger image for retina\n width *= pixelRatio;\n height *= pixelRatio;\n\n let modifier = (width <= 160 && height <= 160) ? 't' :\n (width <= 320 && height <= 320) ? 'm' :\n (width <= 640 && height <= 640) ? 'i' :\n (width <= 1024 && height <= 1024) ? 'h' : '';\n\n return url.slice(0, url.lastIndexOf('.')) + modifier + url.slice(url.lastIndexOf('.'));\n};\n\n","/**\n * For new notification types extend Notification\n */\n\nlet delegate = require('client/delegate');\n\n/**\n * Calculates translateY positions when notifications are added/removed\n */\nclass NotificationManager {\n\n constructor(options = {}) {\n this.notifications = [];\n this.verticalSpace = options.verticalSpace || 8;\n }\n\n register(notification) {\n this.notifications.unshift(notification);\n setTimeout(() => this.recalculate(), 20);\n }\n\n unregister(notification) {\n let idx = this.notifications.indexOf(notification);\n this.notifications.splice(idx, 1);\n this.recalculate();\n }\n\n recalculate() {\n let top = this.verticalSpace;\n this.notifications.forEach(notification => {\n notification.top = top;\n top += notification.height + this.verticalSpace;\n });\n }\n\n}\n\n// if this module is included into different webpack builds,\n// ensure they share the same manager object\nexport function init(options) {\n if (!window.notificationManager) {\n window.notificationManager = new NotificationManager(options);\n }\n}\n\n\nclass Notification {\n\n constructor(html, type, timeout) {\n let elemHtml = `
\n
${html}
\n
`;\n\n document.body.insertAdjacentHTML(\"beforeEnd\", elemHtml);\n\n this.elem = document.body.lastElementChild;\n\n switch(timeout) {\n case undefined:\n this.timeout = this.TIMEOUT_DEFAULT;\n break;\n case 'slow':\n this.timeout = this.TIMEOUT_SLOW;\n break;\n case 'fast':\n this.timeout = this.TIMEOUT_FAST;\n break;\n default:\n this.timeout = timeout;\n }\n\n\n window.notificationManager.register(this);\n this.setupCloseHandler();\n this.setupCloseTimeout();\n }\n\n get TIMEOUT_DEFAULT() {\n return 3000;\n }\n\n get TIMEOUT_SLOW() {\n return 5000;\n }\n\n get TIMEOUT_FAST() {\n return 1500;\n }\n\n\n close() {\n if (!this.elem.parentNode) return; // already closed (by user click?)\n this.elem.remove();\n window.notificationManager.unregister(this);\n }\n\n setupCloseHandler() {\n this.delegate('.notification__close', 'click', () => this.close());\n }\n\n setupCloseTimeout() {\n if (this.timeout) {\n setTimeout(() => this.close(), this.timeout);\n }\n }\n\n get height() {\n return this.elem.offsetHeight;\n }\n\n set top(value) {\n this.elem.style.transform = 'translateY(' + value + 'px)';\n }\n\n}\n\ndelegate.delegateMixin(Notification.prototype);\n\n\nexport class Info extends Notification {\n\n constructor(html, timeout) {\n super(html, 'info', timeout);\n }\n\n}\n\nexport class Warning extends Notification {\n\n constructor(html, timeout) {\n super(html, 'warning', timeout);\n }\n}\n\nexport class Success extends Notification {\n\n constructor(html, timeout) {\n super(html, 'success', timeout);\n }\n\n}\n\nexport class Error extends Notification {\n\n constructor(html, timeout) {\n super(html, 'error', timeout);\n }\n\n\n get TIMEOUT_DEFAULT() {\n return 5000;\n }\n\n\n}\n\n/*\nexport class Test extends Notification {\n\n constructor(html) {\n super(html, 'error');\n }\n\n\n get TIMEOUT_DEFAULT() {\n return null;\n }\n\n\n}\n\nexports.Test = Test;\n*/\n","// Usage:\n// 1) new Spinner({ elem: elem}) -> start/stop()\n// 2) new Spinner() -> somewhere.append(spinner.elem) -> start/stop\nfunction Spinner(options) {\n options = options || {};\n this.elem = options.elem;\n\n this.size = options.size || 'medium';\n // any class to add to spinner (make spinner special here)\n this.class = options.class ? (' ' + options.class) : '';\n\n // any class to add to element (to hide it's content for instance)\n this.elemClass = options.elemClass;\n\n if (this.size != 'medium' && this.size != 'small' && this.size != 'large') {\n throw new Error(\"Unsupported size: \" + this.size);\n }\n\n if (!this.elem) {\n this.elem = document.createElement('div');\n }\n}\n\nSpinner.prototype.start = function() {\n if (this.elemClass) {\n this.elem.classList.toggle(this.elemClass);\n }\n\n this.elem.insertAdjacentHTML('beforeend', '');\n};\n\nSpinner.prototype.stop = function() {\n let spinnerElem = this.elem.querySelector('.spinner');\n if (!spinnerElem) return; // already stopped or never started\n\n spinnerElem.remove();\n\n if (this.elemClass) {\n this.elem.classList.toggle(this.elemClass);\n }\n};\n\nwindow.Spinner = Spinner;\n\nmodule.exports = Spinner;\n","let notification = require('client/notification');\nlet getCsrfCookie = require('client/getCsrfCookie');\n\nconst LANG = require('config').lang;\nconst t = require('engine/i18n/t');\n\nt.i18n.add('', require('../../locales/' + LANG + '.yml'));\nt.i18n.add('error.network', require('engine/koa/error/locales/network/' + LANG + '.yml'));\n\n// Wrapper about XHR\n// # Global Events\n// triggers document.loadstart/loadend on communication start/end\n// --> unless options.noGlobalEvents is set\n//\n// # Events\n// triggers fail/success on load end:\n// --> by default status=200 is ok, the others are failures\n// --> options.normalStatuses = [201,409] allow given statuses\n// --> fail event has .reason field\n// --> success event has .result field\n//\n// # JSON\n// --> send(object) calls JSON.stringify\n// --> adds Accept: json (we want json) by default, unless options.raw\n// if options.json or server returned json content type\n// --> autoparse json\n// --> fail if error\n//\n// # CSRF\n// --> requests sends header X-XSRF-TOKEN from cookie\n\nfunction xhr(options) {\n\n let request = new XMLHttpRequest();\n let method = options.method || 'GET';\n\n let body = options.body;\n let url = options.url;\n\n request.open(method, url, options.sync ? false : true);\n\n request.method = method;\n\n // token/header names same as angular $http for easier interop\n let csrfCookie = getCsrfCookie();\n if (csrfCookie && !options.skipCsrf) {\n request.setRequestHeader(\"X-XSRF-TOKEN\", csrfCookie);\n }\n\n if (options.responseType) request.responseType = options.responseType;\n\n if ({}.toString.call(body) == '[object Object]') {\n // must be OPENed to setRequestHeader\n request.setRequestHeader(\"Content-Type\", \"application/json;charset=UTF-8\");\n body = JSON.stringify(body);\n }\n\n if (!options.noDocumentEvents) {\n request.addEventListener('loadstart', event => {\n request.timeStart = Date.now();\n let e = wrapEvent('xhrstart', event);\n document.dispatchEvent(e);\n });\n request.addEventListener('loadend', event => {\n let e = wrapEvent('xhrend', event);\n document.dispatchEvent(e);\n });\n request.addEventListener('success', event => {\n let e = wrapEvent('xhrsuccess', event);\n e.result = event.result;\n document.dispatchEvent(e);\n });\n request.addEventListener('fail', event => {\n let e = wrapEvent('xhrfail', event);\n e.reason = event.reason;\n document.dispatchEvent(e);\n });\n }\n\n if (!options.raw) { // means we want json\n request.setRequestHeader(\"Accept\", \"application/json\");\n }\n\n request.setRequestHeader('X-Requested-With', \"XMLHttpRequest\");\n\n let normalStatuses = options.normalStatuses || [200];\n\n function wrapEvent(name, e) {\n let event = new CustomEvent(name);\n event.originalEvent = e;\n return event;\n }\n\n function fail(reason, originalEvent) {\n let e = wrapEvent(\"fail\", originalEvent);\n e.reason = reason;\n request.dispatchEvent(e);\n }\n\n function success(result, originalEvent) {\n let e = wrapEvent(\"success\", originalEvent);\n e.result = result;\n request.dispatchEvent(e);\n }\n\n request.addEventListener(\"error\", e => {\n fail(t('error.network.server_connection_error'), e);\n });\n\n request.addEventListener(\"timeout\", e => {\n fail(t('error.network.server_request_timeout'), e);\n });\n\n request.addEventListener(\"abort\", e => {\n fail(t('error.network.request_aborted'), e);\n });\n\n request.addEventListener(\"load\", e => {\n if (!request.status) { // does that ever happen?\n fail(t('error.network.no_response'), e);\n return;\n }\n\n let result = !options.responseType || options.responseType === 'text' ? request.responseText : request.response;\n let contentType = request.getResponseHeader(\"Content-Type\") || '';\n if (contentType.match(/^application\\/json/) || options.json) { // autoparse json if WANT or RECEIVED json\n try {\n result = JSON.parse(result);\n } catch (e) {\n fail(t('error.network.invalid_format'), e);\n return;\n }\n }\n\n if (!normalStatuses.includes(request.status)) {\n\n // if we have a JSON response with {info:..} field, show info as error details\n let errorMessage = result.info ?\n t('error.network.server_error_info', {status: request.status, info: result.info}) : t('error.network.server_error', {status: request.status});\n\n fail(errorMessage, e);\n return;\n }\n\n success(result, e);\n });\n\n // defer to let other handlers be assigned\n setTimeout(function() {\n request.send(body);\n });\n\n return request;\n\n}\n\n\ndocument.addEventListener('xhrfail', function(event) {\n new notification.Error(event.reason);\n});\n\n\nmodule.exports = xhr;\n","'use strict';\n\nconst BabelFish = require('babelfish');\n\nconst i18n = new BabelFish('en');\n\nlet err = console.error;\n\nif (typeof IS_CLIENT === 'undefined') {\n const log = require('engine/log')();\n err = (...args) => log.error(...args);\n}\n\nfunction t(phrase) {\n\n if (!i18n.hasPhrase(LANG, phrase)) {\n if (process.env.NODE_ENV !== 'production' || process.env.I18N_DEBUG) {\n // silent in production to avoid spamming the logs\n err(\"No such phrase\", phrase);\n }\n }\n\n return i18n.t(LANG, ...arguments);\n}\n\nmodule.exports = t;\n\nconst LANG = require('config').lang;\n\nif (LANG !== 'en') {\n i18n.setFallback(LANG, 'en');\n}\n\ni18n.add = (...args) => {\n args = args.map(arg => arg.__esModule ? arg.default : arg);\n return i18n.addPhrase(LANG, ...args);\n};\n\nt.i18n = i18n;\n","/**\n * class BabelFish\n *\n * Internalization and localization library that makes i18n and l10n fun again.\n *\n * ##### Example\n *\n * ```javascript\n * var BabelFish = require('babelfish'),\n * i18n = new BabelFish();\n * ```\n *\n * or\n *\n * ```javascript\n * var babelfish = require('babelfish'),\n * i18n = babelfish();\n * ```\n **/\n\n\n'use strict';\n\n\nvar parser = require('./lib/parser');\nvar plural = require('plurals-cldr');\n\nfunction _class(obj) { return Object.prototype.toString.call(obj); }\n\nfunction isString(obj) { return _class(obj) === '[object String]'; }\nfunction isNumber(obj) { return !isNaN(obj) && isFinite(obj); }\nfunction isBoolean(obj) { return obj === true || obj === false; }\nfunction isFunction(obj) { return _class(obj) === '[object Function]'; }\nfunction isObject(obj) { return _class(obj) === '[object Object]'; }\n\n/*istanbul ignore next*/\nvar isArray = Array.isArray || function _isArray(obj) {\n return _class(obj) === '[object Array]';\n};\n\n\n////////////////////////////////////////////////////////////////////////////////\n// The following two utilities (forEach and extend) are modified from Underscore\n//\n// http://underscorejs.org\n//\n// (c) 2009-2013 Jeremy Ashkenas, DocumentCloud Inc.\n//\n// Underscore may be freely distributed under the MIT license\n////////////////////////////////////////////////////////////////////////////////\n\n\nvar nativeForEach = Array.prototype.forEach;\n\n\n// The cornerstone, an `each` implementation, aka `forEach`.\n// Handles objects with the built-in `forEach`, arrays, and raw objects.\n// Delegates to **ECMAScript 5**'s native `forEach` if available.\n/*istanbul ignore next*/\nfunction forEach(obj, iterator, context) {\n if (obj === null) {\n return;\n }\n if (nativeForEach && obj.forEach === nativeForEach) {\n obj.forEach(iterator, context);\n } else if (obj.length === +obj.length) {\n for (var i = 0, l = obj.length; i < l; i += 1) {\n iterator.call(context, obj[i], i, obj);\n }\n } else {\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n iterator.call(context, obj[key], key, obj);\n }\n }\n }\n}\n\n\nvar formatRegExp = /%[sdj%]/g;\n\n/*istanbul ignore next*/\nfunction format(f) {\n var i = 1;\n var args = arguments;\n var len = args.length;\n var str = String(f).replace(formatRegExp, function (x) {\n if (x === '%%') { return '%'; }\n if (i >= len) { return x; }\n switch (x) {\n case '%s':\n return String(args[i++]);\n case '%d':\n return Number(args[i++]);\n case '%j':\n return JSON.stringify(args[i++]);\n default:\n return x;\n }\n });\n return str;\n}\n\n\n// helpers\n////////////////////////////////////////////////////////////////////////////////\n\n\n// Last resort locale, that exists for sure\nvar GENERIC_LOCALE = 'en';\n\n\n// flatten(obj) -> Object\n//\n// Flattens object into one-level dictionary.\n//\n// ##### Example\n//\n// var obj = {\n// abc: { def: 'foo' },\n// hij: 'bar'\n// };\n//\n// flatten(obj);\n// // -> { 'abc.def': 'foo', 'hij': 'bar' };\n//\nfunction flatten(obj) {\n var params = {};\n\n forEach(obj || {}, function (val, key) {\n if (val && typeof val === 'object') {\n forEach(flatten(val), function (sub_val, sub_key) {\n params[key + '.' + sub_key] = sub_val;\n });\n return;\n }\n\n params[key] = val;\n });\n\n return params;\n}\n\n\nvar keySeparator = '#@$';\n\nfunction makePhraseKey(locale, phrase) {\n return locale + keySeparator + phrase;\n}\n\n\nfunction searchPhraseKey(self, locale, phrase) {\n var key = makePhraseKey(locale, phrase);\n var storage = self._storage;\n\n // direct search first\n if (storage.hasOwnProperty(key)) { return key; }\n\n // don't try follbacks for default locale\n if (locale === self._defaultLocale) { return null; }\n\n // search via fallback map cache\n var fb_cache = self._fallbacks_cache;\n if (fb_cache.hasOwnProperty(key)) { return fb_cache[key]; }\n\n // scan fallbacks & cache result\n var fb = self._fallbacks[locale] || [ self._defaultLocale ];\n var fb_key;\n\n for (var i = 0, l = fb.length; i < l; i++) {\n fb_key = makePhraseKey(fb[i], phrase);\n if (storage.hasOwnProperty(fb_key)) {\n // found - update cache and return result\n fb_cache[key] = fb_key;\n return fb_cache[key];\n }\n }\n\n // mark fb_cache entry empty for fast lookup on next request\n fb_cache[key] = null;\n return null;\n}\n\n\nfunction pluralizer(lang, val, forms) {\n var idx = plural.indexOf(lang, val);\n\n if (idx === -1) {\n return format('[pluralizer for \"%s\" locale not found]', lang);\n }\n\n if (typeof forms[idx] === 'undefined') {\n return format(\n '[plural form %d (\"%s\") not found in translation]',\n idx, plural.forms(lang)[idx]\n );\n }\n\n return forms[idx];\n}\n\n// public api (module)\n////////////////////////////////////////////////////////////////////////////////\n\n\n/**\n * new BabelFish([defaultLocale = 'en'])\n *\n * Initiates new instance of BabelFish.\n *\n * __Note!__ you can omit `new` for convenience, direct call will return\n * new instance too.\n **/\nfunction BabelFish(defaultLocale) {\n if (!(this instanceof BabelFish)) { return new BabelFish(defaultLocale); }\n\n this._defaultLocale = defaultLocale ? String(defaultLocale) : GENERIC_LOCALE;\n\n // hash of locale => [ fallback1, fallback2, ... ] pairs\n this._fallbacks = {};\n\n // fallback cache for each phrase\n //\n // {\n // locale_key: fallback_key\n // }\n //\n // fallback_key can be null if search failed\n //\n this._fallbacks_cache = {};\n\n // storage of compiled translations\n //\n // {\n // locale + @#$ + phrase_key: {\n // locale: locale name - can be different for fallbacks\n // translation: original translation phrase or data variable/object\n // raw: true/false - does translation contain plain data or\n // string to compile\n // compiled: copiled translation fn or plain string\n // }\n // ...\n // }\n //\n this._storage = {};\n\n // cache for complex plural parts (with params)\n //\n // {\n // language: new BabelFish(language)\n // }\n //\n this._plurals_cache = {};\n}\n\n\n// public api (instance)\n////////////////////////////////////////////////////////////////////////////////\n\n\n/**\n * BabelFish#addPhrase(locale, phrase, translation [, flattenLevel]) -> BabelFish\n * - locale (String): Locale of translation\n * - phrase (String|Null): Phrase ID, e.g. `apps.forum`\n * - translation (String|Object|Array|Number|Boolean): Translation or an object\n * with nested phrases, or a pure object.\n * - flattenLevel (Number|Boolean): Optional, 0..infinity. `Infinity` by default.\n * Define \"flatten\" deepness for loaded object. You can also use\n * `true` as `0` or `false` as `Infinity`.\n *\n *\n * ##### Flatten & using JS objects\n *\n * By default all nested properties are normalized to strings like \"foo.bar.baz\",\n * and if value is string, it will be compiled with babelfish notation.\n * If deepness is above `flattenLevel` OR value is not object and not string,\n * it will be used \"as is\". Note, only JSON stringifiable data should be used.\n *\n * In short: you can safely pass `Array`, `Number` or `Boolean`. For objects you\n * should define flatten level or disable it compleetely, to work with pure data.\n *\n * Pure objects can be useful to prepare bulk data for external libraries, like\n * calendars, time/date generators and so on.\n *\n * ##### Example\n *\n * ```javascript\n * i18n.addPhrase('ru-RU',\n * 'apps.forums.replies_count',\n * '#{count} %{ответ|ответа|ответов}:count в теме');\n *\n * // equals to:\n * i18n.addPhrase('ru-RU',\n * 'apps.forums',\n * { replies_count: '#{count} %{ответ|ответа|ответов}:count в теме' });\n * ```\n **/\nBabelFish.prototype.addPhrase = function _addPhrase(locale, phrase, translation, flattenLevel) {\n var self = this, fl;\n\n // Calculate flatten level. Infinity by default\n if (isBoolean(flattenLevel)) {\n fl = flattenLevel ? Infinity : 0;\n } else if (isNumber(flattenLevel)) {\n fl = Math.floor(flattenLevel);\n if (fl < 0) {\n throw new TypeError('Invalid flatten level (should be >= 0).');\n }\n } else {\n fl = Infinity;\n }\n\n if (isObject(translation) && (fl > 0)) {\n // recursive object walk, until flattenLevel allows\n forEach(translation, function (val, key) {\n self.addPhrase(locale, (phrase ? phrase + '.' : '') + key, val, fl - 1);\n });\n return this;\n }\n\n if (isString(translation)) {\n this._storage[makePhraseKey(locale, phrase)] = {\n translation: translation,\n locale: locale,\n raw: false\n };\n } else if (isArray(translation) ||\n isNumber(translation) ||\n isBoolean(translation) ||\n (fl === 0 && isObject(translation))) {\n // Pure objects are stored without compilation\n // Limit allowed types.\n this._storage[makePhraseKey(locale, phrase)] = {\n translation: translation,\n locale: locale,\n raw: true\n };\n } else {\n // `Regex`, `Date`, `Uint8Array` and others types will\n // fuckup `stringify()`. Don't allow here.\n // `undefined` also means wrong param in real life.\n // `null` can be allowed when examples from real life available.\n throw new TypeError('Invalid translation - [String|Object|Array|Number|Boolean] expected.');\n }\n\n self._fallbacks_cache = {};\n\n return this;\n};\n\n\n/**\n * BabelFish#setFallback(locale, fallbacks) -> BabelFish\n * - locale (String): Target locale\n * - fallbacks (Array): List of fallback locales\n *\n * Set fallbacks for given locale.\n *\n * When `locale` has no translation for the phrase, `fallbacks[0]` will be\n * tried, if translation still not found, then `fallbacks[1]` will be tried\n * and so on. If none of fallbacks have translation,\n * default locale will be tried as last resort.\n *\n * ##### Errors\n *\n * - throws `Error`, when `locale` equals default locale\n *\n * ##### Example\n *\n * ```javascript\n * i18n.setFallback('ua-UK', ['ua', 'ru']);\n * ```\n **/\nBabelFish.prototype.setFallback = function _setFallback(locale, fallbacks) {\n var def = this._defaultLocale;\n\n if (def === locale) {\n throw new Error(\"Default locale can't have fallbacks\");\n }\n\n var fb = isArray(fallbacks) ? fallbacks.slice() : [ fallbacks ];\n if (fb[fb.length - 1] !== def) { fb.push(def); }\n\n this._fallbacks[locale] = fb;\n this._fallbacks_cache = {};\n\n return this;\n};\n\n\nvar CAN_HAVE_DIRECTIVES_RE = /#\\{|\\(\\(|\\\\\\\\/;\n\n// Compiles given string into function. Used to compile phrases,\n// which contains `plurals`, `variables`, etc.\nfunction compile(self, str, locale) {\n var nodes, buf, key, strict_exec, forms_exec, plurals_cache;\n\n // Quick check to avoid parse in most cases :)\n if (!CAN_HAVE_DIRECTIVES_RE.test(str)) { return str; }\n\n nodes = parser.parse(str);\n\n if (nodes.length === 1 && nodes[0].type === 'literal') {\n return nodes[0].text;\n }\n\n // init cache instance for plural parts, if not exists yet.\n if (!self._plurals_cache[locale]) {\n self._plurals_cache[locale] = new BabelFish(locale);\n }\n plurals_cache = self._plurals_cache[locale];\n\n buf = [];\n buf.push([ 'var str = \"\", strict, strict_exec, forms, forms_exec, plrl, cache, loc, loc_plzr, anchor;' ]);\n buf.push('params = flatten(params);');\n\n forEach(nodes, function (node) {\n if (node.type === 'literal') {\n buf.push(format('str += %j;', node.text));\n return;\n }\n\n if (node.type === 'variable') {\n key = node.anchor;\n buf.push(format(\n 'str += (\"undefined\" === typeof (params[%j])) ? \"[missed variable: %s]\" : params[%j];',\n key, key, key\n ));\n return;\n }\n\n // should never happen\n /*istanbul ignore next*/\n if (node.type !== 'plural') { throw new Error('Unknown node type'); }\n\n //\n // Compile plural\n //\n\n key = node.anchor;\n // check if plural parts are plain strings or executable,\n // and add executable to \"cache\" instance of babelfish\n // plural part text will be used as translation key\n strict_exec = {};\n forEach(node.strict, function (text, k) {\n var parsed = parser.parse(text);\n if (parsed.length === 1 && parsed[0].type === 'literal') {\n strict_exec[k] = false;\n // patch with unescaped value for direct extract\n node.strict[k] = parsed[0].text;\n return;\n }\n\n strict_exec[k] = true;\n if (!plurals_cache.hasPhrase(locale, text, true)) {\n plurals_cache.addPhrase(locale, text, text);\n }\n });\n\n forms_exec = {};\n forEach(node.forms, function (text, idx) {\n var parsed = parser.parse(text), unescaped;\n if (parsed.length === 1 && parsed[0].type === 'literal') {\n // patch with unescaped value for direct extract\n unescaped = parsed[0].text;\n node.forms[idx] = unescaped;\n forms_exec[unescaped] = false;\n return;\n }\n\n forms_exec[text] = true;\n if (!plurals_cache.hasPhrase(locale, text, true)) {\n plurals_cache.addPhrase(locale, text, text);\n }\n });\n /*eslint-disable space-in-parens*/\n buf.push(format('loc = %j;', locale));\n buf.push(format('loc_plzr = %j;', locale.split(/[-_]/)[0]));\n buf.push(format('anchor = params[%j];', key));\n buf.push(format('cache = this._plurals_cache[loc];'));\n buf.push(format('strict = %j;', node.strict));\n buf.push(format('strict_exec = %j;', strict_exec));\n buf.push(format('forms = %j;', node.forms));\n buf.push(format('forms_exec = %j;', forms_exec));\n buf.push( 'if (+(anchor) != anchor) {');\n buf.push(format(' str += \"[invalid plurals amount: %s(\" + anchor + \")]\";', key));\n buf.push( '} else {');\n buf.push( ' if (strict[anchor] !== undefined) {');\n buf.push( ' plrl = strict[anchor];');\n buf.push( ' str += strict_exec[anchor] ? cache.t(loc, plrl, params) : plrl;');\n buf.push( ' } else {');\n buf.push( ' plrl = pluralizer(loc_plzr, +anchor, forms);');\n buf.push( ' str += forms_exec[plrl] ? cache.t(loc, plrl, params) : plrl;');\n buf.push( ' }');\n buf.push( '}');\n return;\n });\n\n buf.push('return str;');\n\n /*eslint-disable no-new-func*/\n return new Function('params', 'flatten', 'pluralizer', buf.join('\\n'));\n}\n\n\n/**\n * BabelFish#translate(locale, phrase[, params]) -> String\n * - locale (String): Locale of translation\n * - phrase (String): Phrase ID, e.g. `app.forums.replies_count`\n * - params (Object|Number|String): Params for translation. `Number` & `String`\n * will be coerced to `{ count: X, value: X }`\n *\n * ##### Example\n *\n * ```javascript\n * i18n.addPhrase('ru-RU',\n * 'apps.forums.replies_count',\n * '#{count} ((ответ|ответа|ответов)) в теме');\n *\n * // ...\n *\n * i18n.translate('ru-RU', 'app.forums.replies_count', { count: 1 });\n * i18n.translate('ru-RU', 'app.forums.replies_count', 1});\n * // -> '1 ответ'\n *\n * i18n.translate('ru-RU', 'app.forums.replies_count', { count: 2 });\n * i18n.translate('ru-RU', 'app.forums.replies_count', 2);\n * // -> '2 ответa'\n * ```\n **/\nBabelFish.prototype.translate = function _translate(locale, phrase, params) {\n var key = searchPhraseKey(this, locale, phrase);\n var data;\n\n if (!key) {\n return locale + ': No translation for [' + phrase + ']';\n }\n\n data = this._storage[key];\n\n // simple string or other pure object\n if (data.raw) { return data.translation; }\n\n // compile data if not done yet\n if (!data.hasOwnProperty('compiled')) {\n // We should use locale from phrase, because of possible fallback,\n // to keep plural locales in sync.\n data.compiled = compile(this, data.translation, data.locale);\n }\n\n // return simple string immediately\n if (!isFunction(data.compiled)) {\n return data.compiled;\n }\n\n //\n // Generate \"complex\" phrase\n //\n\n // Sugar: coerce numbers & strings to { count: X, value: X }\n if (isNumber(params) || isString(params)) {\n params = { count: params, value: params };\n }\n\n return data.compiled.call(this, params, flatten, pluralizer);\n};\n\n\n/**\n * BabelFish#hasPhrase(locale, phrase) -> Boolean\n * - locale (String): Locale of translation\n * - phrase (String): Phrase ID, e.g. `app.forums.replies_count`\n * - noFallback (Boolean): Disable search in fallbacks\n *\n * Returns whenever or not there's a translation of a `phrase`.\n **/\nBabelFish.prototype.hasPhrase = function _hasPhrase(locale, phrase, noFallback) {\n return noFallback ?\n this._storage.hasOwnProperty(makePhraseKey(locale, phrase))\n :\n searchPhraseKey(this, locale, phrase) ? true : false;\n};\n\n\n/**\n * BabelFish#getLocale(locale, phrase) -> String|null\n * - locale (String): Locale of translation\n * - phrase (String): Phrase ID, e.g. `app.forums.replies_count`\n * - noFallback (Boolean): Disable search in fallbacks\n *\n * Similar to [[BabelFish#hasPhrase]], but returns real locale of requested\n * phrase, or `null` if nothing found. Can be useful for dynamic dependencies\n * init. For example, when you fetch i10n config as single object and create\n * phrases from it's content.\n **/\nBabelFish.prototype.getLocale = function _getLocale(locale, phrase, noFallback) {\n if (noFallback) {\n return this._storage.hasOwnProperty(makePhraseKey(locale, phrase)) ? locale : null;\n }\n\n var key = searchPhraseKey(this, locale, phrase);\n\n return key ? key.split(keySeparator, 2)[0] : null;\n};\n\n\n/** alias of: BabelFish#translate\n * BabelFish#t(locale, phrase[, params]) -> String\n **/\nBabelFish.prototype.t = BabelFish.prototype.translate;\n\n\n/**\n * BabelFish#stringify(locale) -> String\n * - locale (String): Locale of translation\n *\n * Returns serialized locale data, including fallbacks.\n * It can be loaded back via `load()` method.\n **/\nBabelFish.prototype.stringify = function _stringify(locale) {\n var self = this;\n\n // Collect unique keys\n var unique = {};\n\n forEach(this._storage, function (val, key) {\n unique[key.split(keySeparator)[1]] = true;\n });\n\n // Collect phrases (with fallbacks)\n var result = {};\n\n forEach(unique, function (val, key) {\n var k = searchPhraseKey(self, locale, key);\n // if key was just a garbage from another\n // and doesn't fit into fallback chain for current locale - skip it\n if (!k) { return; }\n // create namespace if not exists\n var l = self._storage[k].locale;\n if (!result[l]) { result[l] = {}; }\n result[l][key] = self._storage[k].translation;\n });\n\n var out = {\n fallback: {},\n locales: result\n };\n\n // Get fallback rule. Cut auto-added fallback to default locale\n var fallback = (self._fallbacks[locale] || []).slice(0, -1);\n if (fallback.length) {\n out.fallback[locale] = fallback;\n }\n\n return JSON.stringify(out);\n};\n\n\n/**\n * BabelFish#load(data) -> BabelFish\n * - data (Object|String): data from `stringify()` method, as object or string.\n *\n * Batch load phrases data, prepared with `stringify()` method.\n * Useful at browser side.\n **/\nBabelFish.prototype.load = function _load(data) {\n var self = this;\n\n if (isString(data)) { data = JSON.parse(data); }\n\n forEach(data.locales, function (phrases, locale) {\n forEach(phrases, function (translation, key) {\n self.addPhrase(locale, key, translation, 0);\n });\n });\n\n forEach(data.fallback, function (rule, locale) {\n self.setFallback(locale, rule);\n });\n\n return this;\n};\n\n// export module\nmodule.exports = BabelFish;\n","module.exports = (function() {\n /*\n * Generated by PEG.js 0.8.0.\n *\n * http://pegjs.majda.cz/\n */\n\n function peg$subclass(child, parent) {\n function ctor() { this.constructor = child; }\n ctor.prototype = parent.prototype;\n child.prototype = new ctor();\n }\n\n function SyntaxError(message, expected, found, offset, line, column) {\n this.message = message;\n this.expected = expected;\n this.found = found;\n this.offset = offset;\n this.line = line;\n this.column = column;\n\n this.name = \"SyntaxError\";\n }\n\n peg$subclass(SyntaxError, Error);\n\n function parse(input) {\n var options = arguments.length > 1 ? arguments[1] : {},\n\n peg$FAILED = {},\n\n peg$startRuleFunctions = { start: peg$parsestart },\n peg$startRuleFunction = peg$parsestart,\n\n peg$c0 = [],\n peg$c1 = peg$FAILED,\n peg$c2 = \"((\",\n peg$c3 = { type: \"literal\", value: \"((\", description: \"\\\"((\\\"\" },\n peg$c4 = \"))\",\n peg$c5 = { type: \"literal\", value: \"))\", description: \"\\\"))\\\"\" },\n peg$c6 = null,\n peg$c7 = function(forms, anchor) {\n return {\n type: 'plural',\n forms: regularForms(forms),\n strict: strictForms(forms),\n anchor: anchor || 'count'\n };\n },\n peg$c8 = \"|\",\n peg$c9 = { type: \"literal\", value: \"|\", description: \"\\\"|\\\"\" },\n peg$c10 = function(part, more) {\n return [part].concat(more);\n },\n peg$c11 = function(part) {\n return [part];\n },\n peg$c12 = \"=\",\n peg$c13 = { type: \"literal\", value: \"=\", description: \"\\\"=\\\"\" },\n peg$c14 = /^[0-9]/,\n peg$c15 = { type: \"class\", value: \"[0-9]\", description: \"[0-9]\" },\n peg$c16 = \" \",\n peg$c17 = { type: \"literal\", value: \" \", description: \"\\\" \\\"\" },\n peg$c18 = function(strict, form) {\n return {\n strict: strict.join(''),\n text: form.join('')\n }\n },\n peg$c19 = function() {\n return {\n text: text()\n };\n },\n peg$c20 = \"\\\\\",\n peg$c21 = { type: \"literal\", value: \"\\\\\", description: \"\\\"\\\\\\\\\\\"\" },\n peg$c22 = /^[\\\\|)(]/,\n peg$c23 = { type: \"class\", value: \"[\\\\\\\\|)(]\", description: \"[\\\\\\\\|)(]\" },\n peg$c24 = function(char) {\n return char;\n },\n peg$c25 = void 0,\n peg$c26 = { type: \"any\", description: \"any character\" },\n peg$c27 = function() {\n return text();\n },\n peg$c28 = \":\",\n peg$c29 = { type: \"literal\", value: \":\", description: \"\\\":\\\"\" },\n peg$c30 = function(name) {\n return name;\n },\n peg$c31 = \"#{\",\n peg$c32 = { type: \"literal\", value: \"#{\", description: \"\\\"#{\\\"\" },\n peg$c33 = \"}\",\n peg$c34 = { type: \"literal\", value: \"}\", description: \"\\\"}\\\"\" },\n peg$c35 = function(anchor) {\n return {\n type: 'variable',\n anchor: anchor\n };\n },\n peg$c36 = \".\",\n peg$c37 = { type: \"literal\", value: \".\", description: \"\\\".\\\"\" },\n peg$c38 = function() {\n return text()\n },\n peg$c39 = /^[a-zA-Z_$]/,\n peg$c40 = { type: \"class\", value: \"[a-zA-Z_$]\", description: \"[a-zA-Z_$]\" },\n peg$c41 = /^[a-zA-Z0-9_$]/,\n peg$c42 = { type: \"class\", value: \"[a-zA-Z0-9_$]\", description: \"[a-zA-Z0-9_$]\" },\n peg$c43 = function(lc) { return lc; },\n peg$c44 = function(literal_chars) {\n return {\n type: 'literal',\n text: literal_chars.join('')\n };\n },\n peg$c45 = /^[\\\\#()|]/,\n peg$c46 = { type: \"class\", value: \"[\\\\\\\\#()|]\", description: \"[\\\\\\\\#()|]\" },\n\n peg$currPos = 0,\n peg$reportedPos = 0,\n peg$cachedPos = 0,\n peg$cachedPosDetails = { line: 1, column: 1, seenCR: false },\n peg$maxFailPos = 0,\n peg$maxFailExpected = [],\n peg$silentFails = 0,\n\n peg$result;\n\n if (\"startRule\" in options) {\n if (!(options.startRule in peg$startRuleFunctions)) {\n throw new Error(\"Can't start parsing from rule \\\"\" + options.startRule + \"\\\".\");\n }\n\n peg$startRuleFunction = peg$startRuleFunctions[options.startRule];\n }\n\n function text() {\n return input.substring(peg$reportedPos, peg$currPos);\n }\n\n function offset() {\n return peg$reportedPos;\n }\n\n function line() {\n return peg$computePosDetails(peg$reportedPos).line;\n }\n\n function column() {\n return peg$computePosDetails(peg$reportedPos).column;\n }\n\n function expected(description) {\n throw peg$buildException(\n null,\n [{ type: \"other\", description: description }],\n peg$reportedPos\n );\n }\n\n function error(message) {\n throw peg$buildException(message, null, peg$reportedPos);\n }\n\n function peg$computePosDetails(pos) {\n function advance(details, startPos, endPos) {\n var p, ch;\n\n for (p = startPos; p < endPos; p++) {\n ch = input.charAt(p);\n if (ch === \"\\n\") {\n if (!details.seenCR) { details.line++; }\n details.column = 1;\n details.seenCR = false;\n } else if (ch === \"\\r\" || ch === \"\\u2028\" || ch === \"\\u2029\") {\n details.line++;\n details.column = 1;\n details.seenCR = true;\n } else {\n details.column++;\n details.seenCR = false;\n }\n }\n }\n\n if (peg$cachedPos !== pos) {\n if (peg$cachedPos > pos) {\n peg$cachedPos = 0;\n peg$cachedPosDetails = { line: 1, column: 1, seenCR: false };\n }\n advance(peg$cachedPosDetails, peg$cachedPos, pos);\n peg$cachedPos = pos;\n }\n\n return peg$cachedPosDetails;\n }\n\n function peg$fail(expected) {\n if (peg$currPos < peg$maxFailPos) { return; }\n\n if (peg$currPos > peg$maxFailPos) {\n peg$maxFailPos = peg$currPos;\n peg$maxFailExpected = [];\n }\n\n peg$maxFailExpected.push(expected);\n }\n\n function peg$buildException(message, expected, pos) {\n function cleanupExpected(expected) {\n var i = 1;\n\n expected.sort(function(a, b) {\n if (a.description < b.description) {\n return -1;\n } else if (a.description > b.description) {\n return 1;\n } else {\n return 0;\n }\n });\n\n while (i < expected.length) {\n if (expected[i - 1] === expected[i]) {\n expected.splice(i, 1);\n } else {\n i++;\n }\n }\n }\n\n function buildMessage(expected, found) {\n function stringEscape(s) {\n function hex(ch) { return ch.charCodeAt(0).toString(16).toUpperCase(); }\n\n return s\n .replace(/\\\\/g, '\\\\\\\\')\n .replace(/\"/g, '\\\\\"')\n .replace(/\\x08/g, '\\\\b')\n .replace(/\\t/g, '\\\\t')\n .replace(/\\n/g, '\\\\n')\n .replace(/\\f/g, '\\\\f')\n .replace(/\\r/g, '\\\\r')\n .replace(/[\\x00-\\x07\\x0B\\x0E\\x0F]/g, function(ch) { return '\\\\x0' + hex(ch); })\n .replace(/[\\x10-\\x1F\\x80-\\xFF]/g, function(ch) { return '\\\\x' + hex(ch); })\n .replace(/[\\u0180-\\u0FFF]/g, function(ch) { return '\\\\u0' + hex(ch); })\n .replace(/[\\u1080-\\uFFFF]/g, function(ch) { return '\\\\u' + hex(ch); });\n }\n\n var expectedDescs = new Array(expected.length),\n expectedDesc, foundDesc, i;\n\n for (i = 0; i < expected.length; i++) {\n expectedDescs[i] = expected[i].description;\n }\n\n expectedDesc = expected.length > 1\n ? expectedDescs.slice(0, -1).join(\", \")\n + \" or \"\n + expectedDescs[expected.length - 1]\n : expectedDescs[0];\n\n foundDesc = found ? \"\\\"\" + stringEscape(found) + \"\\\"\" : \"end of input\";\n\n return \"Expected \" + expectedDesc + \" but \" + foundDesc + \" found.\";\n }\n\n var posDetails = peg$computePosDetails(pos),\n found = pos < input.length ? input.charAt(pos) : null;\n\n if (expected !== null) {\n cleanupExpected(expected);\n }\n\n return new SyntaxError(\n message !== null ? message : buildMessage(expected, found),\n expected,\n found,\n pos,\n posDetails.line,\n posDetails.column\n );\n }\n\n function peg$parsestart() {\n var s0, s1;\n\n s0 = [];\n s1 = peg$parseliteral();\n if (s1 === peg$FAILED) {\n s1 = peg$parseplural();\n if (s1 === peg$FAILED) {\n s1 = peg$parsevariable();\n }\n }\n while (s1 !== peg$FAILED) {\n s0.push(s1);\n s1 = peg$parseliteral();\n if (s1 === peg$FAILED) {\n s1 = peg$parseplural();\n if (s1 === peg$FAILED) {\n s1 = peg$parsevariable();\n }\n }\n }\n\n return s0;\n }\n\n function peg$parseplural() {\n var s0, s1, s2, s3, s4;\n\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c2) {\n s1 = peg$c2;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c3); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseplural_forms();\n if (s2 !== peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c4) {\n s3 = peg$c4;\n peg$currPos += 2;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c5); }\n }\n if (s3 !== peg$FAILED) {\n s4 = peg$parseplural_anchor();\n if (s4 === peg$FAILED) {\n s4 = peg$c6;\n }\n if (s4 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c7(s2, s4);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c1;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c1;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c1;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c1;\n }\n\n return s0;\n }\n\n function peg$parseplural_forms() {\n var s0, s1, s2, s3;\n\n s0 = peg$currPos;\n s1 = peg$parseplural_part();\n if (s1 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 124) {\n s2 = peg$c8;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c9); }\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parseplural_forms();\n if (s3 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c10(s1, s3);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c1;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c1;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c1;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseplural_part();\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c11(s1);\n }\n s0 = s1;\n }\n\n return s0;\n }\n\n function peg$parseplural_part() {\n var s0, s1, s2, s3, s4, s5;\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 61) {\n s1 = peg$c12;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c13); }\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n if (peg$c14.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c15); }\n }\n if (s3 !== peg$FAILED) {\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n if (peg$c14.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c15); }\n }\n }\n } else {\n s2 = peg$c1;\n }\n if (s2 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 32) {\n s3 = peg$c16;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c17); }\n }\n if (s3 === peg$FAILED) {\n s3 = peg$c6;\n }\n if (s3 !== peg$FAILED) {\n s4 = [];\n s5 = peg$parseplural_char();\n if (s5 !== peg$FAILED) {\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$parseplural_char();\n }\n } else {\n s4 = peg$c1;\n }\n if (s4 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c18(s2, s4);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c1;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c1;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c1;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c1;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parseplural_char();\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parseplural_char();\n }\n } else {\n s1 = peg$c1;\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c19();\n }\n s0 = s1;\n }\n\n return s0;\n }\n\n function peg$parseplural_char() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 92) {\n s1 = peg$c20;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c21); }\n }\n if (s1 !== peg$FAILED) {\n if (peg$c22.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c23); }\n }\n if (s2 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c24(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c1;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c1;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$currPos;\n peg$silentFails++;\n if (input.charCodeAt(peg$currPos) === 124) {\n s2 = peg$c8;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c9); }\n }\n if (s2 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c4) {\n s2 = peg$c4;\n peg$currPos += 2;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c5); }\n }\n }\n peg$silentFails--;\n if (s2 === peg$FAILED) {\n s1 = peg$c25;\n } else {\n peg$currPos = s1;\n s1 = peg$c1;\n }\n if (s1 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c26); }\n }\n if (s2 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c27();\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c1;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c1;\n }\n }\n\n return s0;\n }\n\n function peg$parseplural_anchor() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 58) {\n s1 = peg$c28;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c29); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseidentifier();\n if (s2 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c30(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c1;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c1;\n }\n\n return s0;\n }\n\n function peg$parsevariable() {\n var s0, s1, s2, s3;\n\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c31) {\n s1 = peg$c31;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c32); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseidentifier();\n if (s2 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 125) {\n s3 = peg$c33;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c34); }\n }\n if (s3 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c35(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c1;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c1;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c1;\n }\n\n return s0;\n }\n\n function peg$parseidentifier() {\n var s0, s1, s2, s3, s4;\n\n s0 = peg$currPos;\n s1 = peg$parseidentifier_part();\n if (s1 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 46) {\n s2 = peg$c36;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c37); }\n }\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parseidentifier();\n if (s4 !== peg$FAILED) {\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parseidentifier();\n }\n } else {\n s3 = peg$c1;\n }\n if (s3 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c38();\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c1;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c1;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c1;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$parseidentifier_part();\n }\n\n return s0;\n }\n\n function peg$parseidentifier_part() {\n var s0, s1, s2, s3;\n\n s0 = peg$currPos;\n if (peg$c39.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c40); }\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n if (peg$c41.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c42); }\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n if (peg$c41.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c42); }\n }\n }\n if (s2 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c27();\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c1;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c1;\n }\n\n return s0;\n }\n\n function peg$parseliteral() {\n var s0, s1, s2, s3, s4;\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$currPos;\n s3 = peg$currPos;\n peg$silentFails++;\n s4 = peg$parseplural();\n if (s4 === peg$FAILED) {\n s4 = peg$parsevariable();\n }\n peg$silentFails--;\n if (s4 === peg$FAILED) {\n s3 = peg$c25;\n } else {\n peg$currPos = s3;\n s3 = peg$c1;\n }\n if (s3 !== peg$FAILED) {\n s4 = peg$parseliteral_char();\n if (s4 !== peg$FAILED) {\n peg$reportedPos = s2;\n s3 = peg$c43(s4);\n s2 = s3;\n } else {\n peg$currPos = s2;\n s2 = peg$c1;\n }\n } else {\n peg$currPos = s2;\n s2 = peg$c1;\n }\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$currPos;\n s3 = peg$currPos;\n peg$silentFails++;\n s4 = peg$parseplural();\n if (s4 === peg$FAILED) {\n s4 = peg$parsevariable();\n }\n peg$silentFails--;\n if (s4 === peg$FAILED) {\n s3 = peg$c25;\n } else {\n peg$currPos = s3;\n s3 = peg$c1;\n }\n if (s3 !== peg$FAILED) {\n s4 = peg$parseliteral_char();\n if (s4 !== peg$FAILED) {\n peg$reportedPos = s2;\n s3 = peg$c43(s4);\n s2 = s3;\n } else {\n peg$currPos = s2;\n s2 = peg$c1;\n }\n } else {\n peg$currPos = s2;\n s2 = peg$c1;\n }\n }\n } else {\n s1 = peg$c1;\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c44(s1);\n }\n s0 = s1;\n\n return s0;\n }\n\n function peg$parseliteral_char() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 92) {\n s1 = peg$c20;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c21); }\n }\n if (s1 !== peg$FAILED) {\n if (peg$c45.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c46); }\n }\n if (s2 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c24(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c1;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c1;\n }\n if (s0 === peg$FAILED) {\n if (input.length > peg$currPos) {\n s0 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c26); }\n }\n }\n\n return s0;\n }\n\n\n function regularForms(forms) {\n var result = [];\n for (var i=0; i= 0; }\n\n\nadd([ 'af', 'an', 'asa', 'bem', 'bez', 'bg', 'brx', 'ce', 'cgg', 'chr', 'ckb', 'dv', 'ee', 'el', 'eo', 'eu', 'fo', 'fur', 'gsw', 'ha', 'haw', 'jgo', 'jmc', 'kaj', 'kcg', 'kkj', 'kl', 'ks', 'ksb', 'ku', 'ky', 'lb', 'lg', 'mas', 'mgo', 'ml', 'mn', 'nah', 'nb', 'nd', 'nn', 'nnh', 'no', 'nr', 'ny', 'nyn', 'om', 'os', 'pap', 'ps', 'rm', 'rof', 'rwk', 'saq', 'sd', 'sdh', 'seh', 'sn', 'so', 'ss', 'ssy', 'st', 'syr', 'ta', 'te', 'teo', 'tig', 'tn', 'tr', 'ts', 'ug', 'uz', 've', 'vo', 'vun', 'wae', 'xh', 'xog' ], {\n c: [ 1, 5 ],\n cFn: function (n) {\n return n === 1 ? 0 : 1;\n }\n});\n\nadd([ 'ak', 'bho', 'guw', 'ln', 'mg', 'nso', 'pa', 'ti', 'wa' ], {\n c: [ 1, 5 ],\n cFn: function (n) {\n return B(0, 1, n) ? 0 : 1;\n }\n});\n\nadd([ 'am', 'doi', 'fa', 'kn', 'pcm', 'zu' ], {\n c: [ 1, 5 ],\n cFn: function (n, i) {\n return i === 0 || n === 1 ? 0 : 1;\n }\n});\n\nadd([ 'ar', 'ars' ], {\n c: [ 0, 1, 2, 3, 4, 5 ],\n cFn: function (n) {\n var n100 = n % 100;\n return n === 0 ? 0 : n === 1 ? 1 : n === 2 ? 2 : B(3, 10, n100) ? 3 : B(11, 99, n100) ? 4 : 5;\n }\n});\n\nadd([ 'as', 'bn' ], {\n c: [ 1, 5 ],\n cFn: function (n, i) {\n return i === 0 || n === 1 ? 0 : 1;\n },\n o: [ 1, 2, 3, 4, 5 ],\n oFn: function (n) {\n return IN([ 1, 5, 7, 8, 9, 10 ], n) ? 0 : IN([ 2, 3 ], n) ? 1 : n === 4 ? 2 : n === 6 ? 3 : 4;\n }\n});\n\nadd([ 'ast', 'de', 'et', 'fi', 'fy', 'gl', 'ia', 'io', 'nl', 'sw', 'ur', 'yi' ], {\n c: [ 1, 5 ],\n cFn: function (n, i, v) {\n return i === 1 && v === 0 ? 0 : 1;\n }\n});\n\nadd([ 'az' ], {\n c: [ 1, 5 ],\n cFn: function (n) {\n return n === 1 ? 0 : 1;\n },\n o: [ 1, 3, 4, 5 ],\n oFn: function (n, i) {\n var i10 = i % 10, i100 = i % 100, i1000 = i % 1000;\n return IN([ 1, 2, 5, 7, 8 ], i10) || IN([ 20, 50, 70, 80 ], i100) ? 0 : IN([ 3, 4 ], i10) || IN([ 100, 200, 300, 400, 500, 600, 700, 800, 900 ], i1000) ? 1 : i === 0 || i10 === 6 || IN([ 40, 60, 90 ], i100) ? 2 : 3;\n }\n});\n\nadd([ 'bal' ], {\n c: [ 1, 5 ],\n cFn: function (n) {\n return n === 1 ? 0 : 1;\n },\n o: [ 1, 5 ],\n oFn: function (n) {\n return n === 1 ? 0 : 1;\n }\n});\n\nadd([ 'be' ], {\n c: [ 1, 3, 4, 5 ],\n cFn: function (n) {\n var n10 = n % 10, n100 = n % 100;\n return n10 === 1 && n100 !== 11 ? 0 : B(2, 4, n10) && !B(12, 14, n100) ? 1 : n10 === 0 || B(5, 9, n10) || B(11, 14, n100) ? 2 : 3;\n },\n o: [ 3, 5 ],\n oFn: function (n) {\n var n10 = n % 10, n100 = n % 100;\n return IN([ 2, 3 ], n10) && !IN([ 12, 13 ], n100) ? 0 : 1;\n }\n});\n\nadd([ 'bm', 'bo', 'dz', 'hnj', 'id', 'ig', 'ii', 'ja', 'jbo', 'jv', 'jw', 'kde', 'kea', 'km', 'ko', 'lkt', 'my', 'nqo', 'osa', 'sah', 'ses', 'sg', 'su', 'th', 'to', 'tpi', 'und', 'wo', 'yo', 'yue', 'zh' ], {\n});\n\nadd([ 'br' ], {\n c: [ 1, 2, 3, 4, 5 ],\n cFn: function (n) {\n var n10 = n % 10, n100 = n % 100, n1000000 = n % 1000000;\n return n10 === 1 && !IN([ 11, 71, 91 ], n100) ? 0 : n10 === 2 && !IN([ 12, 72, 92 ], n100) ? 1 : (B(3, 4, n10) || n10 === 9) && (!B(10, 19, n100) && !B(70, 79, n100) && !B(90, 99, n100)) ? 2 : n !== 0 && n1000000 === 0 ? 3 : 4;\n }\n});\n\nadd([ 'bs', 'hr', 'sh', 'sr' ], {\n c: [ 1, 3, 5 ],\n cFn: function (n, i, v, f) {\n var i10 = i % 10, i100 = i % 100, f10 = f % 10, f100 = f % 100;\n return v === 0 && i10 === 1 && i100 !== 11 || f10 === 1 && f100 !== 11 ? 0 : v === 0 && B(2, 4, i10) && !B(12, 14, i100) || B(2, 4, f10) && !B(12, 14, f100) ? 1 : 2;\n }\n});\n\nadd([ 'ca' ], {\n c: [ 1, 5 ],\n cFn: function (n, i, v) {\n return i === 1 && v === 0 ? 0 : 1;\n },\n o: [ 1, 2, 3, 5 ],\n oFn: function (n) {\n return IN([ 1, 3 ], n) ? 0 : n === 2 ? 1 : n === 4 ? 2 : 3;\n }\n});\n\nadd([ 'ceb' ], {\n c: [ 1, 5 ],\n cFn: function (n, i, v, f) {\n var i10 = i % 10, f10 = f % 10;\n return v === 0 && IN([ 1, 2, 3 ], i) || v === 0 && !IN([ 4, 6, 9 ], i10) || v !== 0 && !IN([ 4, 6, 9 ], f10) ? 0 : 1;\n }\n});\n\nadd([ 'cs', 'sk' ], {\n c: [ 1, 3, 4, 5 ],\n cFn: function (n, i, v) {\n return i === 1 && v === 0 ? 0 : B(2, 4, i) && v === 0 ? 1 : v !== 0 ? 2 : 3;\n }\n});\n\nadd([ 'cy' ], {\n c: [ 0, 1, 2, 3, 4, 5 ],\n cFn: function (n) {\n return n === 0 ? 0 : n === 1 ? 1 : n === 2 ? 2 : n === 3 ? 3 : n === 6 ? 4 : 5;\n },\n o: [ 0, 1, 2, 3, 4, 5 ],\n oFn: function (n) {\n return IN([ 0, 7, 8, 9 ], n) ? 0 : n === 1 ? 1 : n === 2 ? 2 : IN([ 3, 4 ], n) ? 3 : IN([ 5, 6 ], n) ? 4 : 5;\n }\n});\n\nadd([ 'da' ], {\n c: [ 1, 5 ],\n cFn: function (n, i, v, f, t) {\n return n === 1 || t !== 0 && IN([ 0, 1 ], i) ? 0 : 1;\n }\n});\n\nadd([ 'dsb', 'hsb' ], {\n c: [ 1, 2, 3, 5 ],\n cFn: function (n, i, v, f) {\n var i100 = i % 100, f100 = f % 100;\n return v === 0 && i100 === 1 || f100 === 1 ? 0 : v === 0 && i100 === 2 || f100 === 2 ? 1 : v === 0 && B(3, 4, i100) || B(3, 4, f100) ? 2 : 3;\n }\n});\n\nadd([ 'en' ], {\n c: [ 1, 5 ],\n cFn: function (n, i, v) {\n return i === 1 && v === 0 ? 0 : 1;\n },\n o: [ 1, 2, 3, 5 ],\n oFn: function (n) {\n var n10 = n % 10, n100 = n % 100;\n return n10 === 1 && n100 !== 11 ? 0 : n10 === 2 && n100 !== 12 ? 1 : n10 === 3 && n100 !== 13 ? 2 : 3;\n }\n});\n\nadd([ 'es' ], {\n c: [ 1, 4, 5 ],\n cFn: function (n, i, v, f, t, w, e) {\n var i1000000 = i % 1000000;\n return n === 1 ? 0 : e === 0 && i !== 0 && i1000000 === 0 && v === 0 || !B(0, 5, e) ? 1 : 2;\n }\n});\n\nadd([ 'ff', 'kab' ], {\n c: [ 1, 5 ],\n cFn: function (n, i) {\n return IN([ 0, 1 ], i) ? 0 : 1;\n }\n});\n\nadd([ 'fil', 'tl' ], {\n c: [ 1, 5 ],\n cFn: function (n, i, v, f) {\n var i10 = i % 10, f10 = f % 10;\n return v === 0 && IN([ 1, 2, 3 ], i) || v === 0 && !IN([ 4, 6, 9 ], i10) || v !== 0 && !IN([ 4, 6, 9 ], f10) ? 0 : 1;\n },\n o: [ 1, 5 ],\n oFn: function (n) {\n return n === 1 ? 0 : 1;\n }\n});\n\nadd([ 'fr' ], {\n c: [ 1, 4, 5 ],\n cFn: function (n, i, v, f, t, w, e) {\n var i1000000 = i % 1000000;\n return IN([ 0, 1 ], i) ? 0 : e === 0 && i !== 0 && i1000000 === 0 && v === 0 || !B(0, 5, e) ? 1 : 2;\n },\n o: [ 1, 5 ],\n oFn: function (n) {\n return n === 1 ? 0 : 1;\n }\n});\n\nadd([ 'ga' ], {\n c: [ 1, 2, 3, 4, 5 ],\n cFn: function (n) {\n return n === 1 ? 0 : n === 2 ? 1 : B(3, 6, n) ? 2 : B(7, 10, n) ? 3 : 4;\n },\n o: [ 1, 5 ],\n oFn: function (n) {\n return n === 1 ? 0 : 1;\n }\n});\n\nadd([ 'gd' ], {\n c: [ 1, 2, 3, 5 ],\n cFn: function (n) {\n return IN([ 1, 11 ], n) ? 0 : IN([ 2, 12 ], n) ? 1 : (B(3, 10, n) || B(13, 19, n)) ? 2 : 3;\n },\n o: [ 1, 2, 3, 5 ],\n oFn: function (n) {\n return IN([ 1, 11 ], n) ? 0 : IN([ 2, 12 ], n) ? 1 : IN([ 3, 13 ], n) ? 2 : 3;\n }\n});\n\nadd([ 'gu', 'hi' ], {\n c: [ 1, 5 ],\n cFn: function (n, i) {\n return i === 0 || n === 1 ? 0 : 1;\n },\n o: [ 1, 2, 3, 4, 5 ],\n oFn: function (n) {\n return n === 1 ? 0 : IN([ 2, 3 ], n) ? 1 : n === 4 ? 2 : n === 6 ? 3 : 4;\n }\n});\n\nadd([ 'gv' ], {\n c: [ 1, 2, 3, 4, 5 ],\n cFn: function (n, i, v) {\n var i10 = i % 10, i100 = i % 100;\n return v === 0 && i10 === 1 ? 0 : v === 0 && i10 === 2 ? 1 : v === 0 && IN([ 0, 20, 40, 60, 80 ], i100) ? 2 : v !== 0 ? 3 : 4;\n }\n});\n\nadd([ 'he' ], {\n c: [ 1, 2, 4, 5 ],\n cFn: function (n, i, v) {\n var n10 = n % 10;\n return i === 1 && v === 0 ? 0 : i === 2 && v === 0 ? 1 : v === 0 && !B(0, 10, n) && n10 === 0 ? 2 : 3;\n }\n});\n\nadd([ 'hu' ], {\n c: [ 1, 5 ],\n cFn: function (n) {\n return n === 1 ? 0 : 1;\n },\n o: [ 1, 5 ],\n oFn: function (n) {\n return IN([ 1, 5 ], n) ? 0 : 1;\n }\n});\n\nadd([ 'hy' ], {\n c: [ 1, 5 ],\n cFn: function (n, i) {\n return IN([ 0, 1 ], i) ? 0 : 1;\n },\n o: [ 1, 5 ],\n oFn: function (n) {\n return n === 1 ? 0 : 1;\n }\n});\n\nadd([ 'is' ], {\n c: [ 1, 5 ],\n cFn: function (n, i, v, f, t) {\n var i10 = i % 10, i100 = i % 100;\n return t === 0 && i10 === 1 && i100 !== 11 || t !== 0 ? 0 : 1;\n }\n});\n\nadd([ 'it' ], {\n c: [ 1, 4, 5 ],\n cFn: function (n, i, v, f, t, w, e) {\n var i1000000 = i % 1000000;\n return i === 1 && v === 0 ? 0 : e === 0 && i !== 0 && i1000000 === 0 && v === 0 || !B(0, 5, e) ? 1 : 2;\n },\n o: [ 4, 5 ],\n oFn: function (n) {\n return IN([ 11, 8, 80, 800 ], n) ? 0 : 1;\n }\n});\n\nadd([ 'iu', 'naq', 'sat', 'se', 'sma', 'smi', 'smj', 'smn', 'sms' ], {\n c: [ 1, 2, 5 ],\n cFn: function (n) {\n return n === 1 ? 0 : n === 2 ? 1 : 2;\n }\n});\n\nadd([ 'ka' ], {\n c: [ 1, 5 ],\n cFn: function (n) {\n return n === 1 ? 0 : 1;\n },\n o: [ 1, 4, 5 ],\n oFn: function (n, i) {\n var i100 = i % 100;\n return i === 1 ? 0 : i === 0 || (B(2, 20, i100) || i100 === 40 || i100 === 60 || i100 === 80) ? 1 : 2;\n }\n});\n\nadd([ 'kk' ], {\n c: [ 1, 5 ],\n cFn: function (n) {\n return n === 1 ? 0 : 1;\n },\n o: [ 4, 5 ],\n oFn: function (n) {\n var n10 = n % 10;\n return n10 === 6 || n10 === 9 || n10 === 0 && n !== 0 ? 0 : 1;\n }\n});\n\nadd([ 'ksh' ], {\n c: [ 0, 1, 5 ],\n cFn: function (n) {\n return n === 0 ? 0 : n === 1 ? 1 : 2;\n }\n});\n\nadd([ 'kw' ], {\n c: [ 0, 1, 2, 3, 4, 5 ],\n cFn: function (n) {\n var n100 = n % 100, n1000 = n % 1000, n100000 = n % 100000, n1000000 = n % 1000000;\n return n === 0 ? 0 : n === 1 ? 1 : IN([ 2, 22, 42, 62, 82 ], n100) || n1000 === 0 && (B(1000, 20000, n100000) || n100000 === 40000 || n100000 === 60000 || n100000 === 80000) || n !== 0 && n1000000 === 100000 ? 2 : IN([ 3, 23, 43, 63, 83 ], n100) ? 3 : n !== 1 && IN([ 1, 21, 41, 61, 81 ], n100) ? 4 : 5;\n },\n o: [ 1, 4, 5 ],\n oFn: function (n) {\n var n100 = n % 100;\n return B(1, 4, n) || (B(1, 4, n100) || B(21, 24, n100) || B(41, 44, n100) || B(61, 64, n100) || B(81, 84, n100)) ? 0 : n === 5 || n100 === 5 ? 1 : 2;\n }\n});\n\nadd([ 'lag' ], {\n c: [ 0, 1, 5 ],\n cFn: function (n, i) {\n return n === 0 ? 0 : IN([ 0, 1 ], i) && n !== 0 ? 1 : 2;\n }\n});\n\nadd([ 'lij' ], {\n c: [ 1, 5 ],\n cFn: function (n, i, v) {\n return i === 1 && v === 0 ? 0 : 1;\n },\n o: [ 4, 5 ],\n oFn: function (n) {\n return (n === 11 || n === 8 || B(80, 89, n) || B(800, 899, n)) ? 0 : 1;\n }\n});\n\nadd([ 'lo', 'ms', 'vi' ], {\n o: [ 1, 5 ],\n oFn: function (n) {\n return n === 1 ? 0 : 1;\n }\n});\n\nadd([ 'lt' ], {\n c: [ 1, 3, 4, 5 ],\n cFn: function (n, i, v, f) {\n var n10 = n % 10, n100 = n % 100;\n return n10 === 1 && !B(11, 19, n100) ? 0 : B(2, 9, n10) && !B(11, 19, n100) ? 1 : f !== 0 ? 2 : 3;\n }\n});\n\nadd([ 'lv', 'prg' ], {\n c: [ 0, 1, 5 ],\n cFn: function (n, i, v, f) {\n var n10 = n % 10, n100 = n % 100, f100 = f % 100, f10 = f % 10;\n return n10 === 0 || B(11, 19, n100) || v === 2 && B(11, 19, f100) ? 0 : n10 === 1 && n100 !== 11 || v === 2 && f10 === 1 && f100 !== 11 || v !== 2 && f10 === 1 ? 1 : 2;\n }\n});\n\nadd([ 'mk' ], {\n c: [ 1, 5 ],\n cFn: function (n, i, v, f) {\n var i10 = i % 10, i100 = i % 100, f10 = f % 10, f100 = f % 100;\n return v === 0 && i10 === 1 && i100 !== 11 || f10 === 1 && f100 !== 11 ? 0 : 1;\n },\n o: [ 1, 2, 4, 5 ],\n oFn: function (n, i) {\n var i10 = i % 10, i100 = i % 100;\n return i10 === 1 && i100 !== 11 ? 0 : i10 === 2 && i100 !== 12 ? 1 : IN([ 7, 8 ], i10) && !IN([ 17, 18 ], i100) ? 2 : 3;\n }\n});\n\nadd([ 'mo', 'ro' ], {\n c: [ 1, 3, 5 ],\n cFn: function (n, i, v) {\n var n100 = n % 100;\n return i === 1 && v === 0 ? 0 : v !== 0 || n === 0 || B(2, 19, n100) ? 1 : 2;\n },\n o: [ 1, 5 ],\n oFn: function (n) {\n return n === 1 ? 0 : 1;\n }\n});\n\nadd([ 'mr' ], {\n c: [ 1, 5 ],\n cFn: function (n) {\n return n === 1 ? 0 : 1;\n },\n o: [ 1, 2, 3, 5 ],\n oFn: function (n) {\n return n === 1 ? 0 : IN([ 2, 3 ], n) ? 1 : n === 4 ? 2 : 3;\n }\n});\n\nadd([ 'mt' ], {\n c: [ 1, 3, 4, 5 ],\n cFn: function (n) {\n var n100 = n % 100;\n return n === 1 ? 0 : n === 0 || B(2, 10, n100) ? 1 : B(11, 19, n100) ? 2 : 3;\n }\n});\n\nadd([ 'ne' ], {\n c: [ 1, 5 ],\n cFn: function (n) {\n return n === 1 ? 0 : 1;\n },\n o: [ 1, 5 ],\n oFn: function (n) {\n return B(1, 4, n) ? 0 : 1;\n }\n});\n\nadd([ 'or' ], {\n c: [ 1, 5 ],\n cFn: function (n) {\n return n === 1 ? 0 : 1;\n },\n o: [ 1, 2, 3, 4, 5 ],\n oFn: function (n) {\n return (n === 1 || n === 5 || B(7, 9, n)) ? 0 : IN([ 2, 3 ], n) ? 1 : n === 4 ? 2 : n === 6 ? 3 : 4;\n }\n});\n\nadd([ 'pl' ], {\n c: [ 1, 3, 4, 5 ],\n cFn: function (n, i, v) {\n var i10 = i % 10, i100 = i % 100;\n return i === 1 && v === 0 ? 0 : v === 0 && B(2, 4, i10) && !B(12, 14, i100) ? 1 : v === 0 && i !== 1 && B(0, 1, i10) || v === 0 && B(5, 9, i10) || v === 0 && B(12, 14, i100) ? 2 : 3;\n }\n});\n\nadd([ 'pt' ], {\n c: [ 1, 4, 5 ],\n cFn: function (n, i, v, f, t, w, e) {\n var i1000000 = i % 1000000;\n return B(0, 1, i) ? 0 : e === 0 && i !== 0 && i1000000 === 0 && v === 0 || !B(0, 5, e) ? 1 : 2;\n }\n});\n\nadd([ 'pt-pt' ], {\n c: [ 1, 4, 5 ],\n cFn: function (n, i, v, f, t, w, e) {\n var i1000000 = i % 1000000;\n return i === 1 && v === 0 ? 0 : e === 0 && i !== 0 && i1000000 === 0 && v === 0 || !B(0, 5, e) ? 1 : 2;\n }\n});\n\nadd([ 'ru' ], {\n c: [ 1, 3, 4, 5 ],\n cFn: function (n, i, v) {\n var i10 = i % 10, i100 = i % 100;\n return v === 0 && i10 === 1 && i100 !== 11 ? 0 : v === 0 && B(2, 4, i10) && !B(12, 14, i100) ? 1 : v === 0 && i10 === 0 || v === 0 && B(5, 9, i10) || v === 0 && B(11, 14, i100) ? 2 : 3;\n }\n});\n\nadd([ 'sc', 'scn' ], {\n c: [ 1, 5 ],\n cFn: function (n, i, v) {\n return i === 1 && v === 0 ? 0 : 1;\n },\n o: [ 4, 5 ],\n oFn: function (n) {\n return IN([ 11, 8, 80, 800 ], n) ? 0 : 1;\n }\n});\n\nadd([ 'shi' ], {\n c: [ 1, 3, 5 ],\n cFn: function (n, i) {\n return i === 0 || n === 1 ? 0 : B(2, 10, n) ? 1 : 2;\n }\n});\n\nadd([ 'si' ], {\n c: [ 1, 5 ],\n cFn: function (n, i, v, f) {\n return IN([ 0, 1 ], n) || i === 0 && f === 1 ? 0 : 1;\n }\n});\n\nadd([ 'sl' ], {\n c: [ 1, 2, 3, 5 ],\n cFn: function (n, i, v) {\n var i100 = i % 100;\n return v === 0 && i100 === 1 ? 0 : v === 0 && i100 === 2 ? 1 : v === 0 && B(3, 4, i100) || v !== 0 ? 2 : 3;\n }\n});\n\nadd([ 'sq' ], {\n c: [ 1, 5 ],\n cFn: function (n) {\n return n === 1 ? 0 : 1;\n },\n o: [ 1, 4, 5 ],\n oFn: function (n) {\n var n10 = n % 10, n100 = n % 100;\n return n === 1 ? 0 : n10 === 4 && n100 !== 14 ? 1 : 2;\n }\n});\n\nadd([ 'sv' ], {\n c: [ 1, 5 ],\n cFn: function (n, i, v) {\n return i === 1 && v === 0 ? 0 : 1;\n },\n o: [ 1, 5 ],\n oFn: function (n) {\n var n10 = n % 10, n100 = n % 100;\n return IN([ 1, 2 ], n10) && !IN([ 11, 12 ], n100) ? 0 : 1;\n }\n});\n\nadd([ 'tk' ], {\n c: [ 1, 5 ],\n cFn: function (n) {\n return n === 1 ? 0 : 1;\n },\n o: [ 3, 5 ],\n oFn: function (n) {\n var n10 = n % 10;\n return IN([ 6, 9 ], n10) || n === 10 ? 0 : 1;\n }\n});\n\nadd([ 'tzm' ], {\n c: [ 1, 5 ],\n cFn: function (n) {\n return B(0, 1, n) || B(11, 99, n) ? 0 : 1;\n }\n});\n\nadd([ 'uk' ], {\n c: [ 1, 3, 4, 5 ],\n cFn: function (n, i, v) {\n var i10 = i % 10, i100 = i % 100;\n return v === 0 && i10 === 1 && i100 !== 11 ? 0 : v === 0 && B(2, 4, i10) && !B(12, 14, i100) ? 1 : v === 0 && i10 === 0 || v === 0 && B(5, 9, i10) || v === 0 && B(11, 14, i100) ? 2 : 3;\n },\n o: [ 3, 5 ],\n oFn: function (n) {\n var n10 = n % 10, n100 = n % 100;\n return n10 === 3 && n100 !== 13 ? 0 : 1;\n }\n});\n\n////////////////////////////////////////////////////////////////////////////////\n","var pug = require(\"!../../../../node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (Array, Date, Error, Object, RegExp, bemto_settings_default_tag, bemto_settings_element, bemto_settings_modifier, bemto_settings_prefix, t, teacherCommentRaw) {// Cloning via http://stackoverflow.com/a/728694/885556\nvar clone = function(obj) {\n var copy;\n\n // Handle the 3 simple types, and null or undefined\n if (null == obj || \"object\" != typeof obj) return obj;\n\n // Handle Date\n if (obj instanceof Date) {\n copy = new Date();\n copy.setTime(obj.getTime());\n return copy;\n }\n\n // Handle Array\n if (obj instanceof Array) {\n copy = [];\n for (var i = 0, len = obj.length; i < len; i++) {\n copy[i] = clone(obj[i]);\n }\n return copy;\n }\n\n // Handle Object\n if (obj instanceof Object) {\n copy = {};\n for (var attr in obj) {\n if (obj.hasOwnProperty(attr)) copy[attr] = clone(obj[attr]);\n }\n return copy;\n }\n\n throw new Error(\"Unable to copy obj! Its type isn't supported.\");\n}\n\nvar get_bemto_tag_type = function(tagName) {\n var result = 'block'\n if (bemto_tag_metadata[tagName]) {\n result = bemto_tag_metadata[tagName].type || result;\n }\n return result;\n}\n\nvar get_bemto_tag_content_type = function(tagName) {\n var result = 'block'\n if (bemto_tag_metadata[tagName]) {\n result = bemto_tag_metadata[tagName].content_type || bemto_tag_metadata[tagName].type || result;\n }\n return result;\n}\n\nvar bemto_tag_metadata = {\n 'hr': {\n 'type': 'self_closing'\n },\n 'br': {\n 'type': 'self_closing'\n },\n 'wbr': {\n 'type': 'self_closing'\n },\n 'source': {\n 'type': 'self_closing'\n },\n 'img': {\n 'type': 'self_closing'\n },\n 'input': {\n 'type': 'self_closing'\n },\n 'a': {\n 'type': 'inline'\n },\n 'abbr': {\n 'type': 'inline'\n },\n 'acronym': {\n 'type': 'inline'\n },\n 'b': {\n 'type': 'inline'\n },\n 'code': {\n 'type': 'inline'\n },\n 'em': {\n 'type': 'inline'\n },\n 'font': {\n 'type': 'inline'\n },\n 'i': {\n 'type': 'inline'\n },\n 'ins': {\n 'type': 'inline'\n },\n 'kbd': {\n 'type': 'inline'\n },\n 'map': {\n 'type': 'inline'\n },\n 'pre': {\n 'type': 'inline'\n },\n 'samp': {\n 'type': 'inline'\n },\n 'small': {\n 'type': 'inline'\n },\n 'span': {\n 'type': 'inline'\n },\n 'strong': {\n 'type': 'inline'\n },\n 'sub': {\n 'type': 'inline'\n },\n 'sup': {\n 'type': 'inline'\n },\n 'textarea': {\n 'type': 'inline'\n },\n 'time': {\n 'type': 'inline'\n },\n 'label': {\n 'content_type': 'inline'\n },\n 'p': {\n 'content_type': 'inline'\n },\n 'h1': {\n 'content_type': 'inline'\n },\n 'h2': {\n 'content_type': 'inline'\n },\n 'h3': {\n 'content_type': 'inline'\n },\n 'h4': {\n 'content_type': 'inline'\n },\n 'h5': {\n 'content_type': 'inline'\n },\n 'h6': {\n 'content_type': 'inline'\n },\n 'ul': {\n 'content_type': 'list'\n },\n 'ol': {\n 'content_type': 'list'\n },\n 'select': {\n 'content_type': 'optionlist'\n },\n 'datalist': {\n 'content_type': 'optionlist'\n }\n}\n\n\nvar default_bemto_settings = {\n 'prefix': '',\n 'element': '__',\n 'modifier': '_',\n 'default_tag': 'div',\n 'nosrc_substitute': true,\n 'flat_elements': true,\n 'class_delimiter': ''\n}\n\nvar bemto_output_settings = ['element', 'modifier'];\n\nvar bemto_settings = default_bemto_settings;\n\nvar get_bemto_settings = function() {\n var settings = clone(bemto_settings);\n if (bemto_settings_prefix !== undefined) { settings['prefix'] = bemto_settings_prefix; }\n if (bemto_settings_element !== undefined) { settings['element'] = bemto_settings_element; }\n if (bemto_settings_modifier !== undefined) { settings['modifier'] = bemto_settings_modifier; }\n if (bemto_settings_default_tag !== undefined) { settings['default_tag'] = bemto_settings_default_tag; }\n\n for (var i = 0; i < bemto_output_settings.length; i++) {\n var setting = bemto_output_settings[i];\n if (settings['output_' + setting] === undefined) {\n settings['output_' + setting] = settings[setting];\n }\n };\n\n return settings;\n}\n\nvar set_bemto_setting = function(name, value) {\n bemto_settings[name] = value;\n\n //- Resetting the old variable-type setting\n if (name == 'prefix' && bemto_settings_prefix !== undefined) { bemto_settings_prefix = undefined; }\n if (name == 'element' && bemto_settings_element !== undefined) { bemto_settings_element = undefined; }\n if (name == 'modifier' && bemto_settings_modifier !== undefined) { bemto_settings_modifier = undefined; }\n if (name == 'default_tag' && bemto_settings_default_tag !== undefined) { bemto_settings_default_tag = undefined; }\n}\n\nvar set_bemto_settings = function(settings) {\n for (var name in settings) {\n if (settings.hasOwnProperty(name)) {\n set_bemto_setting(name, settings[name]);\n }\n }\n}\n\n\n\n\n\n\n\n\npug_mixins[\"bemto_custom_inline_tag\"] = pug_interp = function(customTag, self_closing){\nvar block = (this && this.block), attributes = (this && this.attributes) || {};\nself_closing = self_closing || false\npug_html = pug_html + ((null == (pug_interp = '<') ? \"\" : pug_interp) + (pug.escape(null == (pug_interp = customTag) ? \"\" : pug_interp)));\nif (attributes) {\nfor (var attribute in attributes)\n{\nif (attributes.hasOwnProperty(attribute) && attributes[attribute] !== false && attributes[attribute] !== undefined) {\npug_html = pug_html + ((pug.escape(null == (pug_interp = ' ') ? \"\" : pug_interp)) + (pug.escape(null == (pug_interp = attribute) ? \"\" : pug_interp)) + (null == (pug_interp = '=\"') ? \"\" : pug_interp) + (null == (pug_interp = attributes[attribute] === true ? attribute : attributes[attribute]) ? \"\" : pug_interp) + (null == (pug_interp = '\"') ? \"\" : pug_interp));\n}\n}\n}\nif (self_closing) {\npug_html = pug_html + (null == (pug_interp = '/>') ? \"\" : pug_interp);\n}\nelse {\npug_html = pug_html + (null == (pug_interp = '>') ? \"\" : pug_interp);\nblock && block();\npug_html = pug_html + ((null == (pug_interp = '') ? \"\" : pug_interp));\n}\n};\npug_mixins[\"bemto_custom_tag\"] = pug_interp = function(customTag, tagMetadata){\nvar block = (this && this.block), attributes = (this && this.attributes) || {};\ncustomTag = customTag || 'div'\ntagMetadata = tagMetadata || {}\nvar selfClosing = false\nif (customTag.substr(-1) === '/') {\nselfClosing = true\ncustomTag = customTag.slice(0, -1)\n}\nvar tag_type = tagMetadata.type || get_bemto_tag_type(customTag)\nswitch (tag_type){\ncase 'inline':\npug_mixins[\"bemto_custom_inline_tag\"].call({\nblock: function(){\nblock && block();\n},\nattributes: attributes\n}, customTag);\n break;\ncase 'self_closing':\npug_mixins[\"bemto_custom_inline_tag\"].call({\nattributes: attributes\n}, customTag, true);\n break;\ndefault:\nif (selfClosing) {\npug_html = pug_html + \"\\u003C\" + (customTag) + (pug.attrs(attributes, true)) + \"\\u002F\\u003E\";\n}\nelse {\npug_html = pug_html + \"\\u003C\" + (customTag) + (pug.attrs(attributes, true)) + \"\\u003E\";\nblock && block();\npug_html = pug_html + \"\\u003C\\u002F\" + (customTag) + \"\\u003E\";\n}\n break;\n}\n};\npug_mixins[\"bemto_tag\"] = pug_interp = function(tag, tagMetadata){\nvar block = (this && this.block), attributes = (this && this.attributes) || {};\nvar settings = get_bemto_settings()\ntagMetadata = tagMetadata || {}\nvar newTag = tag || settings['default_tag']\nvar contextIndex = bemto_chain_contexts.length\nif (!tag) {\nif (bemto_chain_contexts[contextIndex-1] === 'inline') {\nnewTag = 'span'\n}\nelse\nif (bemto_chain_contexts[contextIndex-1] === 'list') {\nnewTag = 'li'\n}\nelse\nif (bemto_chain_contexts[contextIndex-1] === 'optionlist') {\nnewTag = 'option'\n}\n}\nif (!tag || tag == 'span' || tag == 'div') {\nif (attributes.href) {\nnewTag = 'a'\n}\nif (attributes.for) {\nnewTag = 'label'\n}\nif (attributes.type) {\nnewTag = block ? 'button' : 'input'\n}\nelse\nif (attributes.src) {\nnewTag = 'img'\n}\n}\nif (bemto_chain_contexts[contextIndex-1] === 'list' && newTag !== 'li') {\npug_html = pug_html + \"\\u003Cli\\u003E\";\n}\nelse\nif (bemto_chain_contexts[contextIndex-1] !== 'list' && bemto_chain_contexts[contextIndex-1] !== 'pseudo-list' && newTag === 'li') {\npug_html = pug_html + \"\\u003Cul\\u003E\";\nbemto_chain_contexts[bemto_chain_contexts.length] = 'pseudo-list'\n}\nelse\nif (bemto_chain_contexts[contextIndex-1] === 'pseudo-list' && newTag !== 'li') {\npug_html = pug_html + \"\\u003C\\u002Ful\\u003E\";\nbemto_chain_contexts = bemto_chain_contexts.splice(0,bemto_chain_contexts.length-1)\n}\nvar content_type = tagMetadata.content_type || get_bemto_tag_content_type(newTag)\nbemto_chain_contexts[bemto_chain_contexts.length] = content_type\nif (newTag == 'img') {\nif (attributes.alt && !attributes.title) {\nattributes.title = ''\n}\nif (attributes.title && !attributes.alt) {\nattributes.alt = attributes.title\n}\nif (!attributes.alt) {\nattributes.alt = ''\n}\nif (attributes.alt === '') {\nattributes.role = 'presentation'\n}\nif (!attributes.src) {\nif (settings.nosrc_substitute === true) {\nattributes.src = 'data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=='\n}\nelse\nif (settings.nosrc_substitute) {\nattributes.src = settings.nosrc_substitute\n}\n}\n}\nif (newTag == 'input') {\nif (!attributes.type) {\nattributes.type = \"text\"\n}\n}\nif (newTag == 'main') {\nif (!attributes.role) {\nattributes.role = 'main'\n}\n}\nif (newTag == 'html') {\npug_html = pug_html + \"\\u003C!DOCTYPE html\\u003E\";\n}\npug_mixins[\"bemto_custom_tag\"].call({\nblock: function(){\nif (block) {\nblock && block();\n}\n},\nattributes: attributes\n}, newTag, tagMetadata);\nif (bemto_chain_contexts[contextIndex-1] === 'list' && newTag != 'li') {\npug_html = pug_html + \"\\u003C\\u002Fli\\u003E\";\n}\n};\nvar bemto_chain = []\nvar bemto_chain_contexts = ['block']\npug_mixins[\"b\"] = pug_interp = function(options){\nvar block = (this && this.block), attributes = (this && this.attributes) || {};\nvar settings = get_bemto_settings()\nif (options && options.prefix !== undefined) {\nsettings.prefix = options.prefix\n}\nvar tag = options && options.tag || ( typeof options == 'string' ? options : '')\nvar isElement = options && options.isElement\nvar tagMetadata = options && options.metadata\nvar block_sets_context = false\nif (attributes.class) {\nvar bemto_classes = attributes.class\nif (bemto_classes instanceof Array) {\nbemto_classes = bemto_classes.join(' ')\n}\nbemto_classes = bemto_classes.split(' ')\nvar bemto_objects = []\nvar is_first_object = true\nvar new_context = []\n// iterate bemto_classes\n;(function(){\n var $$obj = bemto_classes;\n if ('number' == typeof $$obj.length) {\n for (var i = 0, $$l = $$obj.length; i < $$l; i++) {\n var klass = $$obj[i];\nvar bemto_object = {}\nvar prev_object = bemto_objects[bemto_objects.length - 1]\nvar sets_context = false\nif (klass.match(/^[A-Z-]+[A-Z0-9-]?$/)) {\ntag = klass.toLowerCase()\ncontinue\n}\nif (is_first_object && isElement) {\nbemto_object['context'] = bemto_chain[bemto_chain.length - 1]\n}\nvar modifier_class = klass.match(new RegExp('^(?!' + settings['element'] + '[A-Za-z0-9])' + settings['modifier'] + \"(.+)$\"))\nif (modifier_class && prev_object && prev_object.name) {\nif (!prev_object['modifiers']) {\nprev_object['modifiers'] = []\n}\nprev_object.modifiers.push(modifier_class[1])\ncontinue\n}\nvar element_class = klass.match(new RegExp('^(?!' + settings['modifier'] + '[A-Za-z0-9])' + settings['element'] + \"(.+)$\"))\nif (element_class) {\nbemto_object['context'] = bemto_chain[bemto_chain.length - 1]\nklass = element_class[1]\n}\nvar name_with_context = klass.match(new RegExp('^(.*[A-Za-z0-9])(?!' + settings['modifier'] + \"$)\" + settings['element'] + \"$\"))\nif (name_with_context) {\nklass = name_with_context[1]\nbemto_object['is_context'] = true\nsets_context = true\nblock_sets_context = true\nisElement = false\n}\nvar name_with_modifier = klass.match(new RegExp('^(.*?[A-Za-z0-9])(?!' + settings['element'] + '[A-Za-z0-9])' + settings['modifier'] + \"(.+)$\"))\nif (name_with_modifier) {\nklass = name_with_modifier[1]\nif (!bemto_object['modifiers']) {\nbemto_object['modifiers'] = []\n}\nbemto_object.modifiers.push(name_with_modifier[2])\n}\nvar found_prefix = ''\nvar prefix_regex_string = '()?'\nif (settings.prefix) {\nvar prefix = settings.prefix\nif (typeof prefix === 'string') {\nprefix = { '': prefix }\n}\nvar prefix_regex_test = []\nif (prefix instanceof Object) {\n// iterate prefix\n;(function(){\n var $$obj = prefix;\n if ('number' == typeof $$obj.length) {\n for (var key = 0, $$l = $$obj.length; key < $$l; key++) {\n var value = $$obj[key];\nif (typeof key === 'string' && key != '' && prefix_regex_test.indexOf(key) == -1) {\nprefix_regex_test.push(key)\n}\nif (typeof value === 'string' && value != '' && prefix_regex_test.indexOf(value) == -1) {\nprefix_regex_test.push(value)\n}\n }\n } else {\n var $$l = 0;\n for (var key in $$obj) {\n $$l++;\n var value = $$obj[key];\nif (typeof key === 'string' && key != '' && prefix_regex_test.indexOf(key) == -1) {\nprefix_regex_test.push(key)\n}\nif (typeof value === 'string' && value != '' && prefix_regex_test.indexOf(value) == -1) {\nprefix_regex_test.push(value)\n}\n }\n }\n}).call(this);\n\nprefix_regex_string = '(' + prefix_regex_test.join('|') + ')?'\n}\nvar name_with_prefix = klass.match(new RegExp('^' + prefix_regex_string + \"([A-Za-z0-9]+.*)$\"))\nif (name_with_prefix) {\nklass = name_with_prefix[2]\nfound_prefix = name_with_prefix[1] || ''\nfound_prefix = prefix[found_prefix]\nif (found_prefix === undefined || found_prefix === true) {\nfound_prefix = name_with_prefix[1]\n}\n}\n}\nbemto_object['prefix'] = (found_prefix || '').replace(/\\-/g, '%DASH%').replace(/\\_/g, '%UNDERSCORE%')\nif (sets_context && klass.match(/^[a-zA-Z0-9]+.*/)) {\nnew_context.push(bemto_object.context ? (bemto_object.context + settings['element'] + klass) : (bemto_object.prefix + klass))\n}\nbemto_object['name'] = klass\nis_first_object = false\nif (bemto_object.context && bemto_object.context.length > 1) {\n// iterate bemto_object.context\n;(function(){\n var $$obj = bemto_object.context;\n if ('number' == typeof $$obj.length) {\n for (var i = 0, $$l = $$obj.length; i < $$l; i++) {\n var subcontext = $$obj[i];\nvar sub_object = clone(bemto_object)\nsub_object['context'] = [subcontext]\nbemto_objects.push(sub_object)\n }\n } else {\n var $$l = 0;\n for (var i in $$obj) {\n $$l++;\n var subcontext = $$obj[i];\nvar sub_object = clone(bemto_object)\nsub_object['context'] = [subcontext]\nbemto_objects.push(sub_object)\n }\n }\n}).call(this);\n\n}\nelse {\nbemto_objects.push(bemto_object)\n}\n }\n } else {\n var $$l = 0;\n for (var i in $$obj) {\n $$l++;\n var klass = $$obj[i];\nvar bemto_object = {}\nvar prev_object = bemto_objects[bemto_objects.length - 1]\nvar sets_context = false\nif (klass.match(/^[A-Z-]+[A-Z0-9-]?$/)) {\ntag = klass.toLowerCase()\ncontinue\n}\nif (is_first_object && isElement) {\nbemto_object['context'] = bemto_chain[bemto_chain.length - 1]\n}\nvar modifier_class = klass.match(new RegExp('^(?!' + settings['element'] + '[A-Za-z0-9])' + settings['modifier'] + \"(.+)$\"))\nif (modifier_class && prev_object && prev_object.name) {\nif (!prev_object['modifiers']) {\nprev_object['modifiers'] = []\n}\nprev_object.modifiers.push(modifier_class[1])\ncontinue\n}\nvar element_class = klass.match(new RegExp('^(?!' + settings['modifier'] + '[A-Za-z0-9])' + settings['element'] + \"(.+)$\"))\nif (element_class) {\nbemto_object['context'] = bemto_chain[bemto_chain.length - 1]\nklass = element_class[1]\n}\nvar name_with_context = klass.match(new RegExp('^(.*[A-Za-z0-9])(?!' + settings['modifier'] + \"$)\" + settings['element'] + \"$\"))\nif (name_with_context) {\nklass = name_with_context[1]\nbemto_object['is_context'] = true\nsets_context = true\nblock_sets_context = true\nisElement = false\n}\nvar name_with_modifier = klass.match(new RegExp('^(.*?[A-Za-z0-9])(?!' + settings['element'] + '[A-Za-z0-9])' + settings['modifier'] + \"(.+)$\"))\nif (name_with_modifier) {\nklass = name_with_modifier[1]\nif (!bemto_object['modifiers']) {\nbemto_object['modifiers'] = []\n}\nbemto_object.modifiers.push(name_with_modifier[2])\n}\nvar found_prefix = ''\nvar prefix_regex_string = '()?'\nif (settings.prefix) {\nvar prefix = settings.prefix\nif (typeof prefix === 'string') {\nprefix = { '': prefix }\n}\nvar prefix_regex_test = []\nif (prefix instanceof Object) {\n// iterate prefix\n;(function(){\n var $$obj = prefix;\n if ('number' == typeof $$obj.length) {\n for (var key = 0, $$l = $$obj.length; key < $$l; key++) {\n var value = $$obj[key];\nif (typeof key === 'string' && key != '' && prefix_regex_test.indexOf(key) == -1) {\nprefix_regex_test.push(key)\n}\nif (typeof value === 'string' && value != '' && prefix_regex_test.indexOf(value) == -1) {\nprefix_regex_test.push(value)\n}\n }\n } else {\n var $$l = 0;\n for (var key in $$obj) {\n $$l++;\n var value = $$obj[key];\nif (typeof key === 'string' && key != '' && prefix_regex_test.indexOf(key) == -1) {\nprefix_regex_test.push(key)\n}\nif (typeof value === 'string' && value != '' && prefix_regex_test.indexOf(value) == -1) {\nprefix_regex_test.push(value)\n}\n }\n }\n}).call(this);\n\nprefix_regex_string = '(' + prefix_regex_test.join('|') + ')?'\n}\nvar name_with_prefix = klass.match(new RegExp('^' + prefix_regex_string + \"([A-Za-z0-9]+.*)$\"))\nif (name_with_prefix) {\nklass = name_with_prefix[2]\nfound_prefix = name_with_prefix[1] || ''\nfound_prefix = prefix[found_prefix]\nif (found_prefix === undefined || found_prefix === true) {\nfound_prefix = name_with_prefix[1]\n}\n}\n}\nbemto_object['prefix'] = (found_prefix || '').replace(/\\-/g, '%DASH%').replace(/\\_/g, '%UNDERSCORE%')\nif (sets_context && klass.match(/^[a-zA-Z0-9]+.*/)) {\nnew_context.push(bemto_object.context ? (bemto_object.context + settings['element'] + klass) : (bemto_object.prefix + klass))\n}\nbemto_object['name'] = klass\nis_first_object = false\nif (bemto_object.context && bemto_object.context.length > 1) {\n// iterate bemto_object.context\n;(function(){\n var $$obj = bemto_object.context;\n if ('number' == typeof $$obj.length) {\n for (var i = 0, $$l = $$obj.length; i < $$l; i++) {\n var subcontext = $$obj[i];\nvar sub_object = clone(bemto_object)\nsub_object['context'] = [subcontext]\nbemto_objects.push(sub_object)\n }\n } else {\n var $$l = 0;\n for (var i in $$obj) {\n $$l++;\n var subcontext = $$obj[i];\nvar sub_object = clone(bemto_object)\nsub_object['context'] = [subcontext]\nbemto_objects.push(sub_object)\n }\n }\n}).call(this);\n\n}\nelse {\nbemto_objects.push(bemto_object)\n}\n }\n }\n}).call(this);\n\nif (!isElement && !new_context.length && bemto_objects[0] && bemto_objects[0].name && bemto_objects[0].name.match(/^[a-zA-Z0-9]+.*/)) {\nbemto_objects[0]['is_context'] = true\nnew_context.push(bemto_objects[0].context ? (bemto_objects[0].context + settings['element'] + bemto_objects[0].name) : (bemto_objects[0].prefix + bemto_objects[0].name))\nblock_sets_context = true\n}\nif (new_context.length) {\nif (settings.flat_elements) {\n// iterate new_context\n;(function(){\n var $$obj = new_context;\n if ('number' == typeof $$obj.length) {\n for (var i = 0, $$l = $$obj.length; i < $$l; i++) {\n var subcontext = $$obj[i];\nvar context_with_element = subcontext.match(new RegExp('^(.*?[A-Za-z0-9])(?!' + settings['modifier'] + '[A-Za-z0-9])' + settings['element'] + \".+$\"))\nif (context_with_element) {\nnew_context[i] = context_with_element[1]\n}\n }\n } else {\n var $$l = 0;\n for (var i in $$obj) {\n $$l++;\n var subcontext = $$obj[i];\nvar context_with_element = subcontext.match(new RegExp('^(.*?[A-Za-z0-9])(?!' + settings['modifier'] + '[A-Za-z0-9])' + settings['element'] + \".+$\"))\nif (context_with_element) {\nnew_context[i] = context_with_element[1]\n}\n }\n }\n}).call(this);\n\n}\nbemto_chain[bemto_chain.length] = new_context\n}\nif (bemto_objects.length) {\nvar new_classes = []\n// iterate bemto_objects\n;(function(){\n var $$obj = bemto_objects;\n if ('number' == typeof $$obj.length) {\n for (var pug_index6 = 0, $$l = $$obj.length; pug_index6 < $$l; pug_index6++) {\n var bemto_object = $$obj[pug_index6];\nif (bemto_object.name) {\nvar start = bemto_object.prefix\nif (bemto_object.context) {\nstart = bemto_object.context + settings.output_element\n}\nnew_classes.push(start + bemto_object.name)\nif (bemto_object.modifiers) {\n// iterate bemto_object.modifiers\n;(function(){\n var $$obj = bemto_object.modifiers;\n if ('number' == typeof $$obj.length) {\n for (var pug_index7 = 0, $$l = $$obj.length; pug_index7 < $$l; pug_index7++) {\n var modifier = $$obj[pug_index7];\nnew_classes.push(start + bemto_object.name + settings.output_modifier + modifier)\n }\n } else {\n var $$l = 0;\n for (var pug_index7 in $$obj) {\n $$l++;\n var modifier = $$obj[pug_index7];\nnew_classes.push(start + bemto_object.name + settings.output_modifier + modifier)\n }\n }\n}).call(this);\n\n}\n}\n }\n } else {\n var $$l = 0;\n for (var pug_index6 in $$obj) {\n $$l++;\n var bemto_object = $$obj[pug_index6];\nif (bemto_object.name) {\nvar start = bemto_object.prefix\nif (bemto_object.context) {\nstart = bemto_object.context + settings.output_element\n}\nnew_classes.push(start + bemto_object.name)\nif (bemto_object.modifiers) {\n// iterate bemto_object.modifiers\n;(function(){\n var $$obj = bemto_object.modifiers;\n if ('number' == typeof $$obj.length) {\n for (var pug_index8 = 0, $$l = $$obj.length; pug_index8 < $$l; pug_index8++) {\n var modifier = $$obj[pug_index8];\nnew_classes.push(start + bemto_object.name + settings.output_modifier + modifier)\n }\n } else {\n var $$l = 0;\n for (var pug_index8 in $$obj) {\n $$l++;\n var modifier = $$obj[pug_index8];\nnew_classes.push(start + bemto_object.name + settings.output_modifier + modifier)\n }\n }\n}).call(this);\n\n}\n}\n }\n }\n}).call(this);\n\nvar delimiter = settings.class_delimiter\ndelimiter = delimiter ? (' ' + delimiter + ' ') : ' '\nattributes.class = new_classes.join(delimiter).replace(/%DASH%/g, '-').replace(/%UNDERSCORE%/g, '_')\n}\nelse {\nattributes.class = undefined\n}\n}\nif (block) {\npug_mixins[\"bemto_tag\"].call({\nblock: function(){\nblock && block();\n},\nattributes: attributes\n}, tag, tagMetadata);\n}\nelse {\npug_mixins[\"bemto_tag\"].call({\nattributes: attributes\n}, tag, tagMetadata);\n}\nif (!isElement && block_sets_context) {\nbemto_chain = bemto_chain.splice(0,bemto_chain.length-1)\n}\nbemto_chain_contexts = bemto_chain_contexts.splice(0,bemto_chain_contexts.length-1)\n};\npug_mixins[\"e\"] = pug_interp = function(options){\nvar block = (this && this.block), attributes = (this && this.attributes) || {};\nif (options && typeof options == 'string') {\noptions = { 'tag': options }\n}\nelse {\noptions = options || {}\n}\noptions['isElement'] = true\npug_mixins[\"b\"].call({\nblock: function(){\nblock && block();\n},\nattributes: attributes\n}, options);\n};\npug_mixins[\"b\"].call({\nblock: function(){\npug_mixins[\"b\"].call({\nblock: function(){\npug_html = pug_html + (pug.escape(null == (pug_interp = teacherCommentRaw) ? \"\" : pug_interp));\n},\nattributes: {\"class\": \"textarea-input\",\"name\": \"teacherComment\"}\n}, 'textarea');\npug_mixins[\"e\"].call({\nblock: function(){\npug_mixins[\"b\"].call({\nblock: function(){\npug_mixins[\"e\"].call({\nblock: function(){\npug_html = pug_html + (pug.escape(null == (pug_interp = t('courses.comment_form.submit')) ? \"\" : pug_interp));\n},\nattributes: {\"class\": \"text\"}\n}, 'span');\n},\nattributes: {\"class\": \"button _action __item-save\",\"type\": \"submit\"}\n}, 'button');\npug_mixins[\"e\"].call({\nblock: function(){\npug_html = pug_html + (pug.escape(null == (pug_interp = t('courses.comment_form.cancel')) ? \"\" : pug_interp));\n},\nattributes: {\"class\": \"item-cancel\",\"type\": \"button\",\"data-action-comment-cancel\": pug.escape(true)}\n}, 'button');\n},\nattributes: {\"class\": \"ok-cancel\"}\n});\n},\nattributes: {\"class\": \"course-feedback-comment-form\"}\n}, 'form');}.call(this,\"Array\" in locals_for_with?locals_for_with.Array:typeof Array!==\"undefined\"?Array:undefined,\"Date\" in locals_for_with?locals_for_with.Date:typeof Date!==\"undefined\"?Date:undefined,\"Error\" in locals_for_with?locals_for_with.Error:typeof Error!==\"undefined\"?Error:undefined,\"Object\" in locals_for_with?locals_for_with.Object:typeof Object!==\"undefined\"?Object:undefined,\"RegExp\" in locals_for_with?locals_for_with.RegExp:typeof RegExp!==\"undefined\"?RegExp:undefined,\"bemto_settings_default_tag\" in locals_for_with?locals_for_with.bemto_settings_default_tag:typeof bemto_settings_default_tag!==\"undefined\"?bemto_settings_default_tag:undefined,\"bemto_settings_element\" in locals_for_with?locals_for_with.bemto_settings_element:typeof bemto_settings_element!==\"undefined\"?bemto_settings_element:undefined,\"bemto_settings_modifier\" in locals_for_with?locals_for_with.bemto_settings_modifier:typeof bemto_settings_modifier!==\"undefined\"?bemto_settings_modifier:undefined,\"bemto_settings_prefix\" in locals_for_with?locals_for_with.bemto_settings_prefix:typeof bemto_settings_prefix!==\"undefined\"?bemto_settings_prefix:undefined,\"t\" in locals_for_with?locals_for_with.t:typeof t!==\"undefined\"?t:undefined,\"teacherCommentRaw\" in locals_for_with?locals_for_with.teacherCommentRaw:typeof teacherCommentRaw!==\"undefined\"?teacherCommentRaw:undefined));;return pug_html;};\nmodule.exports = template;","'use strict';\n\nvar pug_has_own_property = Object.prototype.hasOwnProperty;\n\n/**\n * Merge two attribute objects giving precedence\n * to values in object `b`. Classes are special-cased\n * allowing for arrays and merging/joining appropriately\n * resulting in a string.\n *\n * @param {Object} a\n * @param {Object} b\n * @return {Object} a\n * @api private\n */\n\nexports.merge = pug_merge;\nfunction pug_merge(a, b) {\n if (arguments.length === 1) {\n var attrs = a[0];\n for (var i = 1; i < a.length; i++) {\n attrs = pug_merge(attrs, a[i]);\n }\n return attrs;\n }\n\n for (var key in b) {\n if (key === 'class') {\n var valA = a[key] || [];\n a[key] = (Array.isArray(valA) ? valA : [valA]).concat(b[key] || []);\n } else if (key === 'style') {\n var valA = pug_style(a[key]);\n valA = valA && valA[valA.length - 1] !== ';' ? valA + ';' : valA;\n var valB = pug_style(b[key]);\n valB = valB && valB[valB.length - 1] !== ';' ? valB + ';' : valB;\n a[key] = valA + valB;\n } else {\n a[key] = b[key];\n }\n }\n\n return a;\n};\n\n/**\n * Process array, object, or string as a string of classes delimited by a space.\n *\n * If `val` is an array, all members of it and its subarrays are counted as\n * classes. If `escaping` is an array, then whether or not the item in `val` is\n * escaped depends on the corresponding item in `escaping`. If `escaping` is\n * not an array, no escaping is done.\n *\n * If `val` is an object, all the keys whose value is truthy are counted as\n * classes. No escaping is done.\n *\n * If `val` is a string, it is counted as a class. No escaping is done.\n *\n * @param {(Array.|Object.|string)} val\n * @param {?Array.} escaping\n * @return {String}\n */\nexports.classes = pug_classes;\nfunction pug_classes_array(val, escaping) {\n var classString = '', className, padding = '', escapeEnabled = Array.isArray(escaping);\n for (var i = 0; i < val.length; i++) {\n className = pug_classes(val[i]);\n if (!className) continue;\n escapeEnabled && escaping[i] && (className = pug_escape(className));\n classString = classString + padding + className;\n padding = ' ';\n }\n return classString;\n}\nfunction pug_classes_object(val) {\n var classString = '', padding = '';\n for (var key in val) {\n if (key && val[key] && pug_has_own_property.call(val, key)) {\n classString = classString + padding + key;\n padding = ' ';\n }\n }\n return classString;\n}\nfunction pug_classes(val, escaping) {\n if (Array.isArray(val)) {\n return pug_classes_array(val, escaping);\n } else if (val && typeof val === 'object') {\n return pug_classes_object(val);\n } else {\n return val || '';\n }\n}\n\n/**\n * Convert object or string to a string of CSS styles delimited by a semicolon.\n *\n * @param {(Object.|string)} val\n * @return {String}\n */\n\nexports.style = pug_style;\nfunction pug_style(val) {\n if (!val) return '';\n if (typeof val === 'object') {\n var out = '';\n for (var style in val) {\n /* istanbul ignore else */\n if (pug_has_own_property.call(val, style)) {\n out = out + style + ':' + val[style] + ';';\n }\n }\n return out;\n } else {\n return val + '';\n }\n};\n\n/**\n * Render the given attribute.\n *\n * @param {String} key\n * @param {String} val\n * @param {Boolean} escaped\n * @param {Boolean} terse\n * @return {String}\n */\nexports.attr = pug_attr;\nfunction pug_attr(key, val, escaped, terse) {\n if (val === false || val == null || !val && (key === 'class' || key === 'style')) {\n return '';\n }\n if (val === true) {\n return ' ' + (terse ? key : key + '=\"' + key + '\"');\n }\n var type = typeof val;\n if ((type === 'object' || type === 'function') && typeof val.toJSON === 'function') {\n val = val.toJSON();\n }\n if (typeof val !== 'string') {\n val = JSON.stringify(val);\n if (!escaped && val.indexOf('\"') !== -1) {\n return ' ' + key + '=\\'' + val.replace(/'/g, ''') + '\\'';\n }\n }\n if (escaped) val = pug_escape(val);\n return ' ' + key + '=\"' + val + '\"';\n};\n\n/**\n * Render the given attributes object.\n *\n * @param {Object} obj\n * @param {Object} terse whether to use HTML5 terse boolean attributes\n * @return {String}\n */\nexports.attrs = pug_attrs;\nfunction pug_attrs(obj, terse){\n var attrs = '';\n\n for (var key in obj) {\n if (pug_has_own_property.call(obj, key)) {\n var val = obj[key];\n\n if ('class' === key) {\n val = pug_classes(val);\n attrs = pug_attr(key, val, false, terse) + attrs;\n continue;\n }\n if ('style' === key) {\n val = pug_style(val);\n }\n attrs += pug_attr(key, val, false, terse);\n }\n }\n\n return attrs;\n};\n\n/**\n * Escape the given string of `html`.\n *\n * @param {String} html\n * @return {String}\n * @api private\n */\n\nvar pug_match_html = /[\"&<>]/;\nexports.escape = pug_escape;\nfunction pug_escape(_html){\n var html = '' + _html;\n var regexResult = pug_match_html.exec(html);\n if (!regexResult) return _html;\n\n var result = '';\n var i, lastIndex, escape;\n for (i = regexResult.index, lastIndex = 0; i < html.length; i++) {\n switch (html.charCodeAt(i)) {\n case 34: escape = '"'; break;\n case 38: escape = '&'; break;\n case 60: escape = '<'; break;\n case 62: escape = '>'; break;\n default: continue;\n }\n if (lastIndex !== i) result += html.substring(lastIndex, i);\n lastIndex = i + 1;\n result += escape;\n }\n if (lastIndex !== i) return result + html.substring(lastIndex, i);\n else return result;\n};\n\n/**\n * Re-throw the given `err` in context to the\n * the pug in `filename` at the given `lineno`.\n *\n * @param {Error} err\n * @param {String} filename\n * @param {String} lineno\n * @param {String} str original source\n * @api private\n */\n\nexports.rethrow = pug_rethrow;\nfunction pug_rethrow(err, filename, lineno, str){\n if (!(err instanceof Error)) throw err;\n if ((typeof window != 'undefined' || !filename) && !str) {\n err.message += ' on line ' + lineno;\n throw err;\n }\n try {\n str = str || require('fs').readFileSync(filename, 'utf8')\n } catch (ex) {\n pug_rethrow(err, null, lineno)\n }\n var context = 3\n , lines = str.split('\\n')\n , start = Math.max(lineno - context, 0)\n , end = Math.min(lines.length, lineno + context);\n\n // Error context\n var context = lines.slice(start, end).map(function(line, i){\n var curr = i + start + 1;\n return (curr == lineno ? ' > ' : ' ')\n + curr\n + '| '\n + line;\n }).join('\\n');\n\n // Alter exception message\n err.path = filename;\n err.message = (filename || 'Pug') + ':' + lineno\n + '\\n' + context + '\\n\\n' + err.message;\n throw err;\n};\n","export default {site:{privacy_policy:'политика конфиденциальности',terms:'пользовательское соглашение',banner_bottom:'Проводим курсы по JavaScript и фреймворкам.',action_required:'Требуется действие',gdpr_dialog:{title:'Этот сайт использует cookie',text:'Мы используем браузерные технологии, такие как cookie и local storage для хранения ваших предпочтений. Вы принимаете политику конфиденциальности и соглашение пользователя?',accept:'Принять',cancel:'Отмена'},theme:{light:'Светлая тема',dark:'Тёмная тема',change:'Сменить тему оформления'},toolbar:{lang_switcher:{cta_text:'Мы хотим сделать этот проект с открытым исходным кодом доступным для людей во всем мире. Пожалуйста, помогите нам перевести это руководство на другие языки.',footer_text:'количество контента, переведенное на соотвествующий язык',old_version:'Опубликована полная, но предыдущая версия учебника.'},logo:{normal:{svg:'sitetoolbar__logo_ru.svg',width:171},'normal-white':{svg:'sitetoolbar__logo_ru-white.svg'},small:{svg:'sitetoolbar__logo_small_ru.svg',width:80},'small-white':{svg:'sitetoolbar__logo_small_ru-white.svg'}},sections:[{slug:'tutorial',url:'/',title:'Учебник'},{slug:'courses',title:'Курсы'},{url:'https://javascript.ru/forum/',title:'Форум'},{slug:'quiz',title:'Тесты знаний'}],sections_bak:[{slug:'jobs',title:'Стажировки'}],buy_ebook_extra:'Купить',buy_ebook:'EPUB/PDF',search_placeholder:'Искать на Javascript.ru',search_button:'Найти',public_profile:'Публичный профиль',account:'Аккаунт',notifications:'Уведомления',admin:'Админ',logout:'Выйти'},sorry_old_browser:'Извините, Internet Explorer не поддерживается, пожалуйста используйте более новый браузер.',contact_us:'связаться с нами',about_the_project:'о проекте',ilya_kantor:'Илья Кантор',comments:'Комментарии',loading:'Загружается...',search:'Искать',share:'Поделиться',read_before_commenting:'перед тем как писать…',last_updated_at:'Последнее обновление: #{date}','tablet-menu':{choose_section:'Выберите раздел',search_placeholder:'Поиск в учебнике',search_button:'Поиск'},comment:{help:['Если вам кажется, что в статье что-то не так - вместо комментария напишите на GitHub.','Для одной строки кода используйте тег <code>, для нескольких строк кода — тег <pre>, если больше 10 строк — ссылку на песочницу (plnkr, JSBin, codepen…)','Если что-то непонятно в статье — пишите, что именно и с какого места.']},meta:{description:'Современный учебник JavaScript, начиная с основ, включающий в себя много тонкостей и фишек JavaScript/DOM.'},edit_on_github:'Редактировать на GitHub',error:'ошибка',close:'закрыть',hide_forever:'не показывать',hidden_forever:'Эта информация больше не будет выводиться.',subscribe:{title:'Следите за обновлениями javascript.ru',text:'Мы не рассылаем рекламу, все только по делу. Вы сами выбираете, что получать:',agreement:'Подписываясь на рассылку, вы соглашаетесь с пользовательским соглашением.',button:'Подписаться',button_unsubscribe:'Отписаться от всех',common_updates:'Общие обновления',common_updates_text:'новые курсы, интенсивы, выпуски статей и скринкастов',your_email:'ваш@email',newsletters:'рассылка,рассылки,рассылок',no_selected:'Не выбрано'},form:{value_must_not_be_empty:'Значение не должно быть пустым.',value_is_too_long:'Значение слишком длинное.',value_is_too_short:'Значение слишком короткое.',invalid_email:'Некорректный email.',invalid_value:'Некорректное значение.',invalid_autocomplete:'Пожалуйста, выберите значение из списка',invalid_date:'Дата неверна, формат: дд.мм.гггг.',invalid_range:'Такой даты здесь не может быть.',save:'Сохранить',upload_file:'Загрузить файл',cancel:'Отмена',server_error:'Ошибка загрузки, статус'}}};","export default {line1:'Настоящим удостоверяется, что с #{dateStart} по #{dateEnd}',line1_0:'Настоящим удостоверяется, что #{date}',line2:'прошёл(а) обучение по программе',no_user:'Нет такого пользователя',no_participant:'Нет такого участника',no_certificate:'Нет такого сертификата'};","export default {invite:{invitation:'Приглашение на курс',invitation_masterclass:'Приглашение на интенсив',seat_has_been_reserved:'На сайте javascript.ru была оформлена запись для вас на #{title}.',click_to_join:'Перейдите по ссылке #{link}, чтобы присоединиться к группе.',contact_person:'Контактное лицо, указанное в записи: #{name}.',questions:'Если возникнут какие-либо вопросы – вы всегда можете ответить на это письмо.'},invite_remind:{title:'Присоединитесь, пожалуйста, к группе',hello:'Здравствуйте!',still_not_joined:'Вы – в списке участников, но до сих пор не присоединились к группе #{title}.',join_for:'Это нужно сделать, чтобы вы могли участвовать и получать материалы группы.',click_to_join:'Присоединиться к группе можно по ссылке #{link}.',questions:'Если возникнут какие-либо вопросы – вы можете ответить на это письмо.'},materials:{title:'Уведомление о материалах #{type}а',materials_added:'На страницу #{link} добавлены материалы.',click_to_download:'Вы можете скачать файл по прямой ссылке (если залогинены на сайте): #{fileTitle}.'},move:{title:'Оповещение о переводе',hello:'Здравствуйте!',you_were_moved:'Вы были переведены из группы \"#{oldGroup}\" в группу \"#{newGroup}\".',questions:'Если возникнут какие-либо вопросы – вы можете ответить на это письмо.'},order_cancel:{subject:'[Курсы, система регистрации] Отмена заказа #{number} на сайте #{host}',title:'Ваш заказ #{number} аннулирован по истечению времени',order_cancelled:'Ваш заказ на Javascript.ru под номером #{number} автоматически аннулирован',group_start_soon:' в связи со скорым началом обучения, ввиду отсутствия информации о платеже.',payment_expired:' по истечению времени ожидания, ввиду отсутствия информации о платеже.',duplicate:'У вас есть другой, оплаченный, заказ под номером #{number} в ту же группу, так что, вероятно, аннулирован лишний, дублирующий, заказ.',list_orders:'Список активных заказов доступен в личном кабинете: ',need_login:' (нужно авторизоваться на сайте).',already_payed_or_soon:'Если вы собираетесь оплатить заказ сегодня – перейдите по одноразовой ссылке #{restoreLink}.',already_payed:'Для того, чтобы восстановить заказ – перейдите по одноразовой ссылке: #{restoreLink}.',valid_one_day:'Ссылка будет активна в течение суток.',info:'Автоматическая отмена неоплаченных заказов предназначена для удаления несостоявшихся заказов.'},payment_confirmation:{title:'Подтверждение оплаты',payment_confirmed:'Подтверждаем получение оплаты за заказ #{number}',participation_confirmed:'Ваша запись одобрена',free_participation:'Ваш заказ #{number} одобрен без оплаты',is_participant:'Перейдите по ссылке #{orderUserInviteLink}, чтобы присоединиться к группе.',questions:'Если возникнут какие-либо вопросы – вы всегда можете ответить на это письмо.'}};","export default {title:'Отзыв о #{type}е\\n #{title}',title_all:'Отзывы о #{type}е\\n #{title}',average_grade:'средняя оценка',grades:{'1':'Плохо','2':'Так себе','3':'Нормально','4':'Хорошо','5':'Отлично'},participated:'Оценки от разработчиков, которые участвовали в #{type}е',recommend_text:'учеников, оставивших отзывы, рекомендуют этот #{type}',recommend_text_frontpage:'Пользователей рекомендуют этот #{type}',all_feedbacks:'все отзывы',feedback_cut:'весь отзыв',page:{recommend:'Рекомендует #{type} \"#{title}\"',course:'#{type}',teacher:'Преподаватель',edit:'редактировать',share:'Поделиться'},form:{grade:'Как вы в целом оцениваете #{type}?*',recommend:'Порекомендовали бы вы этот #{type} другим?*',recommend_yes:'Да',recommend_no:'Нет',feedback:'Отзыв*',feedback_placeholder:'Несколько слов о том, насколько полезным #{type} оказался для вас, доступно ли излагается материал, устраивает ли квалификация ведущего и т.д.',is_public:'Публичный отзыв',is_public_note:'(будет опубликован на javascript.ru)',edit:'Редактировать',name:'Имя',photo:'Фото',photo_upload:'Загрузить новое фото',country:'Страна',city:'Город',occupation:'Область работы',social:'Профиль в соц. сети или личная страница, где можно узнать о вашей профессиональной деятельности',social_note:'Эта ссылка будет доступна только в контексте вашего отзыва. пожалуйста, укажите её.',submit:'Отправить','delete':'удалить',delete_confirm:'Вы уверены, что хотите удалить этот отзыв?',deleted:'Отзыв был успешно удален'},list:{policy:'Политика отзывов javascript.ru',policy_list:'Отзыв может оставить любой участник #{type}а, после прохождения.\\nПоказываются все опубликованные отзывы, даже если оценка нам \"не нравится\".\\nОтзывы показываются \"как есть\", не модерируются, если нет нарушения правил сайта и #{type}а (нецензурная лексика и др).\\nОтзывы показываются только для последней версии #{type}а.'},filter:{teachers:'все преподаватели',all:'с любой оценкой',courses:'на любой курс',grade:'с оценкой'}};","export default {title:'Онлайн-курсы по JavaScript-технологиям',description:'Здесь находятся «правильные» курсы по профессиональному JavaScript и смежным технологиям. С теорией, ответами на вопросы, практикой, обратной связью по коду (\"code review\"). Каждый курс ведёт преподаватель - опытный действующий разработчик.\\n',opened_courses:'Перейти к списку открытых курсов',people_talk_about:'Что говорят о курсах участники',people_talk_about_single:'Что говорят о #{type}е участники',features:[{name:'quality',title:'Качество',text:'Это самое главное. Мы изучаем разработку на профессиональном уровне'},{name:'online',onclick:'document.getElementById(\\'online\\').checked = true',title:'Дистанционность',text:'На практике это оказывается удобнее, чем очные курсы'},{name:'study',title:'Поддержка',text:'Вы получите советы по развитию именно для вас'},{name:'feedback',title:'Результат',text:'Цель курсов - получить конкретные результаты в плане знаний и умений'},{name:'guarantee',title:'Гарантия',text:'Возврат денег, если что-то не так'}],program:'Программа курсов и запись',master_class:'Интенсивы',master_class_text:'В отличии от курсов, интенсивы - это однодневные или двухдневные вебинары с более узкой программой. Основная цель интенсивов – приобрести или закрепить знания по конкретной технологии в сжатые сроки. Интенсивы, как и курсы, являются интерактивными и предусматривают общение с преподавателем.\\n',opinions:'Мнение профессионалов',ongoing:'Идёт набор в группы',teachers_title:'Преподаватель,Преподаватели,Преподаватели',teachers_description:'Курсы проводятся только опытными и проверенными профессионалами. Каждый преподаватель обладает как практическими, так и теоретическими знаниями, приобретёнными за годы работы в сфере веб-разработки.\\n',phone_toggler:'Информация о ведущем и особенностях курсов.',learn_more:'Подробнее',faq:{title:'Часто задаваемые вопросы',another_question:'У вас другой вопрос? Напишите его в комментариях внизу этой страницы или на почту help@javascript.ru (ответ обычно в течение дня), а если срочно — по телефону +7-903-5419441.',old_comments:'Почитать предыдущие комментарии к этой странице можно в старом движке.'},participant_logos:{title:'У нас обучались',description:'Интенсивы и мастер-классы для профессионалов в области JavaScript проводятся примерно с 2006 года, а курсы – с 2011 года. За это время обучились тысячи человек из сотен компаний, всех их перечислить сложно. В частности, проходили обучение сотрудники этих компаний:\\n',notes:'За время обучения были оставлены сотни отзывов, некоторые из которых вы можете видеть выше на этой странице, а также, в более подробном виде, на странице курса и в профилях преподавателей. Мнение о курсах профессионалов вы также можете увидеть выше.\\n'},professionals:{title:'Мнение профессионалов',articles:[{userpic:'/img/courses/dmitryx.jpg',username:'Дмитрий Поляков',linkedin_link:'https://www.linkedin.com/in/dmitryx',about:'Frontend-разработчик в Google, делает Youtube, общий опыт работы архитектором и ведущим разработчиком различных проектов более 15 лет.\\n',feedback:'Участвовал в мастер-классах Ильи несколько раз, узнал много полезного. Очень нравится профессиональное и отлично организованное изложение и структуризация материала, приводимые примеры и паттерны применения в настоящей разработке. Считаю Илью одним из лучших JS разработчиков и ведущих. Крайне рекомендую курсы для тех, кто хочет отточить свои знания и стать профессионалом.\\n'},{userpic:'/img/courses/andrewsumin.jpg',username:'Андрей Сумин',linkedin_link:'https://ru.linkedin.com/in/andrewsumin',about:'Главный по Frontend в компании Mail.ru, также принимал участие в таких проектах как hh.ru и yandex.ru.\\n',feedback:'В далёком 2006 году, будучи frontend-разработчиком в Яндекс, я посетил курс по JavaScript. Уже тогда его занятия отличались сильной базой, подробным разбором важных и сложных аспектов и грамотной организацией. Я искренне рекомендую курсы Ильи всем кто хочет знать всё о языке JavaScript.\\n'},{userpic:'/img/courses/tyv.jpg',username:'Юрий Ткаченко',linkedin_link:'https://ua.linkedin.com/in/tkachenkoyuri',about:'Frontend-разработчик, в Яндекс 3 года руководил одной из команд верстальщиков, общий опыт Frontend-разработки более 10 лет .\\n',feedback:'Во время работы руководителем одной из групп верстки в Яндексе передо мной встала задача повышения квалификации большой команды верстальщиков. После длительного анализа я выбрал курс на learn.javascript.ru и остался очень доволен результатом, считаю этот курс лучшим из существующих на русском языке.\\n'}]}};","export default {dropbox_share:{enter_email:'Введите ниже email, с которым вы зарегистрированы на Dropbox. Вам придёт инвайт (функциональность в бете).\\n',by_default:'\"По умолчанию\" в поле введён ваш email на этом сайте, но, если вы уже используете Dropbox с другим email, то можете его поменять.\\n',request_access:'Запросить доступ к каталогу',no_dropbox:'У этой группы не включён Dropbox',success:'Готово, проверьте, в Dropbox должен быть инвайт. Он также придёт на email.'},materials:{notify_me:'Уведомлять меня по email о появлении материалов.',title:'Добавление материалов',filename:'Имя файла, по времени занятия:  ',comment:'Комментарий (опционально)',notifications:'Рассылать уведомления',submit:'Добавить',serial_number:'Серийный номер для видео:',name:'Название',size:'Размер',added_date:'Добавлено',no_materials:'Материалов пока нет, будут доступны позже.',chat_logs:'Логи чата'},slack_logs:{title:'Логи группового чата'}};","export default {course_feedback:{missing_score:'Не стоит оценка.',missing_text:'Отсутствует текст отзыва.',missing_country:'Страна не указана.'},course_group:{invalid_timeStart:'Некорректное время начала',invalid_timeEnd:'Некорректное время конца'},course_participant:{missing_name:'Имя отсутствует.',invalid_name:'Имя дожно состоять из одного слова.',missing_surname:'Фамилия отсутствует.',invalid_surname:'Фамилия должна состоять из одного слова.',missing_country:'Страна не указана.',invalid_url:'Некорректный URL страницы.'}};","export default {courses:'Курсы',type:{masterclass:'интенсив',course:'курс'},by_user:{title:'Описание',info:'Инструкции по настройке окружения',slack_logs:'Логи slack чата',jb:'Скидка на редакторы Jetbrains',ical:'Расписание в формате iCal',tasklist:'Задачник',materials:'Материалы для обучения',participants:'Анкеты участников',participants_json:'JSON участников (для CORS)'},group_feedback_list:{plural_feedback:'отзыв,отзыва,отзывов'},group_feedback_edit:{no_participant:'Оставлять отзыв могут только участники группы.',no_rights:'Не хватает прав',title:'Отзыв',public_feedback:'Ваш отзыв успешно сохранен. При желании, вы можете поделиться им в соц сетях.',private_feedback:'Ваш отзыв успешно сохранен. Он будет виден только нам.',rate_course:'Поставьте, пожалуйста, #{type}у оценку.',missing_feedback_text:'Вы забыли написать текст отзыва.'},group_feedback_show:{private_feedback:'Отзыв не публичный',title:'Отзыв',head_title:'Отзыв на',comment_saved:'Комментарий сохранён',comment_save_error:'Не получилось сохранить комментарий',edit:'редактировать'},group_finish:'Группа #{title} успешно завершена.',group_cancel:'Группа #{title} успешно отменена.',group_materials:{title:'Материалы для обучения',added_with_notifications:'Материал добавлен, уведомления разосланы.',added_wo_notifications:'Материал добавлен, уведомления НЕ рассылались.',email_subject:'Добавлены материалы #{type}а',remove_file:'Удалить файл',file_removed:'Файл удалён.',settings_saved:'Настройка сохранена.'},group_materials_download:{invalid_link:'Ссылка неверна. Возможно, этот материал был добавлен по ошибке и позже удалён из преподавателем.'},group_slack_register:{already_slack_user:'Пользователь с адресом #{email} уже зарегистрирован в Slack.',user_invited:'Приглашение отправлено на адрес #{email}.'},group_telegram_role:{not_participant:'Не участник курса',no_target:'Не участник и не преподаватель',invite_generated:'Ссылка-инвайт создана.'},group_slack_invite:{not_participant:'Не участник курса',no_slack_user:'Пользователь с адресом #{email} не зарегистрирован в Slack, сначала запросите приглашение.',user_added:'Пользователь #{email} приглашён в slack-канал #{groupSlug}.'},participants:{data_updated:'Данные обновлены.',fix_errors:'Исправьте, пожалуйста, ошибки.'},invite:{order:'Заказ #{order}',success:'Поздравляем, вы присоединились к #{type}у. Ниже, рядом с #{type}ом, вы найдёте инструкцию.',already_accepted_title:'Это приглашение уже принято',already_accepted:'Это приглашение уже принято. Зайдите в учётную запись участника для доступа к #{type}у.',outdated_link_title:'Ссылка устарела',outdated_link:'Извините, ссылка по которой вы перешли, устарела. Если у вас возникли какие-либо вопросы – пишите на #{email}',already_added:'Вы уже участник #{type}а. Ниже, рядом с #{type}ом, вы найдёте инструкцию.',choose_country:' выберите страну ',details_form:{title:'Анкета участника',first_name:'Имя на русском*',surname:'Фамилия на русском*',first_name_en:'Имя на английском*',surname_en:'Фамилия на английском*',photo:'Фото',photo_upload:'Загрузить новое фото',country:'Страна *',city:'Город',occupation:'Текущая работа или учёба (если есть)',occupation_note:'Кем или в какой области работаете (кратко)',experienceGit:'Знаете Git? *',experienceGitOptions:[null,'Нет','Использовал для себя','Использовал в командной разработке'],experienceDoc:'Умеете пользоваться технической документацией и справочной литературой? *',experienceDocOptions:[null,'Почти не читал таковую','Иногда у меня возникают проблемы с чтением тех. документации','Да, у меня хороший опыт самостоятельной работы с тех. документацией'],experienceHtmlCss:'Сколько лет опыта с HTML/CSS? *',experienceHtmlCss_note:'Можно дробное число, например, полгода: 0.5',experienceProgramming:'Сколько лет опыта в коммерческой (оплачиваемой) разработке на любом языке с ООП? *',experienceProgramming_note:'Например, на PHP, Java, C# или другом языке, НЕ считая HTML/CSS',experienceJs:'Сколько лет опыта в JavaScript? *',experienceJs_note:'Можно дробное число, например, полгода: 0.5',needJob:'Ищу работу',social_note:'Профиль в соц. сети или личная страница, где можно узнать о вашей профессиональной деятельности.',purpose:'С какой целью записались на #{type}?',wishes:'Ваши пожелания по #{type}у?',submit:'Отправить'},signup_form:{signup_needed:'Для продолжения вам необходимо зарегистрироваться.',username:'Имя пользователя',password:'Пароль',submit:'Зарегистрироваться'}},signup:{order:'Заказ',title:'Запись на #{course}',title_order:'Заказ #{order}',amount:'Стоимость',no_such_group:'Нет такой группы.',signup_finished_title:'Запись в эту группу завершена',signup_finished:'Запись в эту группу завершена. Перейдите на страницу #{type}а, чтобы увидеть открытые группы.',signup_title:'Регистрация\\n #{title}',tutorial:'Учебник',course_description:'описание курса',choose_group:'Выберите, пожалуйста, группу из списка.',login_please:'Пожалуйста, войдите в сайт или зарегистрируйтесь.',plural_human:'человека,человек,человек',plural_participant:'участник,участника,участников',plural_participant2:'участника,участников,участников',receiptTitle:'Участие в #{type}е для #{count} #{people}',email_subject:'Заказ #{order}',payment_failed:'Оплата не прошла, попробуйте ещё раз.',questions:'По вопросам, касающимся оплаты, пишите на #{ordersMail}.',contact_info:'Контактная информация:',payment:'Оплата:',payment_succeed:'Осуществлена успешно',payment_pending:'Ожидается подтверждение',thanks_for_order:'Спасибо за заказ!',confirmation:'Вам направлено уведомление на адрес #{email}.',click_to_join_group:'Перейдите в раздел Курсы вашей учетной записи, чтобы присоединиться к группе.',edit_participants:'

В разделе профиля Заказы введите, пожалуйста, данные участников.

',questions_after:'Если у вас возникли какие-либо вопросы, присылайте их на #{emailText}.',teacher:'Ведущий',seats_pluralize:'место,места,мест',seats_left:'Осталось #{seats} #{seats_pluralized}',seats_limited:'Количество мест ограничено',signup_button:'Записаться',subscribe:'Подписаться',confirmation_email:'На ваш email придёт письмо с информацией о дате и деталях программы.',this_course:'Этот курс',conducted_plural:'ведут:',conducted_single:'ведёт:'},statistic:{title:'Статистика участников'},feedback_loader:{no_feedback:'Отзывов пока нет.'},photo_load_widget:{wrong_format:'Неверный тип файла или изображение повреждено.'},participant_item:{participant:'Участник',invalid_email:'введите корректный email'},comment_form:{submit:'Опубликовать',cancel:'Отмена'},admin:{no_such_order:'Нет такого заказа.',no_such_group:'Нет такого заказа',no_such_file:'Нет такого файла',transfer_participant:'Вы переведены в группу #{title}',transfer_succeed_notified:'Перевод завершён, уведомление отослано.',transfer_succeed_not_notified:'Перевод завершён, уведомление НЕ отсылалось.',participant_edited:'Данные участника успешно изменены: #{email}',participant_deducted:'Участник отчислен: #{email}',document_uploaded:'Администратор загрузил документы к заказу #{order}'},course:{participant_discount:'Скидка 10% предоставлена EMAIL как участнику предыдущих курсов.'},patch:{information_updated_notified:'Информация обновлена, приглашения высланы на адреса: #{emails}.',information_updated_not_notified:'Информация об участниках обновлена.'},chat_logs:{title:'Логи группового чата',timeframe_from:'Временной диапазон c',timeframe_to:'по',apply:'Применить'},contacts:{title:'Контактная информация',note:'Оставьте ваши контактные данные, чтобы мы могли связаться с вами в случае необходимости',name_surname:'Имя и Фамилия:',phone:'Телефон:',data_secured:'Ваши данные в безопасности',personal_info:'Никакие ваши личные данные не будут переданы третьим лицам, кроме как по вашему желанию или для целей выполнения заключенного с вами договора.',save_and_continue:'Сохранить и продолжить'},grayed_list:{contact_info:'Контактная информация',payment:'Оплата',confirmation:'Подтверждение'},participant_register:{title:'Места и участники',participants_count:'Количество мест',only_one_place:'есть только 1 место, извините',enter_count:'введите значение от 1 до #{max}',already_participant:'Я являюсь участником',no:'НЕТ',yes:'ДА',amount:'Стоимость',add_participants:'Указать участников',add_later:'(это можно сделать позже)',save_and_continue:'Сохранить и продолжить'},payment:{title:'Оплата',do_not_pay_twice:'Не оплачивайте дважды. Меняйте метод оплаты лишь если уверены, что оплата не произошла.',terms_accept:'Оплачивая #{type}, вы соглашаетесь с договором оферты.',questions:'Если у вас возникли какие-либо вопросы, присылайте их на #{ordersMail}.',renew_order:'Заказ #{number} успешно переведен в статус ожидания оплаты.',renew_order_fail:'Вы не можете перевести заказ #{number} в статус ожидания оплаты, так как занятия уже начались.',goto_payment:'Перейти к оплате'},participant_info:{country:'Страна',city:'Город',about_link:'Ссылка на профиль',occupation:'Область работы',purpose:'С какой целью записались на #{type}?',wishes:'Ваши пожелания по #{type}у'},guarantee:{title:'Гарантия',description:'
    \\n
  • Если объяснения будут вам непонятны
  • \\n
  • Если курсы не дадут вам новых знаний и умений
  • \\n
  • Если вы не сможете подключиться к системе онлайн-обучения
  • \\n

…то вы сможете получить деньги назад.

\\n

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

\\n'},certificate:{title:'Сертификат',description:'По окончанию курсов каждый участник получает сертификат в электронном виде на русском и английском языках.'},additional_information:'Дополнительная информация',back_to_all:'Все курсы',create_order:{signup_finished:'Запись в эту группу завершена, извините.',no_seats:'Извините, в этой группе уже нет мест.',seats_limit:'Извините, уже нет такого количества мест. Уменьшите количество участников до #{max}.',no_contact_person:'Не указано контактное лицо.',no_email:'Не указан email.',invalid_email:'Некорректный email.',set_participants:'Отсутствуют участники.',not_authorized:'Вы не авторизованы.',title_check_prefix:'Обучение: #{title} (#{count}чел)',title_invoice_prefix:'Обучение: #{title}'},invite_email_subject:'Приглашение на #{type}: #{title}',invite_remind_email_subject:'#{group} – вы не присоединились к группе',request_notification:'Вы можете запросить уведомление:',promo_video:{text:'Обзор #{type}а'}};","export default {enter_email:'Введите, пожалуйста, email.'};","export default {group_start_soon:'Скоро группа: #{title}',reminder:'Напоминание #{title}',no_such_course:'Нет такого курса',not_a_teacher:'Вы не ведёте данный курс',days:['','пн','вт','ср','чт','пт','сб','вс'],group_exists:'Группа #{slug} уже существует'};","export default {server_connection_error:'Ошибка связи с сервером.',server_request_timeout:'Превышено максимально допустимое время ожидания ответа от сервера.',request_aborted:'Запрос был прерван.',no_response:'Не получен ответ от сервера.',server_error:'Ошибка на стороне сервера (код #{status}), попытайтесь позднее.',server_error_info:'Ошибка на стороне сервера (код #{status}). #{info}.',invalid_format:'Некорректный формат ответа от сервера.'};","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","let xhr = require('client/xhr');\nlet Spinner = require('client/spinner');\nlet delegate = require('client/delegate');\nlet notification = require('client/notification');\nlet clientRender = require('client/clientRender');\nlet commentForm = require('../../templates/feedback/comment-form.pug');\nconst t = require('engine/i18n/t');\nconst LANG = require('config').lang;\n\nt.i18n.add('courses', require('../../locales/' + LANG + '.yml'));\n\nclass FeedbackManager {\n\n constructor() {\n\n this.elem = document;\n\n this.delegate(\"[data-action-coursefeedback-comment-add]\", \"click\", (event) => {\n event.preventDefault();\n this.getItem(event.target).addComment();\n });\n\n this.delegate(\"[data-action-coursefeedback-comment-edit]\", \"click\", (event) => {\n event.preventDefault();\n this.getItem(event.target).editComment();\n });\n\n }\n\n getItem(elem) {\n elem = elem.closest('.course-feedback');\n if (!elem.feedbackItem) {\n elem.feedbackItem = new FeedbackItem(elem);\n }\n return elem.feedbackItem;\n }\n\n}\ndelegate.delegateMixin(FeedbackManager.prototype);\n\nclass FeedbackItem {\n constructor(elem) {\n this.elem = elem;\n\n this.number = +elem.getAttribute('data-coursefeedback-number');\n\n let commentStore = this.elem.querySelector('[data-coursefeedback-comment-raw]');\n this.teacherCommentRaw = commentStore ? commentStore.innerHTML.replace(/</g, '<').replace(/>/g, '>').replace(/&/ ,'&') : '';\n\n this.delegate(\".course-feedback-comment-form\", \"submit\", (event) => {\n event.preventDefault();\n this.onSubmitComment();\n });\n\n this.delegate(\"[data-action-comment-cancel]\", \"click\", (event) => {\n event.preventDefault();\n this.onCancelComment();\n });\n\n document.addEventListener('profile-tab-change', this.onCancelComment.bind(this));\n }\n\n addComment() {\n this.renderCommentForm();\n }\n\n editComment() {\n this.renderCommentForm();\n }\n\n renderCommentForm() {\n let teacherCommentElem = this.elem.querySelector('.course-feedback__teacher-comment');\n if (teacherCommentElem) {\n this.teacherComment = teacherCommentElem.firstChild.innerHTML;\n } else {\n this.teacherComment = \"\";\n teacherCommentElem = document.createElement('div');\n teacherCommentElem.className = 'course-feedback__teacher-comment';\n this.elem.querySelector('.course-feedback__teacher').appendChild(teacherCommentElem);\n }\n\n teacherCommentElem.innerHTML = clientRender(commentForm, {\n teacherCommentRaw: this.teacherCommentRaw\n });\n teacherCommentElem.querySelector('textarea').focus();\n }\n\n onCancelComment() {\n this.renderComment();\n }\n\n onSubmitComment() {\n let form = this.elem.querySelector('form');\n let value = form.elements.teacherComment.value.trim();\n\n const request = xhr({\n method: 'PATCH',\n url: '/courses/feedback/comment',\n body: {\n number: this.number,\n teacherComment: value\n }\n });\n\n let submitButton = form.querySelector('[type=\"submit\"]');\n\n let spinner = new Spinner({\n elem: submitButton,\n size: 'small',\n elemClass: 'button_loading'\n });\n spinner.start();\n submitButton.disabled = true;\n\n request.addEventListener('loadend', (event) => {\n spinner.stop();\n submitButton.disabled = false;\n });\n\n request.addEventListener('success', (event) => {\n\n if (request.status == 200) {\n new notification.Success(t('courses.group_feedback_show.comment_saved'));\n\n this.teacherCommentRaw = value;\n this.teacherComment = event.result.teacherComment;\n\n this.renderComment();\n } else {\n new notification.Error(t('courses.group_feedback_show.comment_save_error'));\n }\n });\n\n\n\n }\n\n renderComment() {\n let teacherCommentElem = this.elem.querySelector('.course-feedback__teacher-comment');\n\n if (!this.teacherComment) {\n if (teacherCommentElem) teacherCommentElem.remove();\n this.elem.querySelector('[data-action-coursefeedback-comment-add]').style.display = '';\n return;\n }\n\n this.elem.querySelector('[data-action-coursefeedback-comment-add]').style.display = 'none';\n\n teacherCommentElem.innerHTML = `
\n ${t('courses.group_feedback_show.edit')}\n `;\n teacherCommentElem.firstChild.innerHTML = this.teacherComment;\n }\n\n}\n\ndelegate.delegateMixin(FeedbackItem.prototype);\n\nfunction init() {\n\n new FeedbackManager();\n\n}\n\n\ninit();\n"],"names":["map","webpackContext","req","id","webpackContextResolve","__webpack_require__","o","e","Error","code","keys","Object","resolve","module","exports","thumb","require","config","t","template","locals","lang","env","addStandardHelpers","create","LANG","localCurrency","shopCurrency","NODE_ENV","rateShopTo","countryCode","ordersMail","providers","stripeKey","paypalClientId","telegramBotId","lookatCodeUrlBase","isRTL","delegate","topElement","selector","eventName","handler","context","addEventListener","event","found","currentNode","target","matches","currentTarget","parentElement","findDelegateTarget","delegateTarget","call","this","delegateMixin","obj","elem","csrfCookie","document","cookie","match","url","width","height","pixelRatio","window","devicePixelRatio","modifier","slice","lastIndexOf","NotificationManager","constructor","options","notifications","verticalSpace","register","notification","unshift","setTimeout","recalculate","unregister","idx","indexOf","splice","top","forEach","init","notificationManager","Notification","html","type","timeout","elemHtml","body","insertAdjacentHTML","lastElementChild","undefined","TIMEOUT_DEFAULT","TIMEOUT_SLOW","TIMEOUT_FAST","setupCloseHandler","setupCloseTimeout","close","parentNode","remove","offsetHeight","value","style","transform","prototype","Info","super","Warning","Success","Spinner","size","class","elemClass","createElement","start","classList","toggle","stop","spinnerElem","querySelector","getCsrfCookie","i18n","add","reason","request","XMLHttpRequest","method","open","sync","skipCsrf","setRequestHeader","responseType","toString","JSON","stringify","noDocumentEvents","timeStart","Date","now","wrapEvent","dispatchEvent","result","raw","normalStatuses","name","CustomEvent","originalEvent","fail","status","response","responseText","getResponseHeader","json","parse","includes","success","info","send","err","console","error","phrase","hasPhrase","process","I18N_DEBUG","arguments","setFallback","args","arg","__esModule","default","addPhrase","parser","plural","_class","isString","isNumber","isNaN","isFinite","isBoolean","isObject","isArray","Array","nativeForEach","iterator","length","i","l","key","hasOwnProperty","formatRegExp","format","f","len","String","replace","x","Number","flatten","params","val","sub_val","sub_key","keySeparator","makePhraseKey","locale","searchPhraseKey","self","storage","_storage","_defaultLocale","fb_cache","_fallbacks_cache","fb_key","fb","_fallbacks","pluralizer","forms","BabelFish","defaultLocale","_plurals_cache","translation","flattenLevel","fl","Infinity","Math","floor","TypeError","fallbacks","def","push","CAN_HAVE_DIRECTIVES_RE","translate","data","compiled","str","nodes","buf","strict_exec","forms_exec","plurals_cache","test","text","node","anchor","strict","k","parsed","unescaped","split","Function","join","compile","count","noFallback","getLocale","unique","out","fallback","locales","load","phrases","rule","SyntaxError","message","expected","offset","line","column","child","parent","ctor","peg$subclass","input","peg$result","peg$FAILED","peg$startRuleFunctions","peg$parsestart","peg$startRuleFunction","peg$c1","peg$c2","peg$c3","description","peg$c4","peg$c5","peg$c6","peg$c7","regularForms","strictForms","peg$c8","peg$c9","peg$c10","part","more","concat","peg$c11","peg$c12","peg$c13","peg$c14","peg$c15","peg$c16","peg$c17","peg$c18","form","peg$c19","peg$c20","peg$c21","peg$c22","peg$c23","peg$c24","char","peg$c25","peg$c26","peg$c27","peg$c28","peg$c29","peg$c30","peg$c31","peg$c32","peg$c33","peg$c34","peg$c35","peg$c36","peg$c37","peg$c38","peg$c39","peg$c40","peg$c41","peg$c42","peg$c43","lc","peg$c44","literal_chars","peg$c45","peg$c46","peg$currPos","peg$reportedPos","peg$cachedPos","peg$cachedPosDetails","seenCR","peg$maxFailPos","peg$maxFailExpected","peg$silentFails","startRule","substring","peg$computePosDetails","pos","details","startPos","endPos","p","ch","charAt","advance","peg$fail","peg$buildException","posDetails","sort","a","b","cleanupExpected","expectedDescs","s","hex","charCodeAt","toUpperCase","stringEscape","buildMessage","s0","s1","peg$parseliteral","peg$parseplural","peg$parsevariable","s2","s3","s4","substr","peg$parseplural_forms","peg$parseidentifier","peg$parseplural_anchor","peg$parseplural_part","s5","peg$parseplural_char","peg$parseidentifier_part","peg$parseliteral_char","normalize","loc","toLowerCase","c_re","cFn","sval","spl","pow","v","w","n","o_indexOf","oFn","c","ordinal","FORMS","unpack","B","y","IN","set","n100","i10","i100","i1000","n10","n1000000","f10","f100","i1000000","n1000","n100000","pug","pug_interp","pug_html","pug_mixins","locals_for_with","RegExp","bemto_settings_default_tag","bemto_settings_element","bemto_settings_modifier","bemto_settings_prefix","teacherCommentRaw","clone","copy","setTime","getTime","attr","bemto_tag_metadata","bemto_output_settings","bemto_settings","get_bemto_settings","settings","setting","customTag","self_closing","block","attributes","escape","attribute","tagMetadata","tagName","selfClosing","attrs","tag","newTag","contextIndex","bemto_chain_contexts","href","for","src","content_type","alt","title","role","nosrc_substitute","bemto_chain","prefix","isElement","metadata","block_sets_context","bemto_classes","bemto_objects","is_first_object","new_context","$$obj","$$l","klass","bemto_object","prev_object","sets_context","modifier_class","modifiers","element_class","name_with_context","name_with_modifier","found_prefix","prefix_regex_string","prefix_regex_test","name_with_prefix","subcontext","sub_object","flat_elements","context_with_element","new_classes","pug_index6","output_element","pug_index7","output_modifier","pug_index8","delimiter","class_delimiter","pug_has_own_property","pug_classes","escaping","className","classString","padding","escapeEnabled","pug_escape","pug_classes_array","pug_classes_object","pug_style","pug_attr","escaped","terse","toJSON","merge","pug_merge","valA","valB","classes","pug_match_html","_html","regexResult","exec","lastIndex","index","rethrow","pug_rethrow","filename","lineno","ex","lines","max","end","min","curr","path","site","privacy_policy","terms","banner_bottom","action_required","gdpr_dialog","accept","cancel","theme","light","dark","change","toolbar","lang_switcher","cta_text","footer_text","old_version","logo","normal","svg","small","sections","slug","sections_bak","buy_ebook_extra","buy_ebook","search_placeholder","search_button","public_profile","account","admin","logout","sorry_old_browser","contact_us","about_the_project","ilya_kantor","comments","loading","search","share","read_before_commenting","last_updated_at","choose_section","comment","help","meta","edit_on_github","hide_forever","hidden_forever","subscribe","agreement","button","button_unsubscribe","common_updates","common_updates_text","your_email","newsletters","no_selected","value_must_not_be_empty","value_is_too_long","value_is_too_short","invalid_email","invalid_value","invalid_autocomplete","invalid_date","invalid_range","save","upload_file","server_error","line1","line1_0","line2","no_user","no_participant","no_certificate","invite","invitation","invitation_masterclass","seat_has_been_reserved","click_to_join","contact_person","questions","invite_remind","hello","still_not_joined","join_for","materials","materials_added","click_to_download","move","you_were_moved","order_cancel","subject","order_cancelled","group_start_soon","payment_expired","duplicate","list_orders","need_login","already_payed_or_soon","already_payed","valid_one_day","payment_confirmation","payment_confirmed","participation_confirmed","free_participation","is_participant","title_all","average_grade","grades","participated","recommend_text","recommend_text_frontpage","all_feedbacks","feedback_cut","page","recommend","course","teacher","edit","grade","recommend_yes","recommend_no","feedback","feedback_placeholder","is_public","is_public_note","photo","photo_upload","country","city","occupation","social","social_note","submit","delete_confirm","deleted","list","policy","policy_list","filter","teachers","all","courses","opened_courses","people_talk_about","people_talk_about_single","features","onclick","program","master_class","master_class_text","opinions","ongoing","teachers_title","teachers_description","phone_toggler","learn_more","faq","another_question","old_comments","participant_logos","notes","professionals","articles","userpic","username","linkedin_link","about","dropbox_share","enter_email","by_default","request_access","no_dropbox","notify_me","serial_number","added_date","no_materials","chat_logs","slack_logs","course_feedback","missing_score","missing_text","missing_country","course_group","invalid_timeStart","invalid_timeEnd","course_participant","missing_name","invalid_name","missing_surname","invalid_surname","invalid_url","masterclass","by_user","jb","ical","tasklist","participants","participants_json","group_feedback_list","plural_feedback","group_feedback_edit","no_rights","public_feedback","private_feedback","rate_course","missing_feedback_text","group_feedback_show","head_title","comment_saved","comment_save_error","group_finish","group_cancel","group_materials","added_with_notifications","added_wo_notifications","email_subject","remove_file","file_removed","settings_saved","group_materials_download","invalid_link","group_slack_register","already_slack_user","user_invited","group_telegram_role","not_participant","no_target","invite_generated","group_slack_invite","no_slack_user","user_added","data_updated","fix_errors","order","already_accepted_title","already_accepted","outdated_link_title","outdated_link","already_added","choose_country","details_form","first_name","surname","first_name_en","surname_en","occupation_note","experienceGit","experienceGitOptions","experienceDoc","experienceDocOptions","experienceHtmlCss","experienceHtmlCss_note","experienceProgramming","experienceProgramming_note","experienceJs","experienceJs_note","needJob","purpose","wishes","signup_form","signup_needed","password","signup","title_order","amount","no_such_group","signup_finished_title","signup_finished","signup_title","tutorial","course_description","choose_group","login_please","plural_human","plural_participant","plural_participant2","receiptTitle","payment_failed","contact_info","payment","payment_succeed","payment_pending","thanks_for_order","confirmation","click_to_join_group","edit_participants","questions_after","seats_pluralize","seats_left","seats_limited","signup_button","confirmation_email","this_course","conducted_plural","conducted_single","statistic","feedback_loader","no_feedback","photo_load_widget","wrong_format","participant_item","participant","comment_form","no_such_order","no_such_file","transfer_participant","transfer_succeed_notified","transfer_succeed_not_notified","participant_edited","participant_deducted","document_uploaded","participant_discount","patch","information_updated_notified","information_updated_not_notified","timeframe_from","timeframe_to","apply","contacts","note","name_surname","phone","data_secured","personal_info","save_and_continue","grayed_list","participant_register","participants_count","only_one_place","enter_count","already_participant","no","yes","add_participants","add_later","do_not_pay_twice","terms_accept","renew_order","renew_order_fail","goto_payment","participant_info","about_link","guarantee","certificate","additional_information","back_to_all","create_order","no_seats","seats_limit","no_contact_person","no_email","set_participants","not_authorized","title_check_prefix","title_invoice_prefix","invite_email_subject","invite_remind_email_subject","request_notification","promo_video","reminder","no_such_course","not_a_teacher","days","group_exists","server_connection_error","server_request_timeout","request_aborted","no_response","server_error_info","invalid_format","__webpack_module_cache__","moduleId","cachedModule","__webpack_modules__","d","definition","defineProperty","enumerable","get","prop","r","Symbol","toStringTag","xhr","clientRender","commentForm","FeedbackManager","preventDefault","getItem","addComment","editComment","closest","feedbackItem","FeedbackItem","number","getAttribute","commentStore","innerHTML","onSubmitComment","onCancelComment","bind","renderCommentForm","teacherCommentElem","teacherComment","firstChild","appendChild","focus","renderComment","elements","trim","submitButton","spinner","disabled","display"],"sourceRoot":""}