PageSourceSearch

https://javascript.info/pack/tutorial.4b5752675459006b4b6e.js

js javascript.info collected 2026-10-01 08:36:12 UTC 116,891 bytes, 3,412 lines download raw bytes

1/*! For license information please see tutorial.4b5752675459006b4b6e.js.LICENSE.txt */
2var tutorial;
3
4(function() {
5var __webpack_modules__ = {
6225: function(e) {
7function t(e) {
8let t = document.createElement("div"), n = getComputedStyle(e);
9return t.style.width = e.offsetWidth + "px", t.style.marginLeft = n.marginLeft, 
10t.style.marginRight = n.marginRight, t.style.position = n.position, t.style.height = e.offsetHeight + "px", 
11t.style.marginBottom = n.marginBottom, t.style.marginTop = n.marginTop, t;
12}
13e.exports = function() {
14let e = document.querySelectorAll("[data-sticky]");
15for (let n = 0; n < e.length; n++) {
16let r = e[n], i = r.dataset.sticky ? JSON.parse(r.dataset.sticky) : {}, o = i.bottomLimit ? document.querySelector(i.bottomLimit) : null, s = i.container ? document.querySelector(i.container) : document.body, a = !i.minWidth || document.documentElement.clientWidth > i.minWidth;
17if (r.placeholder) (r.placeholder.getBoundingClientRect().top > 0 || !a) && (r.style.cssText = "", 
18r.classList.remove("sticky"), r.placeholder.parentNode.insertBefore(r, r.placeholder), 
19r.placeholder.remove(), r.placeholder = null); else if (r.placeholder && o) o.getBoundingClientRect().top <= r.offsetHeight ? ("fixed" == r.style.position && (r.style.top = window.pageYOffset + "px"), 
20r.style.position = "absolute") : (r.style.position = "fixed", r.style.top = 0); else if (r.getBoundingClientRect().top < 0 && a) {
21if (r.style.cssText) return;
22let e, n;
23i.saveRight ? n = document.documentElement.clientWidth - r.getBoundingClientRect().right : e = r.getBoundingClientRect().left;
24let o = i.noPlaceholder ? document.createElement("div") : t(r), a = r.offsetWidth;
25r.after(o), s.appendChild(r), r.classList.add("sticky"), r.style.position = "fixed", 
26r.style.top = 0, i.saveRight ? r.style.right = n + "px" : r.style.left = e + "px", 
27r.style.zIndex = 101, r.style.background = "white", r.style.margin = 0, r.style.width = a + "px", 
28r.placeholder = o;
29}
30}
31};
32},
33467: function(e, t, n) {
34let r = n(4596);
35e.exports = function() {
36window.consoleLogNative = window.console.log.bind(console), console.log = function(...e) {
37consoleLogNative(...e);
38let t = {
39type: "console-log",
40log: r(e),
41codeBoxId: window.__codeBoxId
42};
43window.postMessage(t, "*");
44}, window.addEventListener("message", ({source: e, data: t}) => {
45if (e != window && e == window.parent) return;
46if ("console-log" != t.type) return;
47let n = document.getElementById(t.codeBoxId);
48n && n.codeBox.consoleLog(t.log);
49});
50};
51},
52773: function(e, t, n) {
53"use strict";
54const r = new (n(8679))("en");
55let i = console.error;
56function o(e) {
57if (!r.hasPhrase(s, e)) {
58!1 && i("No such phrase", e);
59}
60return r.t(s, ...arguments);
61}
62e.exports = o;
63const s = n(9907).lang;
64"en" !== s && r.setFallback(s, "en"), r.add = (...e) => (e = e.map(e => e.__esModule ? e.default : e), 
65r.addPhrase(s, ...e)), o.i18n = r;
66},
67820: function(e, t, n) {
68let r = n(7746), i = n(8849), o = [];
69t.iframe = function(e) {
70r.async(e, function(t, n) {
71n && (e.style.height = n + "px");
72});
73}, t.codeTabs = function(e) {
74function t() {
75let t = e.closest(".code-tabs"), n = (e.closest("[data-code-tabs-content]"), t.querySelector("[data-code-tabs-switches]"));
76n.firstElementChild.offsetWidth > n.offsetWidth ? t.classList.add("code-tabs_scroll") : t.classList.remove("code-tabs_scroll");
77}
78t(), o.push(t);
79}, window.addEventListener("resize", i(function() {
80o.forEach(e => e());
81}, 200));
82},
83937: function(e, t, n) {
84var r = n(2983), i = Object.prototype, o = i.hasOwnProperty, s = i.toString, a = r ? r.toStringTag : void 0;
85e.exports = function(e) {
86var t = o.call(e, a), n = e[a];
87try {
88e[a] = void 0;
89var r = !0;
90} catch (e) {}
91var i = s.call(e);
92return r && (t ? e[a] = n : delete e[a]), i;
93};
94},
951113: function(e, t) {
96!function(e) {
97var t = /(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;
98e.languages.css = {
99comment: /\/\*[\s\S]*?\*\//,
100atrule: {
101pattern: RegExp("@[\\w-](?:" + /[^;{\s"']|\s+(?!\s)/.source + "|" + t.source + ")*?" + /(?:;|(?=\s*\{))/.source),
102inside: {
103rule: /^@[\w-]+/,
104"selector-function-argument": {
105pattern: /(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]
105*\))*\))+(?=\s*\))/,
106lookbehind: !0,
107alias: "selector"
108},
109keyword: {
110pattern: /(^|[^\w-])(?:and|not|only|or)(?![\w-])/,
111lookbehind: !0
112}
113}
114},
115url: {
116pattern: RegExp("\\burl\\((?:" + t.source + "|" + /(?:[^\\\r\n()"']|\\[\s\S])*/.source + ")\\)", "i"),
117greedy: !0,
118inside: {
119function: /^url/i,
120punctuation: /^\(|\)$/,
121string: {
122pattern: RegExp("^" + t.source + "$"),
123alias: "url"
124}
125}
126},
127selector: {
128pattern: RegExp("(^|[{}\\s])[^{}\\s](?:[^{};\"'\\s]|\\s+(?![\\s{])|" + t.source + ")*(?=\\s*\\{)"),
129lookbehind: !0
130},
131string: {
132pattern: t,
133greedy: !0
134},
135property: {
136pattern: /(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,
137lookbehind: !0
138},
139important: /!important\b/i,
140function: {
141pattern: /(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,
142lookbehind: !0
143},
144punctuation: /[(){};:,]/
145}, e.languages.css.atrule.inside.rest = e.languages.css;
146var n = e.languages.markup;
147n && (n.tag.addInlined("style", "css"), n.tag.addAttribute("style", "css"));
148}(Prism);
149},
1501328: function(e, t, n) {
151let r = n(820), i = n(6970), o = n(8060);
152n(9516);
153const s = n(9907);
154let a = n(4596);
155const l = n(773), c = n(9907).lang;
156l.i18n.add("prism", n(3692)("./" + c + ".yml")), e.exports = function(e) {
157let t, n = e.querySelector("pre"), c = Array.from(n.childNodes).find(e => "CODE" === e.tagName), u = c.textContent;
158e.codeBox = this;
159let d = u;
160e.hasAttribute("data-async") && (d = `(async () => {\n${u}\n})()`), Prism.highlightElement(c);
161let p = o(n.innerHTML);
162n.insertAdjacentHTML("afterBegin", p);
163let h = JSON.parse(e.getAttribute("data-highlight"));
164h && function(e, t) {
165let n = e.innerHTML, r = n.split(/\n/);
166for (let e of t) if (void 0 !== e.end) r[e.start] = '<em class="block-highlight">' + r[e.start], 
167r[e.end] += "</em>"; else {
168let t = r[e.start], n = e.cols, i = !1, o = -1, s = "";
169for (let e = 0; e < t.length; e++) {
170if ("<" == t[e] && (i = !0), i) s += t[e]; else {
171if (o++, n.find(e => e.start == o) && (s += '<em class="inline-highlight">'), s += t[e], 
172"&" == t[e]) {
173let n = [ "lt;", "gt;", "amp;", "quot;" ];
174for (let r of n) t.slice(e + 1, e + 1 + r.length) == r && (e += r.length, s += r);
175}
176n.find(e => e.end == o + 1) && (s += "</em>");
177}
178">" == t[e] && (i = !1);
179}
180r[e.start] = s;
181}
182e.innerHTML = r.join("\n");
183}(c, h);
184let f, m, g, E = n.classList.contains("language-javascript"), b = n.classList.contains("language-markup"), T = +e.getAttribute("data-trusted"), v = !+e.getAttribute("data-no-strict") && E ? '"use strict";' : "", S = `globalThis.__codeBoxId = "${e.id}";`, _ = `${v}\n\n${d}`;
185d = `${v}${S}\n\n${d}`;
186let y = !0;
187if (!E && !b) return;
188let A = e.querySelector('[data-action="run"]');
189A && (A.onclick = function() {
190return this.blur(), R(), !1;
191});
192let w = e.querySelector('[data-action="edit"]');
193function L() {
194let e = f.contentWindow;
195"function" == typeof e.postMessage ? e.postMessage(d, s.lookatCodeUrlBase + "/showjs") : alert("Sorry, your browser is too old");
196}
197function I() {
198if (e.hasAttribute("data-global")) {
199m || (m = document.createElement("iframe"), m.className = "js-frame", m.style.width = 0, 
200m.style.height = 0, m.style.border = "none", m.name = "js-global-frame", document.body.appendChild(m));
201let t = document.createElement("form");
202t.style.display = "none", t.method = "POST", t.enctype = "multipart/form-data", 
203t.action = s.lookatCodeUrlBase + "/showhtml", t.target = "js-global-frame";
204let n = e.hasAttribute("data-module") ? ' type="module"' : "", r = document.createElement("textarea");
205r.name = "code", r.value = O(`<script${n}>\n${d}\n<\/script>`), t.appendChild(r), 
206m.parentNode.insertBefore(t, m.nextSibling), t.submit(), t.remove();
207} else if (T) {
208if (e.hasAttribute("data-autorun") || e.hasAttribute("data-module")) return void function(e) {
209let t = document.createElement("script");
210t.type = "module", t.text = e, document.head.append(t), t.remove();
211}(d);
212try {
213window.eval.call(window, d);
214} catch (e) {
215alert(e.constructor.name + ": " + e.message);
216}
217} else e.hasAttribute("data-refresh") && f && (f.remove(), f = null), f ? L() : (f = document.createElement("iframe"), 
218f.className = "js-frame", f.src = s.lookatCodeUrlBase + "/showjs", f.style.width = 0, 
219f.style.height = 0, f.style.border = "none", f.onload = function() {
220L();
221}, document.body.appendChild(f));
222}
223function O(e) {
224if (e.match(/^\s*<!doctype/i)) return e;
225let t = e;
226return e.match(/<body/i) || (t = `<body>\n${t}\n</body>`), t = "<!doctype html>\n" + t, 
227t;
228}
229function R() {
230t && (t.remove(), t = null), E ? I() : function() {
231let t;
232if (g && e.hasAttribute("data-refresh") && (g.remove(), g = null), g || (g = e.querySelector(".code-result")), 
233g) t = g.querySelector("iframe"); else {
234if (g = document.createElement("div"), g.className = "code-result code-example__result", 
235t = document.createElement("iframe"), t.name = e.id, t.className = "code-result__iframe", 
236"0" === e.getAttribute("data-demo-height")) g.style.display = "none"; else if (e.hasAttribute("data-demo-height")) {
237let n = +e.getAttribute("data-demo-height");
238t.style.height = n + "px";
239}
240g.appendChild(t), e.appendChild(g);
241}
242if (T && !t.hasCustomConsoleLog) {
243t.hasCustomConsoleLog = !0;
244let n = t.contentWindow.console.log.bind(t.contentWindow.console);
245t.contentWindow.console.log = function(...t) {
246n(...t);
247let r = a(t);
248window.postMessage({
249type: "console-log",
250log: r,
251codeBoxId: e.id
252}, "*");
253};
254}
255if (T) {
256let n = t.contentDocument || t.contentWindow.document;
257n.open(), n.write(O(u)), n.close(), e.hasAttribute("data-demo-height") || r.iframe(t), 
258y && e.hasAttribute("data-autorun") || i(g) || g.scrollIntoView(!1);
259} else {
260let n = document.createElement("form");
261n.style.display = "none", n.method = "POST", n.enctype = "multipart/form-data", 
262n.action = s.lookatCodeUrlBase + "/showhtml", n.target = t.name;
263let o = document.createElement("textarea");
264o.name = "code";
265let a = O(u);
266a.includes("console.log") && (a = a.replace(/<head>|<body>/im, "$&__LOOKATCODE_SCRIPT__")), 
267o.value = a, n.appendChild(o), t.parentNode.insertBefore(n, t.nextSibling), n.submit(), 
268n.remove(), y && e.hasAttribute("data-autorun") || (t.onload = function() {
269e.hasAttribute("data-demo-height") || r.iframe(t), i(g) || g.scrollIntoView(!1);
270});
271}
272}(), y = !1;
273}
274w && (w.onclick = function() {
275return this.blur(), function() {
276let e;
277e = b ? O(u) : `<!DOCTYPE html>\n<script>\n${_}\n<\/script>`;
278let t = document.createElement("form");
279t.action = "https://plnkr.co/edit/?p=preview", t.method = "POST", t.target = "_blank", 
280document.body.appendChild(t);
281let n = document.createElement("textarea");
282n.name = "files[index.html]", n.value = e, t.appendChild(n);
283let r = document.createElement("input");
284r.name = "description", r.value = "Fork from " + window.location, t.appendChild(r), 
285t.submit(), t.remove();
286}(), !1;
287}), e.hasAttribute("data-autorun") && ("epub" == window.ebookType && "no-epub" == e.getAttribute("data-autorun") ? e.querySelector("iframe").remove() : setTimeout(R, 100)), 
288this.consoleLog = function(n) {
289if (!t) {
290t = document.createElement("div"), t.className = "codebox__output", e.append(t);
291let n = document.createElement("div");
292n.className = "codebox__output-label", n.innerHTML = l("prism.output"), t.append(n);
293}
294let r = document.createElement("div");
295r.className = "codebox__output-line", r.innerHTML = n, t.append(r);
296};
297};
298},
2991486: function(e, t, n) {
300var r = n(6339);
301e.exports = function() {
302return r.Date.now();
303};
304},
3051495: function(e, t, n) {
306let r = n(5345), i = n(4629);
307const o = n(9907).lang, s = n(773);
308s.i18n.add("", n(3205)("./" + o + ".yml")), s.i18n.add("error.network", n(6188)("./" + o + ".yml")), 
309document.addEventListener("xhrfail", function(e) {
310new r.Error(e.reason);
311}), e.exports = function(e) {
312let t = new XMLHttpRequest, n = e.method || "GET", r = e.body, o = e.url;
313t.open(n, o, !e.sync), t.method = n;
314let a = i();
315a && !e.skipCsrf && t.setRequestHeader("X-XSRF-TOKEN", a), e.responseType && (t.responseType = e.responseType), 
316"[object Object]" == {}.toString.call(r) && (t.setRequestHeader("Content-Type", "application/json;charset=UTF-8"), 
317r = JSON.stringify(r)), e.noDocumentEvents || (t.addEventListener("loadstart", e => {
318t.timeStart = Date.now();
319let n = c("xhrstart", e);
320document.dispatchEvent(n);
321}), t.addEventListener("loadend", e => {
322let t = c("xhrend", e);
323document.dispatchEvent(t);
324}), t.addEventListener("success", e => {
325let t = c("xhrsuccess", e);
326t.result = e.result, document.dispatchEvent(t);
327}), t.addEventListener("fail", e => {
328let t = c("xhrfail", e);
329t.reason = e.reason, document.dispatchEvent(t);
330})), e.raw || t.setRequestHeader("Accept", "application/json"), t.setRequestHeader("X-Requested-With", "XMLHttpRequest");
331let l = e.normalStatuses || [ 200 ];
332function c(e, t) {
333let n = new CustomEvent(e);
334return n.originalEvent = t, n;
335}
336function u(e, n) {
337let r = c("fail", n);
338r.reason = e, t.dispatchEvent(r);
339}
340return t.addEventListener("error", e => {
341u(s("error.network.server_connection_error"), e);
342}), t.addEventListener("timeout", e => {
343u(s("error.network.server_request_timeout"), e);
344}), t.addEventListener("abort", e => {
345u(s("error.network.request_aborted"), e);
346}), t.addEventListener("load", n => {
347if (!t.status) return void u(s("error.network.no_response"), n);
348let r = e.responseType && "text" !== e.responseType ? t.response : t.responseText;
349if ((t.getResponseHeader("Content-Type") || "").match(/^application\/json/) || e.json) try {
350r = JSON.parse(r);
351} catch (n) {
352return void u(s("error.network.invalid_format"), n);
353}
354if (!l.includes(t.status)) {
355return void u(r.info ? s("error.network.server_error_info", {
356status: t.status,
357info: r.info
358}) : s("error.network.server_error", {
359status: t.status
360}), n);
361}
362!function(e, n) {
363let r = c("success", n);
364r.result = e, t.dispatchEvent(r);
365}(r, n);
366}), setTimeout(function() {
367t.send(r);
368}), t;
369};
370},
3711552: function(e, t, n) {
372var r = n(9006), i = n(3667), o = n(6516), s = /^[-+]0x[0-9a-f]+$/i, a = /^0b[01]+$/i, l = /^0o[0-7]+$/i, c = parseInt;
373e.exports = function(e) {
374if ("number" == typeof e) return e;
375if (o(e)) return NaN;
376if (i(e)) {
377var t = "function" == typeof e.valueOf ? e.valueOf() : e;
378e = i(t) ? t + "" : t;
379}
380if ("string" != typeof e) return 0 === e ? e : +e;
381e = r(e);
382var n = a.test(e);
383return n || l.test(e) ? c(e.slice(2), n ? 2 : 8) : s.test(e) ? NaN : +e;
384};
385},
3861623: function(e, t, n) {
387let r = n(7200);
388e.exports = class {
389constructor(e) {
390this.slider = e.el, this.list = this.slider.querySelector("ul"), e.class && (this.classList = e.class.split(" ")), 
391this.disabled = !1, this.init(), this.bindHandlers();
392}
393init() {
394this.classList && this.classList.length && this.slider.classList.add(...this.classList), 
395this.slider.classList.add("slider_disable-left");
396const e = document.createElement("div");
397e.classList.add("slider__container"), e.appendChild(this.list), this.slider.innerHTML = '<button class="slider__arrow slider__arrow_left"></button><button class="slider__arrow slider__arrow_right"></button>', 
398this.slider.appendChild(e), this.innerWidth = this.countInnerWidth(), this.arrowLeft = this.slider.querySelector(".slider__arrow_left"), 
399this.arrowRight = this.slider.querySelector(".slider__arrow_right");
400}
401countInnerWidth() {
402return [ ...this.list.querySelectorAll("li") ].reduce((e, t) => {
403const n = window.getComputedStyle(t);
404return e + (t.offsetWidth + parseFloat(n.marginLeft) + parseFloat(n.marginRight));
405}, 0);
406}
407bindHandlers() {
408this.transformX = 0, this.arrowLeft.addEventListener("click", () => {
409this.transformX -= this.list.clientWidth, this.transformX < 0 && (this.transformX = 0), 
410this.render();
411}), this.arrowRight.addEventListener("click", () => {
412this.transformX = Math.min(this.transformX + this.list.clientWidth, this.list.scrollWidth - this.list.clientWidth), 
413this.render();
414}), window.addEventListener("resize", r(() => {
415this.onResize();
416}, 200)), this.onResize();
417}
418onResize() {
419!this.disabled && this.innerWidth <= this.list.offsetWidth ? (this.slider.classList.add("slider_disabled"), 
420this.disabled = !0, this.transformX > 0 && (this.transformX = 0, this.slider.classList.contains("slider_disable-right") && this.slider.classList.remove("slider_disable-right"), 
421this.render())) : this.disabled && this.innerWidth > this.list.offsetWidth && (this.slider.classList.remove("slider_disabled"), 
422this.slider.classList.contains("slider_disable-right") && this.slider.classList.remove("slider_disable-right"), 
423this.disabled = !1);
424}
425render() {
426this.list.style.transform = this.transformX > 0 ? `translateX(${-this.transformX}px)` : "translateX(0)", 
4270 === this.transformX ? this.slider.classList.add("slider_disable-left") : this.slider.classList.remove("slider_disable-left"), 
428this.transformX == this.list.scrollWidth - this.list.clientWidth ? this.slider.classList.add("slider_disable-right") : this.slider.classList.remove("slider_disable-right");
429}
430};
431},
4321983: function(e, t) {
433var n = function(e) {
434var t = /(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i, n = 0, r = {}, i = {
435manual: e.Prism && e.Prism.manual,
436disableWorkerMessageHandler: e.Prism && e.Prism.disableWorkerMessageHandler,
437util: {
438encode: function e(t) {
439return t instanceof o ? new o(t.type, e(t.content), t.alias) : Array.isArray(t) ? t.map(e) : t.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/\u00a0/g, " ");
440},
441type: function(e) {
442return Object.prototype.toString.call(e).slice(8, -1);
443},
444objId: function(e) {
445return e.__id || Object.defineProperty(e, "__id", {
446value: ++n
447}), e.__id;
448},
449clone: function e(t, n) {
450var r, o;
451switch (n = n || {}, i.util.type(t)) {
452case "Object":
453if (o = i.util.objId(t), n[o]) return n[o];
454for (var s in r = {}, n[o] = r, t) t.hasOwnProperty(s) && (r[s] = e(t[s], n));
455return r;
456
457case "Array":
458return o = i.util.objId(t), n[o] ? n[o] : (r = [], n[o] = r, t.forEach(function(t, i) {
459r[i] = e(t, n);
460}), r);
461
462default:
463return t;
464}
465},
466getLanguage: function(e) {
467for (;e; ) {
468var n = t.exec(e.className);
469if (n) return n[1].toLowerCase();
470e = e.parentElement;
471}
472return "none";
473},
474setLanguage: function(e, n) {
475e.className = e.className.replace(RegExp(t, "gi"), ""), e.classList.add("language-" + n);
476},
477currentScript: function() {
478if ("undefined" == typeof document) return null;
479if (document.currentScript && "SCRIPT" === document.currentScript.tagName) return document.currentScript;
480try {
481throw new Error;
482} catch (r) {
483var e = (/at [^(\r\n]*\((.*):[^:]+:[^:]+\)$/i.exec(r.stack) || [])[1];
484if (e) {
485var t = document.getElementsByTagName("script");
486for (var n in t) if (t[n].src == e) return t[n];
487}
488return null;
489}
490},
491isActive: function(e, t, n) {
492for (var r = "no-" + t; e; ) {
493var i = e.classList;
494if (i.contains(t)) return !0;
495if (i.contains(r)) return !1;
496e = e.parentElement;
497}
498return !!n;
499}
500},
501languages: {
502plain: r,
503plaintext: r,
504text: r,
505txt: r,
506extend: function(e, t) {
507var n = i.util.clone(i.languages[e]);
vendor: 7,632 bytes, lines 508-753
508for (var r in t) n[r] = t[r];
509return n;
510},
511insertBefore: function(e, t, n, r) {
512var o = (r = r || i.languages)[e], s = {};
513for (var a in o) if (o.hasOwnProperty(a)) {
514if (a == t) for (var l in n) n.hasOwnProperty(l) && (s[l] = n[l]);
515n.hasOwnProperty(a) || (s[a] = o[a]);
516}
517var c = r[e];
518return r[e] = s, i.languages.DFS(i.languages, function(t, n) {
519n === c && t != e && (this[t] = s);
520}), s;
521},
522DFS: function e(t, n, r, o) {
523o = o || {};
524var s = i.util.objId;
525for (var a in t) if (t.hasOwnProperty(a)) {
526n.call(t, a, t[a], r || a);
527var l = t[a], c = i.util.type(l);
528"Object" !== c || o[s(l)] ? "Array" !== c || o[s(l)] || (o[s(l)] = !0, e(l, n, a, o)) : (o[s(l)] = !0, 
529e(l, n, null, o));
530}
531}
532},
533plugins: {},
534highlightAll: function(e, t) {
535i.highlightAllUnder(document, e, t);
536},
537highlightAllUnder: function(e, t, n) {
538var r = {
539callback: n,
540container: e,
541selector: 'code[class*="language-"], [class*="language-"] code, code[class*="lang-"], [class*="lang-"] code'
542};
543i.hooks.run("before-highlightall", r), r.elements = Array.prototype.slice.apply(r.container.querySelectorAll(r.selector)), 
544i.hooks.run("before-all-elements-highlight", r);
545for (var o, s = 0; o = r.elements[s++]; ) i.highlightElement(o, !0 === t, r.callback);
546},
547highlightElement: function(t, n, r) {
548var o = i.util.getLanguage(t), s = i.languages[o];
549i.util.setLanguage(t, o);
550var a = t.parentElement;
551a && "pre" === a.nodeName.toLowerCase() && i.util.setLanguage(a, o);
552var l = {
553element: t,
554language: o,
555grammar: s,
556code: t.textContent
557};
558function c(e) {
559l.highlightedCode = e, i.hooks.run("before-insert", l), l.element.innerHTML = l.highlightedCode, 
560i.hooks.run("after-highlight", l), i.hooks.run("complete", l), r && r.call(l.element);
561}
562if (i.hooks.run("before-sanity-check", l), (a = l.element.parentElement) && "pre" === a.nodeName.toLowerCase() && !a.hasAttribute("tabindex") && a.setAttribute("tabindex", "0"), 
563!l.code) return i.hooks.run("complete", l), void (r && r.call(l.element));
564if (i.hooks.run("before-highlight", l), l.grammar) if (n && e.Worker) {
565var u = new Worker(i.filename);
566u.onmessage = function(e) {
567c(e.data);
568}, u.postMessage(JSON.stringify({
569language: l.language,
570code: l.code,
571immediateClose: !0
572}));
573} else c(i.highlight(l.code, l.grammar, l.language)); else c(i.util.encode(l.code));
574},
575highlight: function(e, t, n) {
576var r = {
577code: e,
578grammar: t,
579language: n
580};
581if (i.hooks.run("before-tokenize", r), !r.grammar) throw new Error('The language "' + r.language + '" has no grammar.');
582return r.tokens = i.tokenize(r.code, r.grammar), i.hooks.run("after-tokenize", r), 
583o.stringify(i.util.encode(r.tokens), r.language);
584},
585tokenize: function(e, t) {
586var n = t.rest;
587if (n) {
588for (var r in n) t[r] = n[r];
589delete t.rest;
590}
591var i = new l;
592return c(i, i.head, e), a(e, i, t, i.head, 0), function(e) {
593var t = [], n = e.head.next;
594for (;n !== e.tail; ) t.push(n.value), n = n.next;
595return t;
596}(i);
597},
598hooks: {
599all: {},
600add: function(e, t) {
601var n = i.hooks.all;
602n[e] = n[e] || [], n[e].push(t);
603},
604run: function(e, t) {
605var n = i.hooks.all[e];
606if (n && n.length) for (var r, o = 0; r = n[o++]; ) r(t);
607}
608},
609Token: o
610};
611function o(e, t, n, r) {
612this.type = e, this.content = t, this.alias = n, this.length = 0 | (r || "").length;
613}
614function s(e, t, n, r) {
615e.lastIndex = t;
616var i = e.exec(n);
617if (i && r && i[1]) {
618var o = i[1].length;
619i.index += o, i[0] = i[0].slice(o);
620}
621return i;
622}
623function a(e, t, n, r, l, d) {
624for (var p in n) if (n.hasOwnProperty(p) && n[p]) {
625var h = n[p];
626h = Array.isArray(h) ? h : [ h ];
627for (var f = 0; f < h.length; ++f) {
628if (d && d.cause == p + "," + f) return;
629var m = h[f], g = m.inside, E = !!m.lookbehind, b = !!m.greedy, T = m.alias;
630if (b && !m.pattern.global) {
631var v = m.pattern.toString().match(/[imsuy]*$/)[0];
632m.pattern = RegExp(m.pattern.source, v + "g");
633}
634for (var S = m.pattern || m, _ = r.next, y = l; _ !== t.tail && !(d && y >= d.reach); y += _.value.length, 
635_ = _.next) {
636var A = _.value;
637if (t.length > e.length) return;
638if (!(A instanceof o)) {
639var w, L = 1;
640if (b) {
641if (!(w = s(S, y, e, E)) || w.index >= e.length) break;
642var I = w.index, O = w.index + w[0].length, R = y;
643for (R += _.value.length; I >= R; ) R += (_ = _.next).value.length;
644if (y = R -= _.value.length, _.value instanceof o) continue;
645for (var N = _; N !== t.tail && (R < O || "string" == typeof N.value); N = N.next) L++, 
646R += N.value.length;
647L--, A = e.slice(y, R), w.index -= y;
648} else if (!(w = s(S, 0, A, E))) continue;
649I = w.index;
650var k = w[0], C = A.slice(0, I), F = A.slice(I + k.length), x = y + A.length;
651d && x > d.reach && (d.reach = x);
652var D = _.prev;
653if (C && (D = c(t, D, C), y += C.length), u(t, D, L), _ = c(t, D, new o(p, g ? i.tokenize(k, g) : k, T, k)), 
654F && c(t, _, F), L > 1) {
655var P = {
656cause: p + "," + f,
657reach: x
658};
659a(e, t, n, _.prev, y, P), d && P.reach > d.reach && (d.reach = P.reach);
660}
661}
662}
663}
664}
665}
666function l() {
667var e = {
668value: null,
669prev: null,
670next: null
671}, t = {
672value: null,
673prev: e,
674next: null
675};
676e.next = t, this.head = e, this.tail = t, this.length = 0;
677}
678function c(e, t, n) {
679var r = t.next, i = {
680value: n,
681prev: t,
682next: r
683};
684return t.next = i, r.prev = i, e.length++, i;
685}
686function u(e, t, n) {
687for (var r = t.next, i = 0; i < n && r !== e.tail; i++) r = r.next;
688t.next = r, r.prev = t, e.length -= i;
689}
690if (e.Prism = i, o.stringify = function e(t, n) {
691if ("string" == typeof t) return t;
692if (Array.isArray(t)) {
693var r = "";
694return t.forEach(function(t) {
695r += e(t, n);
696}), r;
697}
698var o = {
699type: t.type,
700content: e(t.content, n),
701tag: "span",
702classes: [ "token", t.type ],
703attributes: {},
704language: n
705}, s = t.alias;
706s && (Array.isArray(s) ? Array.prototype.push.apply(o.classes, s) : o.classes.push(s)), 
707i.hooks.run("wrap", o);
708var a = "";
709for (var l in o.attributes) a += " " + l + '="' + (o.attributes[l] || "").replace(/"/g, "&quot;") + '"';
710return "<" + o.tag + ' class="' + o.classes.join(" ") + '"' + a + ">" + o.content + "</" + o.tag + ">";
711}, !e.document) return e.addEventListener ? (i.disableWorkerMessageHandler || e.addEventListener("message", function(t) {
712var n = JSON.parse(t.data), r = n.language, o = n.code, s = n.immediateClose;
713e.postMessage(i.highlight(o, i.languages[r], r)), s && e.close();
714}, !1), i) : i;
715var d = i.util.currentScript();
716function p() {
717i.manual || i.highlightAll();
718}
719if (d && (i.filename = d.src, d.hasAttribute("data-manual") && (i.manual = !0)), 
720!i.manual) {
721var h = document.readyState;
722"loading" === h || "interactive" === h && d && d.defer ? document.addEventListener("DOMContentLoaded", p) : window.requestAnimationFrame ? window.requestAnimationFrame(p) : window.setTimeout(p, 16);
723}
724return i;
725}("undefined" != typeof window ? window : "undefined" != typeof WorkerGlobalScope && self instanceof WorkerGlobalScope ? self : {});
726void 0 !== e && e.exports && (e.exports = n), "undefined" != typeof global && (global.Prism = n);
727},
7282346: function(e) {
729e.exports = e => {
730e.languages.sql = {
731comment: {
732pattern: /(^|[^\\])(?:\/\*[\s\S]*?\*\/|(?:--|\/\/|#).*)/,
733lookbehind: !0
734},
735variable: [ {
736pattern: /@(["'`])(?:\\[\s\S]|(?!\1)[^\\])+\1/,
737greedy: !0
738}, /@[\w.$]+/ ],
739string: {
740pattern: /(^|[^@\\])("|')(?:\\[\s\S]|(?!\2)[^\\]|\2\2)*\2/,
741greedy: !0,
742lookbehind: !0
743},
744identifier: {
745pattern: /(^|[^@\\])`(?:\\[\s\S]|[^`\\]|``)*`/,
746greedy: !0,
747lookbehind: !0,
748inside: {
749punctuation: /^`|`$/
750}
751},
752function: /\b(?:AVG|COUNT|FIRST|FORMAT|LAST|LCASE|LEN|MAX|MID|MIN|MOD|NOW|ROUND|SUM|UCASE)(?=\s*\()/i,
753keyword: /\b(?:ACTION|ADD|AFTER|ALGORITHM|ALL|ALTER|ANALYZE|ANY|APPLY|AS|ASC|AUTHORIZATION|AUTO_INCREMENT|BACKUP|BDB|BEGIN|BERKELEYDB|BIGINT|BINARY|BIT|BLOB|BOOL|BOOLEAN|BREAK|BROWSE|BTREE|BULK|BY|CALL|CASCADED?|CA
753SE|CHAIN|CHAR(?:ACTER|SET)?|CHECK(?:POINT)?|CLOSE|CLUSTERED|COALESCE|COLLATE|COLUMNS?|COMMENT|COMMIT(?:TED)?|COMPUTE|CONNECT|CONSISTENT|CONSTRAINT|CONTAINS(?:TABLE)?|CONTINUE|CONVERT|CREATE|CROSS|CURRENT(?:_DATE|_TIME|_TIMESTAMP|_USER)?|CURSOR|CYCLE|DATA(?:BASES?)?|DATE(?:TIME)?|DAY|DBCC|DEALLOCATE|DEC|DECIMAL|DECLARE|DEFAULT|DEFINER|DELAYED|DELETE|DELIMITERS?|DENY|DESC|DESCRIBE|DETERMINISTIC|DISABLE|DISCARD|DISK|DISTINCT|DISTINCTROW|DISTRIBUTED|DO|DOUBLE|DROP|DUMMY|DUMP(?:FILE)?|DUPLICATE|ELSE(?:IF)?|ENABLE|ENCLOSED|END|ENGINE|ENUM|ERRLVL|ERRORS|ESCAPED?|EXCEPT|EXEC(?:UTE)?|EXISTS|EXIT|EXPLAIN|EXTENDED|FETCH|FIELDS|FILE|FILLFACTOR|FIRST|FIXED|FLOAT|FOLLOWING|FOR(?: EACH ROW)?|FORCE|FOREIGN|FREETEXT(?:TABLE)?|FROM|FULL|FUNCTION|GEOMETRY(?:COLLECTION)?|GLOBAL|GOTO|GRANT|GROUP|HANDLER|HASH|HAVING|HOLDLOCK|HOUR|IDENTITY(?:COL|_INSERT)?|IF|IGNORE|IMPORT|INDEX|INFILE|INNER|INNODB|INOUT|INSERT|INT|INTEGER|INTERSECT|INTERVAL|INTO|INVOKER|ISOLATION|ITERATE|JOIN|KEYS?|KILL|LANGUAGE|LAST|LEAVE|LEFT|LEVEL|LIMIT|LINENO|LINES|LINESTRING|LOAD|LOCAL|LOCK|LONG(?:BLOB|TEXT)|LOOP|MATCH(?:ED)?|MEDIUM(?:BLOB|INT|TEXT)|MERGE|MIDDLEINT|MINUTE|MODE|MODIFIES|MODIFY|MONTH|MULTI(?:LINESTRING|POINT|POLYGON)|NATIONAL|NATURAL|NCHAR|NEXT|NO|NONCLUSTERED|NULLIF|NUMERIC|OFF?|OFFSETS?|ON|OPEN(?:DATASOURCE|QUERY|ROWSET)?|OPTIMIZE|OPTION(?:ALLY)?|ORDER|OUT(?:ER|FILE)?|OVER|PARTIAL|PARTITION|PERCENT|PIVOT|PLAN|POINT|POLYGON|PRECEDING|PRECISION|PREPARE|PREV|PRIMARY|PRINT|PRIVILEGES|PROC(?:EDURE)?|PUBLIC|PURGE|QUICK|RAISERROR|READS?|REAL|RECONFIGURE|REFERENCES|RELEASE|RENAME|REPEAT(?:ABLE)?|REPLACE|REPLICATION|REQUIRE|RESIGNAL|RESTORE|RESTRICT|RETURN(?:ING|S)?|REVOKE|RIGHT|ROLLBACK|ROUTINE|ROW(?:COUNT|GUIDCOL|S)?|RTREE|RULE|SAVE(?:POINT)?|SCHEMA|SECOND|SELECT|SERIAL(?:IZABLE)?|SESSION(?:_USER)?|SET(?:USER)?|SHARE|SHOW|SHUTDOWN|SIMPLE|SMALLINT|SNAPSHOT|SOME|SONAME|SQL|START(?:ING)?|STATISTICS|STATUS|STRIPED|SYSTEM_USER|TABLES?|TABLESPACE|TEMP(?:ORARY|TABLE)?|TERMINATED|TEXT(?:SIZE)?|THEN|TIME(?:STAMP)?|TINY(?:BLOB|INT|TEXT)|TOP?|TRAN(?:SACTIONS?)?|TRIGGER|TRUNCATE|TSEQUAL|TYPES?|UNBOUNDED|UNCOMMITTED|UNDEFINED|UNION|UNIQUE|UNLOCK|UNPIVOT|UNSIGNED|UPDATE(?:TEXT)?|USAGE|USE|USER|USING|VALUES?|VAR(?:BINARY|CHAR|CHARACTER|YING)|VIEW|WAITFOR|WARNINGS|WHEN|WHERE|WHILE|WITH(?: ROLLUP|IN)?|WORK|WRITE(?:TEXT)?|YEAR)\b/i,
754boolean: /\b(?:FALSE|NULL|TRUE)\b/i,
755number: /\b0x[\da-f]+\b|\b\d+(?:\.\d*)?|\B\.\d+\b/i,
756operator: /[-+*\/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|DIV|ILIKE|IN|IS|LIKE|NOT|OR|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i,
757punctuation: /[;[\]()`,.]/,
758error: /^\s*ERROR/
759};
760};
761},
7622684: function(e, t, n) {
763let r, i = n(3449);
764e.exports = function(e) {
765e = e || document;
766let t = Math.max(e.body.scrollHeight, e.documentElement.scrollHeight, e.body.offsetHeight, e.documentElement.offsetHeight, e.body.clientHeight, e.documentElement.clientHeight);
767return e.documentElement.scrollWidth > e.documentElement.clientWidth && (r || (r = i()), 
768t += r), t;
769};
770},
7712924: function(e, t, n) {
772let r = n(7200), i = n(3102);
773class o {
774constructor(e) {
775this.elem = e, this.throttleFilter = r(this.filter, 200), this.showTasksCheckbox = e.querySelector("[data-tutorial-map-show-tasks]"), 
776this.showTasksCheckbox.checked = +sessionStorage.showTasksCheckbox, this.updateShowTasks(), 
777this.showTasksCheckbox.onchange = this.updateShowTasks.bind(this), this.filterInput = this.elem.querySelector("[data-tutorial-map-filter]"), 
778this.textInputBlock = this.elem.querySelector(".tutorial-map__filter .text-input"), 
779this.filterInput.oninput = this.onFilterInput.bind(this), this.filterInput.onkeydown = this.onFilterKeydown.bind(this), 
780this.elem.querySelector(".text-input__clear").onclick = () => {
781this.filterInput.value = "", this.showClearButton(!1), this.filter("");
782}, this.chaptersCollapsed = JSON.parse(sessionStorage.tutorialMapChapters || "{}"), 
783this.showChaptersCollapsed(), this.delegate(".tutorial-map__item > .tutorial-map__link", "click", e => {
784e.preventDefault();
785let t = e.delegateTarget.getAttribute("href");
786this.chaptersCollapsed[t] ? delete this.chaptersCollapsed[t] : this.chaptersCollapsed[t] = 1, 
787sessionStorage.tutorialMapChapters = JSON.stringify(this.chaptersCollapsed), this.showChaptersCollapsed();
788});
789let t = this.elem.querySelector('.tutorial-map-list-three__link[href="' + location.pathname + '"]');
790t && t.classList.add("tutorial-map-list-three__link_active"), this.filterInput.focus();
791}
792showChaptersCollapsed() {
793let e = this.elem.querySelectorAll(".tutorial-map__item > .tutorial-map__link");
794for (let t = 0; t < e.length; t++) {
795let n = e[t];
796this.chaptersCollapsed[n.getAttribute("href")] ? n.parentNode.classList.add("tutorial-map__item_collapsed") : n.parentNode.classList.remove("tutorial-map__item_collapsed");
797}
798}
799updateShowTasks() {
800this.showTasksCheckbox.checked ? this.elem.classList.add("tutorial-map_show-tasks") : this.elem.classList.remove("tutorial-map_show-tasks"), 
801sessionStorage.showTasksCheckbox = this.showTasksCheckbox.checked ? "1" : "0";
802}
803onFilterInput(e) {
804this.showClearButton(e.target.value), this.throttleFilter(e.target.value);
805}
806onFilterKeydown(e) {
80727 === e.keyCode && (this.filterInput.value = "", this.showClearButton(!1), this.filter(""));
808}
809showClearButton(e) {
810e ? this.textInputBlock.classList.add("text-input_clear-button") : this.textInputBlock.classList.remove("text-input_clear-button");
811}
812focus() {
813this.elem.tabIndex = -1, this.elem.focus();
814}
815filter(e) {
816e = e.toLowerCase();
817let t = this.showTasksCheckbox.checked, n = (this.elem.querySelectorAll(".tutorial-map-list a"), 
818this.elem.querySelectorAll(".tutorial-map-list-two__item"));
819function r(t) {
820return function(e, t) {
821let n = 0, r = 0;
822for (;n < e.length && r < t.length; ) e[n] === t[r] ? (n++, r++) : n++;
823return r === t.length;
824}(t.querySelector("a").innerHTML.toLowerCase(), e.replace(/\s/g, ""));
825}
826for (let e = 0; e < n.length; e++) {
827let i = n[e], o = i.querySelectorAll(".tutorial-map-list-three__item"), s = Array.prototype.reduce.call(o, function(e, n) {
828let i = !1;
829if (t) {
830let e = n.querySelectorAll(".tutorial-map-list-four__item");
831i = Array.prototype.reduce.call(e, function(e, t) {
832let n = r(t);
833return t.hidden = !n, e || n;
834}, !1);
835}
836let o = i || r(n);
837return n.hidden = !o, e || o;
838}, !1);
839i.hidden = !(s || r(i));
840}
841}
842}
843e.exports = o, i.delegateMixin(o.prototype);
844},
8452983: function(e, t, n) {
846var r = n(6339).Symbol;
847e.exports = r;
848},
8493102: function(e) {
850function t(e, t, n, r, i) {
851e.addEventListener(n, function(e) {
852let n = function(e, t) {
853let n = e.target;
854for (;n; ) {
855if (n.matches(t)) return n;
856if (n == e.currentTarget) break;
857n = n.parentElement;
858}
859return null;
860}(e, t);
861e.delegateTarget = n, n && r.call(i || this, e);
862});
863}
864t.delegateMixin = function(e) {
865e.delegate = function(e, n, r) {
866t(this.elem, e, n, r, this);
867};
868}, e.exports = t;
869},
8703123: function(e, t, n) {
871n(1983), n(4312), n(1113), n(5365), n(5624), n(5723), n(4784), n(4604), n(6966), 
872n(6976), n(7022), Prism.hooks.add("wrap", function(e) {
873"span" === e.tag && (e.tag = "code");
874});
875},
8763205: function(e, t, n) {
877var r = {
878"./en.yml": 3979
879};
880function i(e) {
881var t = o(e);
882return n(t);
883}
884function o(e) {
885if (!n.o(r, e)) {
886var t = new Error("Cannot find module '" + e + "'");
887throw t.code = "MODULE_NOT_FOUND", t;
888}
889return r[e];
890}
891i.keys = function() {
892return Object.keys(r);
893}, i.resolve = o, e.exports = i, i.id = 3205;
894},
8953388: function(e) {
896var t = Object.prototype.toString;
897e.exports = function(e) {
898return t.call(e);
899};
900},
9013449: function(e) {
902e.exports = function() {
903let e = document.createElement("div");
904if (e.style.cssText = "visibility:hidden;
904height:100px", !document.body) throw new Error("getScrollbarHeight called to early: no document.body");
905document.body.appendChild(e);
906let t = e.offsetWidth;
907e.style.overflow = "scroll";
908let n = document.createElement("div");
909n.style.width = "100%", e.appendChild(n);
910let r = n.offsetWidth;
911return e.parentNode.removeChild(e), t - r;
912};
913},
9143667: function(e) {
915e.exports = function(e) {
916var t = typeof e;
917return null != e && ("object" == t || "function" == t);
918};
919},
9203692: function(e, t, n) {
921var r = {
922"./en.yml": 9374
923};
924function i(e) {
925var t = o(e);
926return n(t);
927}
928function o(e) {
929if (!n.o(r, e)) {
930var t = new Error("Cannot find module '" + e + "'");
931throw t.code = "MODULE_NOT_FOUND", t;
932}
933return r[e];
934}
935i.keys = function() {
936return Object.keys(r);
937}, i.resolve = o, e.exports = i, i.id = 3692;
938},
9393979: function(e, t, n) {
940"use strict";
941n.r(t), t.default = {
942site: {
943privacy_policy: "privacy policy",
944terms: "terms of usage",
945banner_bottom_courses: 'Advance your skils with <a href="https://frontendmasters.com/learn/javascript/?utm_source=website&utm_medium=jsinfo&utm_campaign=jsinfo">video courses on JavaScript and Frameworks</a>.',
946banner_buttom_sponsor: 'Benefitted from the site? <a href="/sponsor">Sponsor us</a>!',
947action_required: "Action required",
948gdpr_dialog: {
949title: "This website uses cookies",
950text: 'We use browser technologies such as cookies and local storage to store your preferences. You need to accept our <a href="/privacy">Privacy Policy</a> and <a href="/terms">Terms of Use</a> for us to do so.',
951accept: "Accept",
952cancel: "Cancel"
953},
954theme: {
955light: "Light theme",
956dark: "Dark theme",
957change: "Change theme"
958},
959toolbar: {
960lang_switcher: {
961cta_text: '<p>We want to make this open-source project available for people all around the world.</p> <p><a href="https://javascript.info/translate">Help to translate</a> the content of this tutorial to your language!</p>\n',
962footer_text: "how much content is translated to the corresponding language",
963old_version: "Old version is published, needs backporting."
964},
965logo: {
966normal: {
967svg: "sitetoolbar__logo_en.svg",
968width: 200
969},
970"normal-white": {
971svg: "sitetoolbar__logo_en-white.svg"
972},
973small: {
974svg: "sitetoolbar__logo_small_en.svg",
975width: 70
976},
977"small-white": {
978svg: "sitetoolbar__logo_small_en-white.svg"
979}
980},
981sections: null,
982buy_ebook_extra: "Buy",
983buy_ebook: "EPUB/PDF",
984search_placeholder: "Search on Javascript.info",
985search_button: "Search",
986public_profile: "Public profile",
987account: "Account",
988notifications: "Notifications",
989admin: "Admin",
990logout: "Logout"
991},
992sorry_old_browser: "Sorry, Internet Explorer is not supported, please use a newer browser.",
993contact_us: "contact us",
994about_the_project: "about the project",
995ilya_kantor: "Ilya Kantor",
996comments: "Comments",
997loading: "Loading...",
998search: "Search",
999share: "Share",
1000read_before_commenting: "read this before commenting…",
1001last_updated_at: "Last updated on #{date}",
1002meta: {
1003description: "Modern JavaScript Tutorial: simple, but detailed explanations with examples and tasks, including: closures, document and events, object oriented programming and more."
1004},
1005"tablet-menu": {
1006choose_section: "Choose section",
1007search_placeholder: "Search in the tutorial",
1008search_button: "Search"
1009},
1010comment: {
1011help: [ 'If you have suggestions what to improve - please <a href="https://github.com/javascript-tutorial/en.javascript.info/issues/new">submit a GitHub issue</a> or a pull request instead of commenting.', "If you can't understand something in the article – please elaborate.", "To insert few words of code, use the <code>&lt;code&gt;</code> tag, for several lines – wrap them in <code>&lt;pre&gt;</code> tag, for more than 10 lines – use a sandbox (<a href='https://plnkr.co/edit/?p=preview'>plnkr</a>, <a href='https://jsbin.com'>jsbin</a>, <a href='http://codepen.io'>codepen</a>…)" ]
1012},
1013edit_on_github: "Edit on GitHub",
1014error: "error",
1015close: "close",
1016hide_forever: "hide permanently",
1017hide_week: "hide for 1 week",
1018hidden_forever: "This information will not show up any more.",
1019hidden_week: "This information will stay hidden for 1 week",
1020subscribe: {
1021title: "Watch for javascript.info updates",
1022text: "We do not send advertisements, only relevant stuff. You choose what to receive:",
1023agreement: 'By signing up to newsletters you agree to the <a href="#{link}" target="_blank">terms of usage</a>.',
1024button: "Subscribe",
1025button_unsubscribe: "Unsubscribe from all",
1026common_updates: "Common updates",
1027common_updates_text: "new courses, master classes, article and screencast releases",
1028your_email: "[email protected]",
1029newsletters: "newsletter,newsletters,newsletters",
1030no_selected: "Nothing selected"
1031},
1032form: {
1033value_must_not_be_empty: "Value must not be empty.",
1034value_is_too_long: "Value is too long.",
1035value_is_too_short: "Value is too short.",
1036invalid_email: "Invalid email.",
1037invalid_value: "Invalid value.",
1038invalid_autocomplete: "Please, choose from the list",
1039invalid_date: "Invalid date, format: dd.mm.yyyyy.",
1040invalid_range: "This date is invalid here.",
1041save: "Save",
1042upload_file: "Upload file",
1043cancel: "Cancel",
1044server_error: "Request error, status code"
1045}
1046}
1047};
1048},
10494312: function(e, t) {
1050Prism.languages.markup = {
1051comment: {
1052pattern: /<!--(?:(?!<!--)[\s\S])*?-->/,
1053greedy: !0
1054},
1055prolog: {
1056pattern: /<\?[\s\S]+?\?>/,
1057greedy: !0
1058},
1059doctype: {
1060pattern: /<!DOCTYPE(?:[^>"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|<!--(?:[^-]|-(?!->))*-->)*\]\s*)?>/i,
1061greedy: !0,
1062inside: {
1063"internal-subset": {
1064pattern: /(^[^\[]*\[)[\s\S]+(?=\]>$)/,
1065lookbehind: !0,
1066greedy: !0,
1067inside: null
1068},
1069string: {
1070pattern: /"[^"]*"|'[^']*'/,
1071greedy: !0
1072},
1073punctuation: /^<!|>$|[[\]]/,
1074"doctype-tag": /^DOCTYPE/i,
1075name: /[^\s<>'"]+/
1076}
1077},
1078cdata: {
1079pattern: /<!\[CDATA\[[\s\S]*?\]\]>/i,
1080greedy: !0
1081},
1082tag: {
1083pattern: /<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,
1084greedy: !0,
1085inside: {
1086tag: {
1087pattern: /^<\/?[^\s>\/]+/,
1088inside: {
1089punctuation: /^<\/?/,
1090namespace: /^[^\s>\/:]+:/
1091}
1092},
1093"special-attr": [],
1094"attr-value": {
1095pattern: /=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,
1096inside: {
1097punctuation: [ {
1098pattern: /^=/,
1099alias: "attr-equals"
1100}, {
1101pattern: /^(\s*)["']|["']$/,
1102lookbehind: !0
1103} ]
1104}
1105},
1106punctuation: /\/?>/,
1107"attr-name": {
1108pattern: /[^\s>\/]+/,
1109inside: {
1110namespace: /^[^\s>\/:]+:/
1111}
1112}
1113}
1114},
1115entity: [ {
1116pattern: /&[\da-z]{1,8};/i,
1117alias: "named-entity"
1118}, /&#x?[\da-f]{1,8};/i ]
1119}, Prism.languages.markup.tag.inside["attr-value"].inside.entity = Prism.languages.markup.entity, 
1120Prism.languages.markup.doctype.inside["internal-subset"].inside = Prism.languages.markup, 
1121Prism.hooks.add("wrap", function(e) {
1122"entity" === e.type && (e.attributes.title = e.content.replace(/&amp;/, "&"));
1123}), Object.defineProperty(Prism.languages.markup.tag, "addInlined", {
1124value: function(e, t) {
1125var n = {};
1126n["language-" + t] = {
1127pattern: /(^<!\[CDATA\[)[\s\S]+?(?=\]\]>$)/i,
1128lookbehind: !0,
1129inside: Prism.languages[t]
1130}, n.cdata = /^<!\[CDATA\[|\]\]>$/i;
1131var r = {
1132"included-cdata": {
1133pattern: /<!\[CDATA\[[\s\S]*?\]\]>/i,
1134inside: n
1135}
1136};
1137r["language-" + t] = {
1138pattern: /[\s\S]+/,
1139inside: Prism.languages[t]
1140};
1141var i = {};
1142i[e] = {
1143pattern: RegExp(/(<__[^>]*>)(?:<!\[CDATA\[(?:[^\]]|\](?!\]>))*\]\]>|(?!<!\[CDATA\[)[\s\S])*?(?=<\/__>)/.source.replace(/__/g, function() {
1144return e;
1145}), "i"),
1146lookbehind: !0,
1147greedy: !0,
1148inside: r
1149}, Prism.languages.insertBefore("markup", "cdata", i);
1150}
1151}), Object.defineProperty(Prism.languages.markup.tag, "addAttribute", {
1152value: function(e, t) {
1153Prism.languages.markup.tag.inside["special-attr"].push({
1154pattern: RegExp(/(^|["'\s])/.source + "(?:" + e + ")" + /\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source, "i"),
1155lookbehind: !0,
1156inside: {
1157"attr-name": /^[^\s=]+/,
1158"attr-value": {
1159pattern: /=[\s\S]+/,
1160inside: {
1161value: {
1162pattern: /(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,
1163lookbehind: !0,
1164alias: [ t, "language-" + t ],
1165inside: Prism.languages[t]
1166},
1167punctuation: [ {
1168pattern: /^=/,
1169alias: "attr-equals"
1170}, /"|'/ ]
1171}
1172}
1173}
1174});
1175}
1176}), Prism.languages.html = Prism.languages.markup, Prism.languages.mathml = Prism.languages.markup, 
1177Prism.languages.svg = Prism.languages.markup, Prism.languages.xml = Prism.languages.extend("markup", {}), 
1178Prism.languages.ssml = Prism.languages.xml, Prism.languages.atom = Prism.languages.xml, 
1179Prism.languages.rss = Prism.languages.xml;
1180},
11814596: function(e) {
1182function t(e, n = 0) {
1183if (null == e) return "null";
1184if ("function" == typeof e) return function(e, t = 0) {
1185if (t) return "function " + e.name;
1186(e = (e = e.toString()).split("\n")).length > 10 && (e = e.slice(0, 10).join("\n") + "\n...");
1187return e;
1188}(e, n);
1189if (Array.isArray(e)) return function(e, n = 0) {
1190if (n > 2) return "[...]";
1191let r = 1 == n ? 3 : 10;
1192e.length > r && (e = e.slice(0, r)).push("...");
1193return "[" + e.map(e => t(e, n + 1)).join(", ") + "]";
1194}(e, n);
1195if ("object" == typeof window) {
1196if (e instanceof Node) return t(e.outerHTML, n);
1197if (e instanceof Event) {
1198let r = [ Symbol.toStringTag, "type", "clientX", "clientY", "key", "code" ], i = {};
1199for (let t of r) t in e && (i[t] = e[t]);
1200return t(i, n);
1201}
1202}
1203return "object" == typeof e ? function(e, n = 0) {
1204let r = e.constructor.name;
1205"Object" == r && e[Symbol.toStringTag] && (r = e[Symbol.toStringTag]);
1206if ("Object" != r && e.toString != Object.prototype.toString) return e.toString();
1207let i = "";
1208"Object" != r && (i += r + " ");
1209if (i += "{", n > 1) i += "..."; else {
1210let r = [];
1211for (let i in e) e.hasOwnProperty(i) && r.push(`${i}: ${t(e[i], n + 1)}`);
1212i += r.join(", ");
1213}
1214return i += "}", i;
1215}(e, n) : "string" == typeof e ? function(e, t = 0) {
1216let n = 1 == t ? 20 : 60;
1217e.length > n && (e = e.slice(0, e.limit - 1) + "…");
1218return JSON.stringify(e);
1219}(e, n) : JSON.stringify(e);
1220}
1221e.exports = function(e) {
1222return Array.from(e).map(t).join(", ");
1223};
1224},
12254604: function(e, t) {
1226Prism.languages.scss = Prism.languages.extend("css", {
1227comment: {
1228pattern: /(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,
1229lookbehind: !0
1230},
1231atrule: {
1232pattern: /@[\w-](?:\([^()]+\)|[^()\s]|\s+(?!\s))*?(?=\s+[{;])/,
1233inside: {
1234rule: /@[\w-]+/
1235}
1236},
1237url: /(?:[-a-z]+-)?url(?=\()/i,
1238selector: {
1239pattern: /(?=\S)[^@;{}()]?(?:[^@;{}()\s]|\s+(?!\s)|#\{\$[-\w]+\})+(?=\s*\{(?:\}|\s|[^}][^:{}]*[:{][^}]))/,
1240inside: {
1241parent: {
1242pattern: /&/,
1243alias: "important"
1244},
1245placeholder: /%[-\w]+/,
1246variable: /\$[-\w]+|#\{\$[-\w]+\}/
1247}
1248},
1249property: {
1250pattern: /(?:[-\w]|\$[-\w]|#\{\$[-\w]+\})+(?=\s*:)/,
1251inside: {
1252variable: /\$[-\w]+|#\{\$[-\w]+\}/
1253}
1254}
1255}), Prism.languages.insertBefore("scss", "atrule", {
1256keyword: [ /@(?:content|debug|each|else(?: if)?|extend|for|forward|function|if|import|include|mixin|return|use|warn|while)\b/i, {
1257pattern: /( )(?:from|through)(?= )/,
1258lookbehind: !0
1259} ]
1260}), Prism.languages.insertBefore("scss", "important", {
1261variable: /\$[-\w]+|#\{\$[-\w]+\}/
1262}), Prism.languages.insertBefore("scss", "function", {
1263"module-modifier": {
1264pattern: /\b(?:as|hide|show|with)\b/i,
1265alias: "keyword"
1266},
1267placeholder: {
1268pattern: /%[-\w]+/,
1269alias: "selector"
1270},
1271statement: {
1272pattern: /\B!(?:default|optional)\b/i,
1273alias: "keyword"
1274},
1275boolean: /\b(?:false|true)\b/,
1276null: {
1277pattern: /\bnull\b/,
1278alias: "keyword"
1279},
1280operator: {
1281pattern: /(\s)(?:[-+*\/%]|[=!]=|<=?|>=?|and|not|or)(?=\s)/,
1282lookbehind: !0
1283}
1284}), Prism.languages.scss.atrule.inside.rest = Prism.languages.scss;
1285},
12864629: function(e) {
1287e.exports = function() {
1288let e = document.cookie.match(/XSRF-TOKEN=([\w-]+)/);
1289return e ? e[1] : null;
1290};
1291},
12924784: function(e, t) {
1293!function(e) {
1294function t(e) {
1295return RegExp("(^(?:" + e + "):[ \t]*(?![ \t]))[^]+", "i");
1296}
1297e.languages.http = {
1298"request-line": {
1299pattern: /^(?:CONNECT|DELETE|GET|HEAD|OPTIONS|PATCH|POST|PRI|PUT|SEARCH|TRACE)\s(?:https?:\/\/|\/)\S*\sHTTP\/[\d.]+/m,
1300inside: {
1301method: {
1302pattern: /^[A-Z]+\b/,
1303alias: "property"
1304},
1305"request-target": {
1306pattern: /^(\s)(?:https?:\/\/|\/)\S*(?=\s)/,
1307lookbehind: !0,
1308alias: "url",
1309inside: e.languages.uri
1310},
1311"http-version": {
1312pattern: /^(\s)HTTP\/[\d.]+/,
1313lookbehind: !0,
1314alias: "property"
1315}
1316}
1317},
1318"response-status": {
1319pattern: /^HTTP\/[\d.]+ \d+ .+/m,
1320inside: {
1321"http-version": {
1322pattern: /^HTTP\/[\d.]+/,
1323alias: "property"
1324},
1325"status-code": {
1326pattern: /^(\s)\d+(?=\s)/,
1327lookbehind: !0,
1328alias: "number"
1329},
1330"reason-phrase": {
1331pattern: /^(\s).+/,
1332lookbehind: !0,
1333alias: "string"
1334}
1335}
1336},
1337header: {
1338pattern: /^[\w-]+:.+(?:(?:\r\n?|\n)[ \t].+)*/m,
1339inside: {
1340"header-value": [ {
1341pattern: t(/Content-Security-Policy/.source),
1342lookbehind: !0,
1343alias: [ "csp", "languages-csp" ],
1344inside: e.languages.csp
1345}, {
1346pattern: t(/Public-Key-Pins(?:-Report-Only)?/.source),
1347lookbehind: !0,
1348alias: [ "hpkp", "languages-hpkp" ],
1349inside: e.languages.hpkp
1350}, {
1351pattern: t(/Strict-Transport-Security/.source),
1352lookbehind: !0,
1353alias: [ "hsts", "languages-hsts" ],
1354inside: e.languages.hsts
1355}, {
1356pattern: t(/[^:]+/.source),
1357lookbehind: !0
1358} ],
1359"header-name": {
1360pattern: /^[^:]+/,
1361alias: "keyword"
1362},
1363punctuation: /^:/
1364}
1365}
1366};
1367var n, r = e.languages, i = {
1368"application/javascript": r.javascript,
1369"application/json": r.json || r.javascript,
1370"application/xml": r.xml,
1371"text/xml": r.xml,
1372"text/html": r.html,
1373"text/css": r.css,
1374"text/plain": r.plain
1375}, o = {
1376"application/json": !0,
1377"application/xml": !0
1378};
1379function s(e) {
1380var t = e.replace(/^[a-z]+\//, "");
1381return "(?:" + e + "|" + ("\\w+/(?:[\\w.-]+\\+)+" + t + "(?![+\\w.-])") + ")";
1382}
1383for (var a in i) if (i[a]) {
1384n = n || {};
1385var l = o[a] ? s(a) : a;
1386n[a.replace(/\//g, "-")] = {
1387pattern: RegExp("(" + /content-type:\s*/.source + l + /(?:(?:\r\n?|\n)[\w-].*)*(?:\r(?:\n|(?!\n))|\n)/.source + ")" + /[^ \t\w-][\s\S]*/.source, "i"),
1388lookbehind: !0,
1389inside: i[a]
1390};
1391}
1392n && e.languages.insertBefore("http", "header", n);
1393}(Prism);
1394},
13954890: function(e, t, n) {
1396var r = n(2983), i = n(937), o = n(3388), s = r ? r.toStringTag : void 0;
1397e.exports = function(e) {
1398return null == e ? void 0 === e ? "[object Undefined]" : "[object Null]" : s && s in Object(e) ? i(e) : o(e);
1399};
1400},
14015116: function(e) {
1402e.exports = function(e) {
1403return null != e && "object" == typeof e;
1404};
1405},
14065304: function(e) {
1407e.exports = function() {
1408function e(e, t, n, r, i, o) {
1409this.message = e, this.expected = t, this.found = n, this.offset = r, this.line = i, 
1410this.column = o, this.name = "SyntaxError";
1411}
1412return function(e, t) {
1413function n() {
1414this.constructor = e;
1415}
1416n.prototype = t.prototype, e.prototype = new n;
1417}(e, Error), {
1418SyntaxError: e,
1419parse: function(t) {
1420var n, r = arguments.length > 1 ? arguments[1] : {}, i = {}, o = {
1421start: ue
1422}, s = ue, a = i, l = "((", c = {
1423type: "literal",
1424value: "((",
1425description: '"(("'
1426}, u = "))", d = {
1427type: "literal",
1428value: "))",
1429description: '"))"'
1430}, p = null, h = function(e, t) {
1431return {
1432type: "plural",
1433forms: ve(e),
1434strict: Se(e),
1435anchor: t || "count"
1436};
1437}, f = "|", m = {
1438type: "literal",
1439value: "|",
1440description: '"|"'
1441}, g = function(e, t) {
1442return [ e ].concat(t);
1443}, E = function(e) {
1444return [ e ];
1445}, b = "=", T = {
1446type: "literal",
1447value: "=",
1448description: '"="'
1449}, v = /^[0-9]/, S = {
1450type: "class",
1451value: "[0-9]",
1452description: "[0-9]"
1453}, _ = " ", y = {
1454type: "literal",
1455value: " ",
1456description: '" "'
1457}, A = function(e, t) {
1458return {
1459strict: e.join(""),
1460text: t.join("")
1461};
1462}, w = function() {
1463return {
1464text: se()
1465};
1466}, L = "\\", I = {
1467type: "literal",
1468value: "\\",
1469description: '"\\\\"'
1470}, O = /^[\\|)(]/, R = {
1471type: "class",
1472value: "[\\\\|)(]",
1473description: "[\\\\|)(]"
1474}, N = function(e) {
1475return e;
1476}, k = void 0, C = {
1477type: "any",
1478description: "any character"
1479}, F = function() {
1480return se();
1481}, x = ":", D = {
1482type: "literal",
1483value: ":",
1484description: '":"'
1485}, P = function(e) {
1486return e;
1487}, M = "#{", U = {
1488type: "literal",
1489value: "#{",
1490description: '"#{"'
1491}, B = "}", G = {
1492type: "literal",
1493value: "}",
1494description: '"}"'
1495}, H = function(e) {
1496return {
1497type: "variable",
1498anchor: e
1499};
1500}, j = ".", $ = {
1501type: "literal",
1502value: ".",
1503description: '"."'
1504}, W = function() {
1505return se();
1506}, q = /^[a-zA-Z_$]/, X = {
1507type: "class",
1508value: "[a-zA-Z_$]",
1509description: "[a-zA-Z_$]"
1510}, Y = /^[a-zA-Z0-9_$]/, z = {
1511type: "class",
1512value: "[a-zA-Z0-9_$]",
1513description: "[a-zA-Z0-9_$]"
1514}, K = function(e) {
1515return e;
1516}, V = function(e) {
1517return {
1518type: "literal",
1519text: e.join("")
1520};
1521}, Z = /^[\\#()|]/, J = {
1522type: "class",
1523value: "[\\\\#()|]",
1524description: "[\\\\#()|]"
1525}, Q = 0, ee = 0, te = 0, ne = {
1526line: 1,
1527column: 1,
1528seenCR: !1
1529}, re = 0, ie = [], oe = 0;
1530if ("startRule" in r) {
1531if (!(r.startRule in o)) throw new Error("Can't start parsing from rule \"" + r.startRule + '".');
1532s = o[r.startRule];
1533}
1534function se() {
1535return t.substring(ee, Q);
1536}
1537function ae(e) {
1538return te !== e && (te > e && (te = 0, ne = {
1539line: 1,
1540column: 1,
1541seenCR: !1
1542}), function(e, n, r) {
1543var i, o;
1544for (i = n; i < r; i++) "\n" === (o = t.charAt(i)) ? (e.seenCR || e.line++, e.column = 1, 
1545e.seenCR = !1) : "\r" === o || "\u2028" === o || "\u2029" === o ? (e.line++, e.column = 1, 
1546e.seenCR = !0) : (e.column++, e.seenCR = !1);
1547}(ne, te, e), te = e), ne;
1548}
1549function le(e) {
1550Q < re || (Q > re && (re = Q, ie = []), ie.push(e));
1551}
1552function ce(n, r, i) {
1553var o = ae(i), s = i < t.length ? t.charAt(i) : null;
1554return null !== r && function(e) {
1555var t = 1;
1556for (e.sort(function(e, t) {
1557return e.description < t.description ? -1 : e.description > t.description ? 1 : 0;
1558}); t < e.length; ) e[t - 1] === e[t] ? e.splice(t, 1) : t++;
1559}(r), new e(null !== n ? n : function(e, t) {
1560var n, r = new Array(e.length);
1561for (n = 0; n < e.length; n++) r[n] = e[n].description;
1562return "Expected " + (e.length > 1 ? r.slice(0, -1).join(", ") + " or " + r[e.length - 1] : r[0]) + " but " + (t ? '"' + function(e) {
1563function t(e) {
1564return e.charCodeAt(0).toString(16).toUpperCase();
1565}
1566return e.replace(/\\/g, "\\\\").replace(/"/g, '\\"').replace(/\x08/g, "\\b").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\f/g, "\\f").replace(/\r/g, "\\r").replace(/[\x00-\x07\x0B\x0E\x0F]/g, function(e) {
1567return "\\x0" + t(e);
1568}).replace(/[\x10-\x1F\x80-\xFF]/g, function(e) {
1569return "\\x" + t(e);
1570}).replace(/[\u0180-\u0FFF]/g, function(e) {
1571return "\\u0" + t(e);
1572}).replace(/[\u1080-\uFFFF]/g, function(e) {
1573return "\\u" + t(e);
1574});
1575}(t) + '"' : "end of input") + " found.";
1576}(r, s), r, s, i, o.line, o.column);
1577}
1578function ue() {
1579var e, t;
1580for (e = [], (t = be()) === i && (t = de()) === i && (t = me()); t !== i; ) e.push(t), 
1581(t = be()) === i && (t = de()) === i && (t = me());
1582return e;
1583}
1584function de() {
1585var e, n, r, o, s;
1586return e = Q, t.substr(Q, 2) === l ? (n = l, Q += 2) : (n = i, 0 === oe && le(c)), 
1587n !== i && (r = pe()) !== i ? (t.substr(Q, 2) === u ? (o = u, Q += 2) : (o = i, 
15880 === oe && le(d)), o !== i ? (s = function() {
1589var e, n, r;
1590e = Q, 58 === t.charCodeAt(Q) ? (n = x, Q++) : (n = i, 0 === oe && le(D));
1591n !== i && (r = ge()) !== i ? (ee = e, e = n = P(r)) : (Q = e, e = a);
1592return e;
1593}(), s === i && (s = p), s !== i ? (ee = e, e = n = h(r, s)) : (Q = e, e = a)) : (Q = e, 
1594e = a)) : (Q = e, e = a), e;
1595}
1596function pe() {
1597var e, n, r, o;
1598return e = Q, (n = he()) !== i ? (124 === t.charCodeAt(Q) ? (r = f, Q++) : (r = i, 
15990 === oe && le(m)), r !== i && (o = pe()) !== i ? (ee = e, e = n = g(n, o)) : (Q = e, 
1600e = a)) : (Q = e, e = a), e === i && (e = Q, (n = he()) !== i && (ee = e, n = E(n)), 
1601e = n), e;
1602}
1603function he() {
1604var e, n, r, o, s, l;
1605if (e = Q, 61 === t.charCodeAt(Q) ? (n = b, Q++) : (n = i, 0 === oe && le(T)), n !== i) {
1606if (r = [], v.test(t.charAt(Q)) ? (o = t.charAt(Q), Q++) : (o = i, 0 === oe && le(S)), 
1607o !== i) for (;o !== i; ) r.push(o), v.test(t.charAt(Q)) ? (o = t.charAt(Q), Q++) : (o = i, 
16080 === oe && le(S)); else r = a;
1609if (r !== i) if (32 === t.charCodeAt(Q) ? (o = _, Q++) : (o = i, 0 === oe && le(y)), 
1610o === i && (o = p), o !== i) {
1611if (s = [], (l = fe()) !== i) for (;l !== i; ) s.push(l), l = fe(); else s = a;
1612s !== i ? (ee = e, e = n = A(r, s)) : (Q = e, e = a);
1613} else Q = e, e = a; else Q = e, e = a;
1614} else Q = e, e = a;
1615if (e === i) {
1616if (e = Q, n = [], (r = fe()) !== i) for (;r !== i; ) n.push(r), r = fe(); else n = a;
1617n !== i && (ee = e, n = w()), e = n;
1618}
1619return e;
1620}
1621function fe() {
1622var e, n, r;
1623return e = Q, 92 === t.charCodeAt(Q) ? (n = L, Q++) : (n = i, 0 === oe && le(I)), 
1624n !== i ? (O.test(t.charAt(Q)) ? (r = t.charAt(Q), Q++) : (r = i, 0 === oe && le(R)), 
1625r !== i ? (ee = e, e = n = N(r)) : (Q = e, e = a)) : (Q = e, e = a), e === i && (e = Q, 
1626n = Q, oe++, 124 === t.charCodeAt(Q) ? (r = f, Q++) : (r = i, 0 === oe && le(m)), 
1627r === i && (t.substr(Q, 2) === u ? (r = u, Q += 2) : (r = i, 0 === oe && le(d))), 
1628oe--, r === i ? n = k : (Q = n, n = a), n !== i ? (t.length > Q ? (r = t.charAt(Q), 
1629Q++) : (r = i, 0 === oe && le(C)), r !== i ? (ee = e, e = n = F()) : (Q = e, e = a)) : (Q = e, 
1630e = a)), e;
1631}
1632function me() {
1633var e, n, r, o;
1634return e = Q, t.substr(Q, 2) === M ? (n = M, Q += 2) : (n = i, 0 === oe && le(U)), 
1635n !== i && (r = ge()) !== i ? (125 === t.charCodeAt(Q) ? (o = B, Q++) : (o = i, 
16360 === oe && le(G)), o !== i ? (ee = e, e = n = H(r)) : (Q = e, e = a)) : (Q = e, 
1637e = a), e;
1638}
1639function ge() {
1640var e, n, r, o;
1641if (e = Q, Ee() !== i) if (46 === t.charCodeAt(Q) ? (n = j, Q++) : (n = i, 0 === oe && le($)), 
1642n !== i) {
1643if (r = [], (o = ge()) !== i) for (;o !== i; ) r.push(o), o = ge(); else r = a;
1644r !== i ? (ee = e, e = W()) : (Q = e, e = a);
1645} else Q = e, e = a; else Q = e, e = a;
1646return e === i && (e = Ee()), e;
1647}
1648function Ee() {
1649var e, n, r, o;
1650if (e = Q, q.test(t.charAt(Q)) ? (n = t.charAt(Q), Q++) : (n = i, 0 === oe && le(X)), 
1651n !== i) {
1652for (r = [], Y.test(t.charAt(Q)) ? (o = t.charAt(Q), Q++) : (o = i, 0 === oe && le(z)); o !== i; ) r.push(o), 
1653Y.test(t.charAt(Q)) ? (o = t.charAt(Q), Q++) : (o = i, 0 === oe && le(z));
1654r !== i ? (ee = e, e = n = F()) : (Q = e, e = a);
1655} else Q = e, e = a;
1656return e;
1657}
1658function be() {
1659var e, t, n, r, o;
1660if (e = Q, t = [], n = Q, r = Q, oe++, (o = de()) === i && (o = me()), oe--, o === i ? r = k : (Q = r, 
1661r = a), r !== i && (o = Te()) !== i ? (ee = n, n = r = K(o)) : (Q = n, n = a), n !== i) for (;n !== i; ) t.push(n), 
1662n = Q, r = Q, oe++, (o = de()) === i && (o = me()), oe--, o === i ? r = k : (Q = r, 
1663r = a), r !== i && (o = Te()) !== i ? (ee = n, n = r = K(o)) : (Q = n, n = a); else t = a;
1664return t !== i && (ee = e, t = V(t)), e = t;
1665}
1666function Te() {
1667var e, n, r;
1668return e = Q, 92 === t.charCodeAt(Q) ? (n = L, Q++) : (n = i, 0 === oe && le(I)), 
1669n !== i ? (Z.test(t.charAt(Q)) ? (r = t.charAt(Q), Q++) : (r = i, 0 === oe && le(J)), 
1670r !== i ? (ee = e, e = n = N(r)) : (Q = e, e = a)) : (Q = e, e = a), e === i && (t.length > Q ? (e = t.charAt(Q), 
1671Q++) : (e = i, 0 === oe && le(C))), e;
1672}
1673function ve(e) {
1674for (var t = [], n = 0; n < e.length; n++) void 0 === e[n].strict && t.push(e[n].text);
1675return t;
1676}
1677function Se(e) {
1678for (var t = {}, n = 0; n < e.length; n++) void 0 !== e[n].strict && (t[e[n].strict] = e[n].text);
1679return t;
1680}
1681if ((n = s()) !== i && Q === t.length) return n;
1682throw n !== i && Q < t.length && le({
1683type: "end",
1684description: "end of input"
1685}), ce(null, ie, re);
1686}
1687};
1688}();
1689},
16905345: function(e, t, n) {
1691"use strict";
1692n.r(t), n.d(t, {
1693Error: function() {
1694return u;
1695},
1696Info: function() {
1697return a;
1698},
1699Success: function() {
1700return c;
1701},
1702Warning: function() {
1703return l;
1704},
1705init: function() {
1706return o;
1707}
1708});
1709let r = n(3102);
1710class i {
1711constructor(e = {}) {
1712this.notifications = [], this.verticalSpace = e.verticalSpace || 8;
1713}
1714register(e) {
1715this.notifications.unshift(e), setTimeout(() => this.recalculate(), 20);
1716}
1717unregister(e) {
1718let t = this.notifications.indexOf(e);
1719this.notifications.splice(t, 1), this.recalculate();
1720}
1721recalculate() {
1722let e = this.verticalSpace;
1723this.notifications.forEach(t => {
1724t.top = e, e += t.height + this.verticalSpace;
1725});
1726}
1727}
1728function o(e) {
1729window.notificationManager || (window.notificationManager = new i(e));
1730}
1731class s {
1732constructor(e, t, n) {
1733let r = `<div class="notification notification_popup notification_${t}">\n    <div class="notification__content">${e}</div>\n    <button title="Закрыть" class="notification__close"></button></div>`;
1734switch (document.body.insertAdjacentHTML("beforeEnd", r), this.elem = document.body.lastElementChild, 
1735n) {
1736case void 0:
1737this.timeout = this.TIMEOUT_DEFAULT;
1738break;
1739
1740case "slow":
1741this.timeout = this.TIMEOUT_SLOW;
1742break;
1743
1744case "fast":
1745this.timeout = this.TIMEOUT_FAST;
1746break;
1747
1748default:
1749this.timeout = n;
1750}
1751window.notificationManager.register(this), this.setupCloseHandler(), this.setupCloseTimeout();
1752}
1753get TIMEOUT_DEFAULT() {
1754return 3e3;
1755}
1756get TIMEOUT_SLOW() {
1757return 5e3;
1758}
1759get TIMEOUT_FAST() {
1760return 1500;
1761}
1762close() {
1763this.elem.parentNode && (this.elem.remove(), window.notificationManager.unregister(this));
1764}
1765setupCloseHandler() {
1766this.delegate(".notification__close", "click", () => this.close());
1767}
1768setupCloseTimeout() {
1769this.timeout && setTimeout(() => this.close(), this.timeout);
1770}
1771get height() {
1772return this.elem.offsetHeight;
1773}
1774set top(e) {
1775this.elem.style.transform = "translateY(" + e + "px)";
1776}
1777}
1778r.delegateMixin(s.prototype);
1779class a extends s {
1780constructor(e, t) {
1781super(e, "info", t);
1782}
1783}
1784class l extends s {
1785constructor(e, t) {
1786super(e, "warning", t);
1787}
1788}
1789class c extends s {
1790constructor(e, t) {
1791super(e, "success", t);
1792}
1793}
1794class u extends s {
1795constructor(e, t) {
1796super(e, "error", t);
1797}
1798get TIMEOUT_DEFAULT() {
1799return 5e3;
1800}
1801}
1802},
18035365: function(e, t) {
1804!function(e) {
1805var t, n = /("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/;
1806e.languages.css.selector = {
1807pattern: e.languages.css.selector.pattern,
1808lookbehind: !0,
1809inside: t = {
1810"pseudo-element": /:(?:after|before|first-letter|first-line|selection)|::[-\w]+/,
1811"pseudo-class": /:[-\w]+/,
1812class: /\.[-\w]+/,
1813id: /#[-\w]+/,
1814attribute: {
1815pattern: RegExp("\\[(?:[^[\\]\"']|" + n.source + ")*\\]"),
1816greedy: !0,
1817inside: {
1818punctuation: /^\[|\]$/,
1819"case-sensitivity": {
1820pattern: /(\s)[si]$/i,
1821lookbehind: !0,
1822alias: "keyword"
1823},
1824namespace: {
1825pattern: /^(\s*)(?:(?!\s)[-*\w\xA0-\uFFFF])*\|(?!=)/,
1826lookbehind: !0,
1827inside: {
1828punctuation: /\|$/
1829}
1830},
1831"attr-name": {
1832pattern: /^(\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+/,
1833lookbehind: !0
1834},
1835"attr-value": [ n, {
1836pattern: /(=\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+(?=\s*$)/,
1837lookbehind: !0
1838} ],
1839operator: /[|~*^$]?=/
1840}
1841},
1842"n-th": [ {
1843pattern: /(\(\s*)[+-]?\d*[\dn](?:\s*[+-]\s*\d+)?(?=\s*\))/,
1844lookbehind: !0,
1845inside: {
1846number: /[\dn]+/,
1847operator: /[+-]/
1848}
1849}, {
1850pattern: /(\(\s*)(?:even|odd)(?=\s*\))/i,
1851lookbehind: !0
1852} ],
1853combinator: />|\+|~|\|\|/,
1854punctuation: /[(),]/
1855}
1856}, e.languages.css.atrule.inside["selector-function-argument"].inside = t, e.languages.insertBefore("css", "property", {
1857variable: {
1858pattern: /(^|[^-\w\xA0-\uFFFF])--(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*/i,
1859lookbehind: !0
1860}
1861});
1862var r = {
1863pattern: /(\b\d+)(?:%|[a-z]+(?![\w-]))/,
1864lookbehind: !0
1865}, i = {
1866pattern: /(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,
1867lookbehind: !0
1868};
1869e.languages.insertBefore("css", "function", {
1870operator: {
1871pattern: /(\s)[+\-*\/](?=\s)/,
1872lookbehind: !0
1873},
1874hexcode: {
1875pattern: /\B#[\da-f]{3,8}\b/i,
1876alias: "color"
1877},
1878color: [ {
1879pattern: /(^|[^\w-])(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|RebeccaPurple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)(?![\w-])
1879/i,
1880lookbehind: !0
1881}, {
1882pattern: /\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,
1883inside: {
1884unit: r,
1885number: i,
1886function: /[\w-]+(?=\()/,
1887punctuation: /[(),]/
1888}
1889} ],
1890entity: /\\[\da-f]{1,8}/i,
1891unit: r,
1892number: i
1893});
1894}(Prism);
1895},
18965566: function(e, t, n) {
1897(document.currentScript || [].slice.call(document.getElementsByTagName("script")).pop()).setAttribute("data-manual", 1), 
1898n(3123), n(2346)(Prism);
1899let r = n(1328), i = n(6700), o = n(467);
1900function s(e) {
1901if (function(e) {
1902let t = e.querySelectorAll(".code-example:not([data-prism-highlighted])");
1903for (let e of t) new r(e), e.setAttribute("data-prism-highlighted", "1");
1904}(e), function(e) {
1905let t = e.querySelectorAll("div.code-tabs:not([data-prism-highlighted])");
1906for (let e of t) new i(e), e.setAttribute("data-prism-highlighted", "1");
1907}(e), window.ebookType) for (let e of document.querySelectorAll(".line-numbers-rows")) e.remove();
1908}
1909t.init = function() {
1910document.removeEventListener("DOMContentLoaded", Prism.highlightAll), document.addEventListener("DOMContentLoaded", function() {
1911s(document);
1912}), o();
1913}, t.highlight = s;
1914},
19155624: function(e, t) {
1916Prism.languages.clike = {
1917comment: [ {
1918pattern: /(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,
1919lookbehind: !0,
1920greedy: !0
1921}, {
1922pattern: /(^|[^\\:])\/\/.*/,
1923lookbehind: !0,
1924greedy: !0
1925} ],
1926string: {
1927pattern: /(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,
1928greedy: !0
1929},
1930"class-name": {
1931pattern: /(\b(?:class|extends|implements|instanceof|interface|new|trait)\s+|\bcatch\s+\()[\w.\\]+/i,
1932lookbehind: !0,
1933inside: {
1934punctuation: /[.\\]/
1935}
1936},
1937keyword: /\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\b/,
1938boolean: /\b(?:false|true)\b/,
1939function: /\b\w+(?=\()/,
1940number: /\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i,
1941operator: /[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,
1942punctuation: /[{}[\];(),.:]/
1943};
1944},
19455723: function(e, t) {
1946Prism.languages.javascript = Prism.languages.extend("clike", {
1947"class-name": [ Prism.languages.clike["class-name"], {
1948pattern: /(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,
1949lookbehind: !0
1950} ],
1951keyword: [ {
1952pattern: /((?:^|\})\s*)catch\b/,
1953lookbehind: !0
1954}, {
1955pattern: /(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,
1956lookbehind: !0
1957} ],
1958function: /#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,
1959number: {
1960pattern: RegExp(/(^|[^\w$])/.source + "(?:" + /NaN|Infinity/.source + "|" + /0[bB][01]+(?:_[01]+)*n?/.source + "|" + /0[oO][0-7]+(?:_[0-7]+)*n?/.source + "|" + /0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source + "|" + /\d+(?:_\d+)*n/.source + "|" + /(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source + ")" + /(?![\w$])/.source),
1961lookbehind: !0
1962},
1963operator: /--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/
1964}), Prism.languages.javascript["class-name"][0].pattern = /(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/, 
1965Prism.languages.insertBefore("javascript", "keyword", {
1966regex: {
1967pattern: RegExp(/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)/.source + /\//.source + "(?:" + /(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}/.source + "|" + /(?:\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.)*\])*\])*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}v[dgimyus]{0,7}/.source + ")" + /(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/.source),
1968lookbehind: !0,
1969greedy: !0,
1970inside: {
1971"regex-source": {
1972pattern: /^(\/)[\s\S]+(?=\/[a-z]*$)/,
1973lookbehind: !0,
1974alias: "language-regex",
1975inside: Prism.languages.regex
1976},
1977"regex-delimiter": /^\/|\/$/,
1978"regex-flags": /^[a-z]+$/
1979}
1980},
1981"function-variable": {
1982pattern: /#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]
1982*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,
1983alias: "function"
1984},
1985parameter: [ {
1986pattern: /(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,
1987lookbehind: !0,
1988inside: Prism.languages.javascript
1989}, {
1990pattern: /(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,
1991lookbehind: !0,
1992inside: Prism.languages.javascript
1993}, {
1994pattern: /(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,
1995lookbehind: !0,
1996inside: Prism.languages.javascript
1997}, {
1998pattern: /((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,
1999lookbehind: !0,
2000inside: Prism.languages.javascript
2001} ],
2002constant: /\b[A-Z](?:[A-Z_]|\dx?)*\b/
2003}), Prism.languages.insertBefore("javascript", "string", {
2004hashbang: {
2005pattern: /^#!.*/,
2006greedy: !0,
2007alias: "comment"
2008},
2009"template-string": {
2010pattern: /`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,
2011greedy: !0,
2012inside: {
2013"template-punctuation": {
2014pattern: /^`|`$/,
2015alias: "string"
2016},
2017interpolation: {
2018pattern: /((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,
2019lookbehind: !0,
2020inside: {
2021"interpolation-punctuation": {
2022pattern: /^\$\{|\}$/,
2023alias: "punctuation"
2024},
2025rest: Prism.languages.javascript
2026}
2027},
2028string: /[\s\S]+/
2029}
2030},
2031"string-property": {
2032pattern: /((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,
2033lookbehind: !0,
2034greedy: !0,
2035alias: "property"
2036}
2037}), Prism.languages.insertBefore("javascript", "operator", {
2038"literal-property": {
2039pattern: /((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,
2040lookbehind: !0,
2041alias: "property"
2042}
2043}), Prism.languages.markup && (Prism.languages.markup.tag.addInlined("script", "javascript"), 
2044Prism.languages.markup.tag.addAttribute(/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source, "javascript")), 
2045Prism.languages.js = Prism.languages.javascript;
2046},
20476127: function(e, t, n) {
2048let r = n(1495), i = n(3102), o = n(8944), s = n(2924), a = n(225);
2049class l {
2050constructor() {
2051this.elem = document.createElement("div"), document.body.appendChild(this.elem);
2052let e = new Modal({
2053hasClose: !1
2054}), t = new o;
2055e.setContent(t.elem), t.start(), this.onDocumentKeyDown = this.onDocumentKeyDown.bind(this);
2056let n = r({
2057url: "/tutorial/map/part"
2058});
2059n.addEventListener("success", t => {
2060e.remove(), this.elem.innerHTML = '<div class="tutorial-map-overlay"></div>', this.mapElem = this.elem.firstChild, 
2061this.mapElem.innerHTML = t.result + '<button class="close-button tutorial-map-overlay__close"></button>', 
2062this.mapElem.addEventListener("click", e => {
2063e.target.classList.contains("tutorial-map-overlay__close") && this.remove();
2064}), document.addEventListener("keydown", this.onDocumentKeyDown), document.body.classList.add("tutorial-map_on"), 
2065this.mapElem.addEventListener("scroll", a, {
2066passive: !0
2067}), new s(this.mapElem.firstElementChild);
2068}), n.addEventListener("fail", () => e.remove());
2069}
2070remove() {
2071this.elem.dispatchEvent(new CustomEvent("tutorial-map-remove")), this.elem.remove(), 
2072document.body.classList.remove("tutorial-map_on"), document.removeEventListener("keydown", this.onDocumentKeyDown);
2073}
2074onDocumentKeyDown(e) {
207527 == e.keyCode && (e.preventDefault(), this.remove());
2076}
2077}
2078i.delegateMixin(l.prototype), e.exports = l;
2079},
20806188: function(e, t, n) {
2081var r = {
2082"./en.yml": 6526
2083};
2084function i(e) {
2085var t = o(e);
2086return n(t);
2087}
2088function o(e) {
2089if (!n.o(r, e)) {
2090var t = new Error("Cannot find module '" + e + "'");
2091throw t.code = "MODULE_NOT_FOUND", t;
2092}
2093return r[e];
2094}
2095i.keys = function() {
2096return Object.keys(r);
2097}, i.resolve = o, e.exports = i, i.id = 6188;
2098},
20996339: function(e, t, n) {
2100var r = n(7726), i = "object" == typeof self && self && self.Object === Object && self, o = r || i || Function("return this")();
2101e.exports = o;
2102},
21036516: function(e, t, n) {
2104var r = n(4890), i = n(5116);
2105e.exports = function(e) {
2106return "symbol" == typeof e || i(e) && "[object Symbol]" == r(e);
2107};
2108},
21096526: function(e, t, n) {
2110"use strict";
2111n.r(t), t.default = {
2112server_connection_error: "Server connection error.",
2113server_request_timeout: "Server request timeout.",
2114request_aborted: "Request was aborted.",
2115no_response: "No response from server.",
2116server_error: "Server error (code #{status}), try again later.",
2117invalid_format: "Invalid response format."
2118};
2119},
21206532: function(e) {
2121"use strict";
2122var t = {};
2123function n(e) {
2124var n;
2125return t[e] ? e : (n = e.toLowerCase().replace("_", "-"), t[n] ? n : (n = n.split("-")[0], 
2126t[n] ? n : null));
2127}
2128var r = /c\d+$/;
2129function i(e, i) {
2130var o = n(e);
2131if (!o) return -1;
2132if (!t[o].cFn) return 0;
2133var s = String(i), a = 0;
2134if (r.test(s)) {
2135var l = s.split("c");
2136a = +l[1], i = Math.pow(10, a) * l[0], s = String(i);
2137}
2138var c = s.indexOf(".") < 0 ? "" : s.split(".")[1], u = c.length, d = c.replace(/0+$/, "").length, p = +i, h = +s.split(".")[0], f = 0 === c.length ? 0 : +c.replace(/0+$/, "");
2139return t[o].cFn(p, h, u, +c, f, d, a);
2140}
2141function o(e, r) {
2142var i = n(e);
2143if (!i) return -1;
2144if (!t[i].oFn) return 0;
2145var o = String(r), s = o.indexOf(".") < 0 ? "" : o.split(".")[1], a = s.length, l = s.replace(/0+$/, "").length, c = +r, u = +o.split(".")[0], d = 0 === s.length ? 0 : +s.replace(/0+$/, "");
2146return t[i].oFn(c, u, a, +s, d, l, 0);
2147}
2148e.exports = function(e, r) {
2149var o = n(e);
2150return o ? t[o].c[i(o, r)] : null;
2151}, e.exports.indexOf = i, e.exports.forms = function(e) {
2152var r = n(e);
2153return t[r] ? t[r].c : null;
2154}, e.exports.ordinal = function(e, r) {
2155var i = n(e);
2156return t[i] ? t[i].o[o(i, r)] : null;
2157}, e.exports.ordinal.indexOf = o, e.exports.ordinal.forms = function(e) {
2158var r = n(e);
2159return t[r] ? t[r].o : null;
2160};
2161var s = [ "zero", "one", "two", "few", "many", "other" ];
2162function a(e) {
2163return s[e];
2164}
2165function l(e, n) {
2166var r;
2167for (n.c = n.c ? n.c.map(a) : [ "other" ], n.o = n.o ? n.o.map(a) : [ "other" ], 
2168r = 0; r < e.length; r++) t[e[r]] = n;
2169}
2170function c(e, t, n) {
2171return e <= n && n <= t && n % 1 == 0;
2172}
2173function u(e, t) {
2174return e.indexOf(t) >= 0;
2175}
2176l([ "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" ], {
2177c: [ 1, 5 ],
2178cFn: function(e) {
2179return 1 === e ? 0 : 1;
2180}
2181}), l([ "ak", "bho", "guw", "ln", "mg", "nso", "pa", "ti", "wa" ], {
2182c: [ 1, 5 ],
2183cFn: function(e) {
2184return c(0, 1, e) ? 0 : 1;
2185}
2186}), l([ "am", "doi", "fa", "kn", "pcm", "zu" ], {
2187c: [ 1, 5 ],
2188cFn: function(e, t) {
2189return 0 === t || 1 === e ? 0 : 1;
2190}
2191}), l([ "ar", "ars" ], {
2192c: [ 0, 1, 2, 3, 4, 5 ],
2193cFn: function(e) {
2194var t = e % 100;
2195return 0 === e ? 0 : 1 === e ? 1 : 2 === e ? 2 : c(3, 10, t) ? 3 : c(11, 99, t) ? 4 : 5;
2196}
2197}), l([ "as", "bn" ], {
2198c: [ 1, 5 ],
2199cFn: function(e, t) {
2200return 0 === t || 1 === e ? 0 : 1;
2201},
2202o: [ 1, 2, 3, 4, 5 ],
2203oFn: function(e) {
2204return u([ 1, 5, 7, 8, 9, 10 ], e) ? 0 : u([ 2, 3 ], e) ? 1 : 4 === e ? 2 : 6 === e ? 3 : 4;
2205}
2206}), l([ "ast", "de", "et", "fi", "fy", "gl", "ia", "io", "nl", "sw", "ur", "yi" ], {
2207c: [ 1, 5 ],
2208cFn: function(e, t, n) {
2209return 1 === t && 0 === n ? 0 : 1;
2210}
2211}), l([ "az" ], {
2212c: [ 1, 5 ],
2213cFn: function(e) {
2214return 1 === e ? 0 : 1;
2215},
2216o: [ 1, 3, 4, 5 ],
2217oFn: function(e, t) {
2218var n = t % 10, r = t % 100, i = t % 1e3;
2219return u([ 1, 2, 5, 7, 8 ], n) || u([ 20, 50, 70, 80 ], r) ? 0 : u([ 3, 4 ], n) || u([ 100, 200, 300, 400, 500, 600, 700, 800, 900 ], i) ? 1 : 0 === t || 6 === n || u([ 40, 60, 90 ], r) ? 2 : 3;
2220}
2221}), l([ "bal" ], {
2222c: [ 1, 5 ],
2223cFn: function(e) {
2224return 1 === e ? 0 : 1;
2225},
2226o: [ 1, 5 ],
2227oFn: function(e) {
2228return 1 === e ? 0 : 1;
2229}
2230}), l([ "be" ], {
2231c: [ 1, 3, 4, 5 ],
2232cFn: function(e) {
2233var t = e % 10, n = e % 100;
2234return 1 === t && 11 !== n ? 0 : c(2, 4, t) && !c(12, 14, n) ? 1 : 0 === t || c(5, 9, t) || c(11, 14, n) ? 2 : 3;
2235},
2236o: [ 3, 5 ],
2237oFn: function(e) {
2238var t = e % 100;
2239return u([ 2, 3 ], e % 10) && !u([ 12, 13 ], t) ? 0 : 1;
2240}
2241}), l([ "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" ], {}), 
2242l([ "br" ], {
2243c: [ 1, 2, 3, 4, 5 ],
2244cFn: function(e) {
2245var t = e % 10, n = e % 100, r = e % 1e6;
2246return 1 !== t || u([ 11, 71, 91 ], n) ? 2 !== t || u([ 12, 72, 92 ], n) ? !c(3, 4, t) && 9 !== t || c(10, 19, n) || c(70, 79, n) || c(90, 99, n) ? 0 !== e && 0 === r ? 3 : 4 : 2 : 1 : 0;
2247}
2248}), l([ "bs", "hr", "sh", "sr" ], {
2249c: [ 1, 3, 5 ],
2250cFn: function(e, t, n, r) {
2251var i = t % 10, o = t % 100, s = r % 10, a = r % 100;
2252return 0 === n && 1 === i && 11 !== o || 1 === s && 11 !== a ? 0 : 0 === n && c(2, 4, i) && !c(12, 14, o) || c(2, 4, s) && !c(12, 14, a) ? 1 : 2;
2253}
2254}), l([ "ca" ], {
2255c: [ 1, 5 ],
2256cFn: function(e, t, n) {
2257return 1 === t && 0 === n ? 0 : 1;
2258},
2259o: [ 1, 2, 3, 5 ],
2260oFn: function(e) {
2261return u([ 1, 3 ], e) ? 0 : 2 === e ? 1 : 4 === e ? 2 : 3;
2262}
2263}), l([ "ceb" ], {
2264c: [ 1, 5 ],
2265cFn: function(e, t, n, r) {
2266var i = t % 10, o = r % 10;
2267return 0 === n && u([ 1, 2, 3 ], t) || 0 === n && !u([ 4, 6, 9 ], i) || 0 !== n && !u([ 4, 6, 9 ], o) ? 0 : 1;
2268}
2269}), l([ "cs", "sk" ], {
2270c: [ 1, 3, 4, 5 ],
2271cFn: function(e, t, n) {
2272return 1 === t && 0 === n ? 0 : c(2, 4, t) && 0 === n ? 1 : 0 !== n ? 2 : 3;
2273}
2274}), l([ "cy" ], {
2275c: [ 0, 1, 2, 3, 4, 5 ],
2276cFn: function(e) {
2277return 0 === e ? 0 : 1 === e ? 1 : 2 === e ? 2 : 3 === e ? 3 : 6 === e ? 4 : 5;
2278},
2279o: [ 0, 1, 2, 3, 4, 5 ],
2280oFn: function(e) {
2281return u([ 0, 7, 8, 9 ], e) ? 0 : 1 === e ? 1 : 2 === e ? 2 : u([ 3, 4 ], e) ? 3 : u([ 5, 6 ], e) ? 4 : 5;
2282}
2283}), l([ "da" ], {
2284c: [ 1, 5 ],
2285cFn: function(e, t, n, r, i) {
2286return 1 === e || 0 !== i && u([ 0, 1 ], t) ? 0 : 1;
2287}
2288}), l([ "dsb", "hsb" ], {
2289c: [ 1, 2, 3, 5 ],
2290cFn: function(e, t, n, r) {
2291var i = t % 100, o = r % 100;
2292return 0 === n && 1 === i || 1 === o ? 0 : 0 === n && 2 === i || 2 === o ? 1 : 0 === n && c(3, 4, i) || c(3, 4, o) ? 2 : 3;
2293}
2294}), l([ "en" ], {
2295c: [ 1, 5 ],
2296cFn: function(e, t, n) {
2297return 1 === t && 0 === n ? 0 : 1;
2298},
2299o: [ 1, 2, 3, 5 ],
2300oFn: function(e) {
2301var t = e % 10, n = e % 100;
2302return 1 === t && 11 !== n ? 0 : 2 === t && 12 !== n ? 1 : 3 === t && 13 !== n ? 2 : 3;
2303}
2304}), l([ "es" ], {
2305c: [ 1, 4, 5 ],
2306cFn: function(e, t, n, r, i, o, s) {
2307return 1 === e ? 0 : 0 === s && 0 !== t && 0 === t % 1e6 && 0 === n || !c(0, 5, s) ? 1 : 2;
2308}
2309}), l([ "ff", "kab" ], {
2310c: [ 1, 5 ],
2311cFn: function(e, t) {
2312return u([ 0, 1 ], t) ? 0 : 1;
2313}
2314}), l([ "fil", "tl" ], {
2315c: [ 1, 5 ],
2316cFn: function(e, t, n, r) {
2317var i = t % 10, o = r % 10;
2318return 0 === n && u([ 1, 2, 3 ], t) || 0 === n && !u([ 4, 6, 9 ], i) || 0 !== n && !u([ 4, 6, 9 ], o) ? 0 : 1;
2319},
2320o: [ 1, 5 ],
2321oFn: function(e) {
2322return 1 === e ? 0 : 1;
2323}
2324}), l([ "fr" ], {
2325c: [ 1, 4, 5 ],
2326cFn: function(e, t, n, r, i, o, s) {
2327var a = t % 1e6;
2328return u([ 0, 1 ], t) ? 0 : 0 === s && 0 !== t && 0 === a && 0 === n || !c(0, 5, s) ? 1 : 2;
2329},
2330o: [ 1, 5 ],
2331oFn: function(e) {
2332return 1 === e ? 0 : 1;
2333}
2334}), l([ "ga" ], {
2335c: [ 1, 2, 3, 4, 5 ],
2336cFn: function(e) {
2337return 1 === e ? 0 : 2 === e ? 1 : c(3, 6, e) ? 2 : c(7, 10, e) ? 3 : 4;
2338},
2339o: [ 1, 5 ],
2340oFn: function(e) {
2341return 1 === e ? 0 : 1;
2342}
2343}), l([ "gd" ], {
2344c: [ 1, 2, 3, 5 ],
2345cFn: function(e) {
2346return u([ 1, 11 ], e) ? 0 : u([ 2, 12 ], e) ? 1 : c(3, 10, e) || c(13, 19, e) ? 2 : 3;
2347},
2348o: [ 1, 2, 3, 5 ],
2349oFn: function(e) {
2350return u([ 1, 11 ], e) ? 0 : u([ 2, 12 ], e) ? 1 : u([ 3, 13 ], e) ? 2 : 3;
2351}
2352}), l([ "gu", "hi" ], {
2353c: [ 1, 5 ],
2354cFn: function(e, t) {
2355return 0 === t || 1 === e ? 0 : 1;
2356},
2357o: [ 1, 2, 3, 4, 5 ],
2358oFn: function(e) {
2359return 1 === e ? 0 : u([ 2, 3 ], e) ? 1 : 4 === e ? 2 : 6 === e ? 3 : 4;
2360}
2361}), l([ "gv" ], {
2362c: [ 1, 2, 3, 4, 5 ],
2363cFn: function(e, t, n) {
2364var r = t % 10;
2365return 0 === n && 1 === r ? 0 : 0 === n && 2 === r ? 1 : 0 === n && u([ 0, 20, 40, 60, 80 ], t % 100) ? 2 : 0 !== n ? 3 : 4;
2366}
2367}), l([ "he" ], {
2368c: [ 1, 2, 4, 5 ],
2369cFn: function(e, t, n) {
2370var r = e % 10;
2371return 1 === t && 0 === n ? 0 : 2 === t && 0 === n ? 1 : 0 !== n || c(0, 10, e) || 0 !== r ? 3 : 2;
2372}
2373}), l([ "hu" ], {
2374c: [ 1, 5 ],
2375cFn: function(e) {
2376return 1 === e ? 0 : 1;
2377},
2378o: [ 1, 5 ],
2379oFn: function(e) {
2380return u([ 1, 5 ], e) ? 0 : 1;
2381}
2382}), l([ "hy" ], {
2383c: [ 1, 5 ],
2384cFn: function(e, t) {
2385return u([ 0, 1 ], t) ? 0 : 1;
2386},
2387o: [ 1, 5 ],
2388oFn: function(e) {
2389return 1 === e ? 0 : 1;
2390}
2391}), l([ "is" ], {
2392c: [ 1, 5 ],
2393cFn: function(e, t, n, r, i) {
2394return 0 === i && 1 === t % 10 && 11 !== t % 100 || 0 !== i ? 0 : 1;
2395}
2396}), l([ "it" ], {
2397c: [ 1, 4, 5 ],
2398cFn: function(e, t, n, r, i, o, s) {
2399return 1 === t && 0 === n ? 0 : 0 === s && 0 !== t && 0 === t % 1e6 && 0 === n || !c(0, 5, s) ? 1 : 2;
2400},
2401o: [ 4, 5 ],
2402oFn: function(e) {
2403return u([ 11, 8, 80, 800 ], e) ? 0 : 1;
2404}
2405}), l([ "iu", "naq", "sat", "se", "sma", "smi", "smj", "smn", "sms" ], {
2406c: [ 1, 2, 5 ],
2407cFn: function(e) {
2408return 1 === e ? 0 : 2 === e ? 1 : 2;
2409}
2410}), l([ "ka" ], {
2411c: [ 1, 5 ],
2412cFn: function(e) {
2413return 1 === e ? 0 : 1;
2414},
2415o: [ 1, 4, 5 ],
2416oFn: function(e, t) {
2417var n = t % 100;
2418return 1 === t ? 0 : 0 === t || c(2, 20, n) || 40 === n || 60 === n || 80 === n ? 1 : 2;
2419}
2420}), l([ "kk" ], {
2421c: [ 1, 5 ],
2422cFn: function(e) {
2423return 1 === e ? 0 : 1;
2424},
2425o: [ 4, 5 ],
2426oFn: function(e) {
2427var t = e % 10;
2428return 6 === t || 9 === t || 0 === t && 0 !== e ? 0 : 1;
2429}
2430}), l([ "ksh" ], {
2431c: [ 0, 1, 5 ],
2432cFn: function(e) {
2433return 0 === e ? 0 : 1 === e ? 1 : 2;
2434}
2435}), l([ "kw" ], {
2436c: [ 0, 1, 2, 3, 4, 5 ],
2437cFn: function(e) {
2438var t = e % 100, n = e % 1e3, r = e % 1e5, i = e % 1e6;
2439return 0 === e ? 0 : 1 === e ? 1 : u([ 2, 22, 42, 62, 82 ], t) || 0 === n && (c(1e3, 2e4, r) || 4e4 === r || 6e4 === r || 8e4 === r) || 0 !== e && 1e5 === i ? 2 : u([ 3, 23, 43, 63, 83 ], t) ? 3 : 1 !== e && u([ 1, 21, 41, 61, 81 ], t) ? 4 : 5;
2440},
2441o: [ 1, 4, 5 ],
2442oFn: function(e) {
2443var t = e % 100;
2444return c(1, 4, e) || c(1, 4, t) || c(21, 24, t) || c(41, 44, t) || c(61, 64, t) || c(81, 84, t) ? 0 : 5 === e || 5 === t ? 1 : 2;
2445}
2446}), l([ "lag" ], {
2447c: [ 0, 1, 5 ],
2448cFn: function(e, t) {
2449return 0 === e ? 0 : u([ 0, 1 ], t) && 0 !== e ? 1 : 2;
2450}
2451}), l([ "lij" ], {
2452c: [ 1, 5 ],
2453cFn: function(e, t, n) {
2454return 1 === t && 0 === n ? 0 : 1;
2455},
2456o: [ 4, 5 ],
2457oFn: function(e) {
2458return 11 === e || 8 === e || c(80, 89, e) || c(800, 899, e) ? 0 : 1;
2459}
2460}), l([ "lo", "ms", "vi" ], {
2461o: [ 1, 5 ],
2462oFn: function(e) {
2463return 1 === e ? 0 : 1;
2464}
2465}), l([ "lt" ], {
2466c: [ 1, 3, 4, 5 ],
2467cFn: function(e, t, n, r) {
2468var i = e % 10, o = e % 100;
2469return 1 !== i || c(11, 19, o) ? c(2, 9, i) && !c(11, 19, o) ? 1 : 0 !== r ? 2 : 3 : 0;
2470}
2471}), l([ "lv", "prg" ], {
2472c: [ 0, 1, 5 ],
2473cFn: function(e, t, n, r) {
2474var i = e % 10, o = e % 100, s = r % 100, a = r % 10;
2475return 0 === i || c(11, 19, o) || 2 === n && c(11, 19, s) ? 0 : 1 === i && 11 !== o || 2 === n && 1 === a && 11 !== s || 2 !== n && 1 === a ? 1 : 2;
2476}
2477}), l([ "mk" ], {
2478c: [ 1, 5 ],
2479cFn: function(e, t, n, r) {
2480return 0 === n && 1 === t % 10 && 11 !== t % 100 || 1 === r % 10 && 11 !== r % 100 ? 0 : 1;
2481},
2482o: [ 1, 2, 4, 5 ],
2483oFn: function(e, t) {
2484var n = t % 10, r = t % 100;
2485return 1 === n && 11 !== r ? 0 : 2 === n && 12 !== r ? 1 : u([ 7, 8 ], n) && !u([ 17, 18 ], r) ? 2 : 3;
2486}
2487}), l([ "mo", "ro" ], {
2488c: [ 1, 3, 5 ],
2489cFn: function(e, t, n) {
2490return 1 === t && 0 === n ? 0 : 0 !== n || 0 === e || c(2, 19, e % 100) ? 1 : 2;
2491},
2492o: [ 1, 5 ],
2493oFn: function(e) {
2494return 1 === e ? 0 : 1;
2495}
2496}), l([ "mr" ], {
2497c: [ 1, 5 ],
2498cFn: function(e) {
2499return 1 === e ? 0 : 1;
2500},
2501o: [ 1, 2, 3, 5 ],
2502oFn: function(e) {
2503return 1 === e ? 0 : u([ 2, 3 ], e) ? 1 : 4 === e ? 2 : 3;
2504}
2505}), l([ "mt" ], {
2506c: [ 1, 3, 4, 5 ],
2507cFn: function(e) {
2508var t = e % 100;
2509return 1 === e ? 0 : 0 === e || c(2, 10, t) ? 1 : c(11, 19, t) ? 2 : 3;
2510}
2511}), l([ "ne" ], {
2512c: [ 1, 5 ],
2513cFn: function(e) {
2514return 1 === e ? 0 : 1;
2515},
2516o: [ 1, 5 ],
2517oFn: function(e) {
2518return c(1, 4, e) ? 0 : 1;
2519}
2520}), l([ "or" ], {
2521c: [ 1, 5 ],
2522cFn: function(e) {
2523return 1 === e ? 0 : 1;
2524},
2525o: [ 1, 2, 3, 4, 5 ],
2526oFn: function(e) {
2527return 1 === e || 5 === e || c(7, 9, e) ? 0 : u([ 2, 3 ], e) ? 1 : 4 === e ? 2 : 6 === e ? 3 : 4;
2528}
2529}), l([ "pl" ], {
2530c: [ 1, 3, 4, 5 ],
2531cFn: function(e, t, n) {
2532var r = t % 10, i = t % 100;
2533return 1 === t && 0 === n ? 0 : 0 === n && c(2, 4, r) && !c(12, 14, i) ? 1 : 0 === n && 1 !== t && c(0, 1, r) || 0 === n && c(5, 9, r) || 0 === n && c(12, 14, i) ? 2 : 3;
2534}
2535}), l([ "pt" ], {
2536c: [ 1, 4, 5 ],
2537cFn: function(e, t, n, r, i, o, s) {
2538var a = t % 1e6;
2539return c(0, 1, t) ? 0 : 0 === s && 0 !== t && 0 === a && 0 === n || !c(0, 5, s) ? 1 : 2;
2540}
2541}), l([ "pt-pt" ], {
2542c: [ 1, 4, 5 ],
2543cFn: function(e, t, n, r, i, o, s) {
2544return 1 === t && 0 === n ? 0 : 0 === s && 0 !== t && 0 === t % 1e6 && 0 === n || !c(0, 5, s) ? 1 : 2;
2545}
2546}), l([ "ru" ], {
2547c: [ 1, 3, 4, 5 ],
2548cFn: function(e, t, n) {
2549var r = t % 10, i = t % 100;
2550return 0 === n && 1 === r && 11 !== i ? 0 : 0 === n && c(2, 4, r) && !c(12, 14, i) ? 1 : 0 === n && 0 === r || 0 === n && c(5, 9, r) || 0 === n && c(11, 14, i) ? 2 : 3;
2551}
2552}), l([ "sc", "scn" ], {
2553c: [ 1, 5 ],
2554cFn: function(e, t, n) {
2555return 1 === t && 0 === n ? 0 : 1;
2556},
2557o: [ 4, 5 ],
2558oFn: function(e) {
2559return u([ 11, 8, 80, 800 ], e) ? 0 : 1;
2560}
2561}), l([ "shi" ], {
2562c: [ 1, 3, 5 ],
2563cFn: function(e, t) {
2564return 0 === t || 1 === e ? 0 : c(2, 10, e) ? 1 : 2;
2565}
2566}), l([ "si" ], {
2567c: [ 1, 5 ],
2568cFn: function(e, t, n, r) {
2569return u([ 0, 1 ], e) || 0 === t && 1 === r ? 0 : 1;
2570}
2571}), l([ "sl" ], {
2572c: [ 1, 2, 3, 5 ],
2573cFn: function(e, t, n) {
2574var r = t % 100;
2575return 0 === n && 1 === r ? 0 : 0 === n && 2 === r ? 1 : 0 === n && c(3, 4, r) || 0 !== n ? 2 : 3;
2576}
2577}), l([ "sq" ], {
2578c: [ 1, 5 ],
2579cFn: function(e) {
2580return 1 === e ? 0 : 1;
2581},
2582o: [ 1, 4, 5 ],
2583oFn: function(e) {
2584return 1 === e ? 0 : 4 === e % 10 && 14 !== e % 100 ? 1 : 2;
2585}
2586}), l([ "sv" ], {
2587c: [ 1, 5 ],
2588cFn: function(e, t, n) {
2589return 1 === t && 0 === n ? 0 : 1;
2590},
2591o: [ 1, 5 ],
2592oFn: function(e) {
2593var t = e % 100;
2594return u([ 1, 2 ], e % 10) && !u([ 11, 12 ], t) ? 0 : 1;
2595}
2596}), l([ "tk" ], {
2597c: [ 1, 5 ],
2598cFn: function(e) {
2599return 1 === e ? 0 : 1;
2600},
2601o: [ 3, 5 ],
2602oFn: function(e) {
2603return u([ 6, 9 ], e % 10) || 10 === e ? 0 : 1;
2604}
2605}), l([ "tzm" ], {
2606c: [ 1, 5 ],
2607cFn: function(e) {
2608return c(0, 1, e) || c(11, 99, e) ? 0 : 1;
2609}
2610}), l([ "uk" ], {
2611c: [ 1, 3, 4, 5 ],
2612cFn: function(e, t, n) {
2613var r = t % 10, i = t % 100;
2614return 0 === n && 1 === r && 11 !== i ? 0 : 0 === n && c(2, 4, r) && !c(12, 14, i) ? 1 : 0 === n && 0 === r || 0 === n && c(5, 9, r) || 0 === n && c(11, 14, i) ? 2 : 3;
2615},
2616o: [ 3, 5 ],
2617oFn: function(e) {
2618return 3 === e % 10 && 13 !== e % 100 ? 0 : 1;
2619}
2620});
2621},
26226700: function(e, t, n) {
2623let r = n(3102), i = n(8060);
2624class o {
2625constructor(e) {
2626if (window.ebookType) return;
2627this.elem = e, this.translateX = 0, this.switchesElem = e.querySelector("[data-code-tabs-switches]"), 
2628this.switchesElemItems = this.switchesElem.firstElementChild, this.arrowLeft = e.querySelector("[data-code-tabs-left]"), 
2629this.arrowRight = e.querySelector("[data-code-tabs-right]"), this.arrowLeft.onclick = e => {
2630e.preventDefault(), this.translateX = Math.max(0, this.translateX - this.switchesElem.offsetWidth), 
2631this.renderTranslate();
2632}, this.arrowRight.onclick = e => {
2633e.preventDefault(), this.translateX = Math.min(this.translateX + this.switchesElem.offsetWidth, this.switchesElemItems.offsetWidth - this.switchesElem.offsetWidth), 
2634this.renderTranslate();
2635};
2636let t = this.elem.querySelector(".code-tabs__section_current");
2637t !== t.parentElement.firstElementChild && this.highlightTab(t), this.delegate(".code-tabs__switch", "click", this.onSwitchClick);
2638}
2639onSwitchClick(e) {
2640e.preventDefault();
2641let t, n = e.delegateTarget.parentNode.children, r = this.elem.querySelector("[data-code-tabs-content]").children;
2642for (let i = 0; i < n.length; i++) {
2643let o = n[i], s = r[i];
2644o === e.delegateTarget ? (t = i, s.classList.add("code-tabs__section_current"), 
2645o.classList.add("code-tabs__switch_current")) : (s.classList.remove("code-tabs__section_current"), 
2646o.classList.remove("code-tabs__switch_current"));
2647}
26480 === t ? this.elem.classList.add("code-tabs_result_on") : (this.elem.classList.remove("code-tabs_result_on"), 
2649this.highlightTab(r[t]));
2650}
2651highlightTab(e) {
2652if (e.highlighted) return;
2653let t = e.querySelector("pre"), n = t.querySelector("code");
2654Prism.highlightElement(n), t.insertAdjacentHTML("afterBegin", i(t.innerHTML)), e.highlighted = !0;
2655}
2656renderTranslate() {
2657this.switchesElemItems.style.transform = "translateX(-" + this.translateX + "px)", 
26580 === this.translateX ? this.arrowLeft.setAttribute("disabled", "") : this.arrowLeft.removeAttribute("disabled"), 
2659this.translateX === this.switchesElemItems.offsetWidth - this.switchesElem.offsetWidth ? this.arrowRight.setAttribute("disabled", "") : this.arrowRight.removeAttribute("disabled");
2660}
2661}
2662r.delegateMixin(o.prototype), e.exports = o;
2663},
26646966: function(e, t) {
2665Prism.languages.sql = {
2666comment: {
2667pattern: /(^|[^\\])(?:\/\*[\s\S]*?\*\/|(?:--|\/\/|#).*)/,
2668lookbehind: !0
2669},
2670variable: [ {
2671pattern: /@(["'`])(?:\\[\s\S]|(?!\1)[^\\])+\1/,
2672greedy: !0
2673}, /@[\w.$]+/ ],
2674string: {
2675pattern: /(^|[^@\\])("|')(?:\\[\s\S]|(?!\2)[^\\]|\2\2)*\2/,
2676greedy: !0,
2677lookbehind: !0
2678},
2679identifier: {
2680pattern: /(^|[^@\\])`(?:\\[\s\S]|[^`\\]|``)*`/,
2681greedy: !0,
2682lookbehind: !0,
2683inside: {
2684punctuation: /^`|`$/
2685}
2686},
2687function: /\b(?:AVG|COUNT|FIRST|FORMAT|LAST|LCASE|LEN|MAX|MID|MIN|MOD|NOW|ROUND|SUM|UCASE)(?=\s*\()/i,
2688keyword: /\b(?:ACTION|ADD|AFTER|ALGORITHM|ALL|ALTER|ANALYZE|ANY|APPLY|AS|ASC|AUTHORIZATION|AUTO_INCREMENT|BACKUP|BDB|BEGIN|BERKELEYDB|BIGINT|BINARY|BIT|BLOB|BOOL|BOOLEAN|BREAK|BROWSE|BTREE|BULK|BY|CALL|CASCADED?|CA
2688SE|CHAIN|CHAR(?:ACTER|SET)?|CHECK(?:POINT)?|CLOSE|CLUSTERED|COALESCE|COLLATE|COLUMNS?|COMMENT|COMMIT(?:TED)?|COMPUTE|CONNECT|CONSISTENT|CONSTRAINT|CONTAINS(?:TABLE)?|CONTINUE|CONVERT|CREATE|CROSS|CURRENT(?:_DATE|_TIME|_TIMESTAMP|_USER)?|CURSOR|CYCLE|DATA(?:BASES?)?|DATE(?:TIME)?|DAY|DBCC|DEALLOCATE|DEC|DECIMAL|DECLARE|DEFAULT|DEFINER|DELAYED|DELETE|DELIMITERS?|DENY|DESC|DESCRIBE|DETERMINISTIC|DISABLE|DISCARD|DISK|DISTINCT|DISTINCTROW|DISTRIBUTED|DO|DOUBLE|DROP|DUMMY|DUMP(?:FILE)?|DUPLICATE|ELSE(?:IF)?|ENABLE|ENCLOSED|END|ENGINE|ENUM|ERRLVL|ERRORS|ESCAPED?|EXCEPT|EXEC(?:UTE)?|EXISTS|EXIT|EXPLAIN|EXTENDED|FETCH|FIELDS|FILE|FILLFACTOR|FIRST|FIXED|FLOAT|FOLLOWING|FOR(?: EACH ROW)?|FORCE|FOREIGN|FREETEXT(?:TABLE)?|FROM|FULL|FUNCTION|GEOMETRY(?:COLLECTION)?|GLOBAL|GOTO|GRANT|GROUP|HANDLER|HASH|HAVING|HOLDLOCK|HOUR|IDENTITY(?:COL|_INSERT)?|IF|IGNORE|IMPORT|INDEX|INFILE|INNER|INNODB|INOUT|INSERT|INT|INTEGER|INTERSECT|INTERVAL|INTO|INVOKER|ISOLATION|ITERATE|JOIN|KEYS?|KILL|LANGUAGE|LAST|LEAVE|LEFT|LEVEL|LIMIT|LINENO|LINES|LINESTRING|LOAD|LOCAL|LOCK|LONG(?:BLOB|TEXT)|LOOP|MATCH(?:ED)?|MEDIUM(?:BLOB|INT|TEXT)|MERGE|MIDDLEINT|MINUTE|MODE|MODIFIES|MODIFY|MONTH|MULTI(?:LINESTRING|POINT|POLYGON)|NATIONAL|NATURAL|NCHAR|NEXT|NO|NONCLUSTERED|NULLIF|NUMERIC|OFF?|OFFSETS?|ON|OPEN(?:DATASOURCE|QUERY|ROWSET)?|OPTIMIZE|OPTION(?:ALLY)?|ORDER|OUT(?:ER|FILE)?|OVER|PARTIAL|PARTITION|PERCENT|PIVOT|PLAN|POINT|POLYGON|PRECEDING|PRECISION|PREPARE|PREV|PRIMARY|PRINT|PRIVILEGES|PROC(?:EDURE)?|PUBLIC|PURGE|QUICK|RAISERROR|READS?|REAL|RECONFIGURE|REFERENCES|RELEASE|RENAME|REPEAT(?:ABLE)?|REPLACE|REPLICATION|REQUIRE|RESIGNAL|RESTORE|RESTRICT|RETURN(?:ING|S)?|REVOKE|RIGHT|ROLLBACK|ROUTINE|ROW(?:COUNT|GUIDCOL|S)?|RTREE|RULE|SAVE(?:POINT)?|SCHEMA|SECOND|SELECT|SERIAL(?:IZABLE)?|SESSION(?:_USER)?|SET(?:USER)?|SHARE|SHOW|SHUTDOWN|SIMPLE|SMALLINT|SNAPSHOT|SOME|SONAME|SQL|START(?:ING)?|STATISTICS|STATUS|STRIPED|SYSTEM_USER|TABLES?|TABLESPACE|TEMP(?:ORARY|TABLE)?|TERMINATED|TEXT(?:SIZE)?|THEN|TIME(?:STAMP)?|TINY(?:BLOB|INT|TEXT)|TOP?|TRAN(?:SACTIONS?)?|TRIGGER|TRUNCATE|TSEQUAL|TYPES?|UNBOUNDED|UNCOMMITTED|UNDEFINED|UNION|UNIQUE|UNLOCK|UNPIVOT|UNSIGNED|UPDATE(?:TEXT)?|USAGE|USE|USER|USING|VALUES?|VAR(?:BINARY|CHAR|CHARACTER|YING)|VIEW|WAITFOR|WARNINGS|WHEN|WHERE|WHILE|WITH(?: ROLLUP|IN)?|WORK|WRITE(?:TEXT)?|YEAR)\b/i,
2689boolean: /\b(?:FALSE|NULL|TRUE)\b/i,
2690number: /\b0x[\da-f]+\b|\b\d+(?:\.\d*)?|\B\.\d+\b/i,
2691operator: /[-+*\/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|DIV|ILIKE|IN|IS|LIKE|NOT|OR|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i,
2692punctuation: /[;[\]()`,.]/
2693};
2694},
26956970: function(e) {
2696e.exports = function(e) {
2697let t = e.getBoundingClientRect(), n = 0;
2698if (t.top < 0) n = t.bottom; else {
2699if (!(t.bottom > window.innerHeight)) return !0;
2700n = window.innerHeight - top;
2701}
2702return n > 10;
2703};
2704},
27056976: function(e, t) {
2706!function(e) {
2707var t = /\b(?:abstract|assert|boolean|break|byte|case|catch|char|class|const|continue|default|do|double|else|enum|exports|extends|final|finally|float|for|goto|if|implements|import|instanceof|int|interface|long|module|native|new|non-sealed|null|open|opens|package|permits|private|protected|provides|public|record(?!\s*[(){}[\]<>=%~.:,;?+\-*/&|^])|requires|return|sealed|short|static|strictfp|super|switch|synchronized|this|throw|throws|to|transient|transitive|try|uses|var|void|volatile|while|with|yield)\b/, n = /(?:[a-z]\w*\s*\.\s*)*(?:[A-Z]\w*\s*\.\s*)*/.source, r = {
2708pattern: RegExp(/(^|[^\w.])/.source + n + /[A-Z](?:[\d_A-Z]*[a-z]\w*)?\b/.source),
2709lookbehind: !0,
2710inside: {
2711namespace: {
2712pattern: /^[a-z]\w*(?:\s*\.\s*[a-z]\w*)*(?:\s*\.)?/,
2713inside: {
2714punctuation: /\./
2715}
2716},
2717punctuation: /\./
2718}
2719};
2720e.languages.java = e.languages.extend("clike", {
2721string: {
2722pattern: /(^|[^\\])"(?:\\.|[^"\\\r\n])*"/,
2723lookbehind: !0,
2724greedy: !0
2725},
2726"class-name": [ r, {
2727pattern: RegExp(/(^|[^\w.])/.source + n + /[A-Z]\w*(?=\s+\w+\s*[;,=()]|\s*(?:\[[\s,]*\]\s*)?::\s*new\b)/.source),
2728lookbehind: !0,
2729inside: r.inside
2730}, {
2731pattern: RegExp(/(\b(?:class|enum|extends|implements|instanceof|interface|new|record|throws)\s+)/.source + n + /[A-Z]\w*\b/.source),
2732lookbehind: !0,
2733inside: r.inside
2734} ],
2735keyword: t,
2736function: [ e.languages.clike.function, {
vendor: 2,687 bytes, lines 2737-2806
2737pattern: /(::\s*)[a-z_]\w*/,
2738lookbehind: !0
2739} ],
2740number: /\b0b[01][01_]*L?\b|\b0x(?:\.[\da-f_p+-]+|[\da-f_]+(?:\.[\da-f_p+-]+)?)\b|(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.\d[\d_]*)(?:e[+-]?\d[\d_]*)?[dfl]?/i,
2741operator: {
2742pattern: /(^|[^.])(?:<<=?|>>>?=?|->|--|\+\+|&&|\|\||::|[?:~]|[-+*/%&|^!=<>]=?)/m,
2743lookbehind: !0
2744},
2745constant: /\b[A-Z][A-Z_\d]+\b/
2746}), e.languages.insertBefore("java", "string", {
2747"triple-quoted-string": {
2748pattern: /"""[ \t]*[\r\n](?:(?:"|"")?(?:\\.|[^"\\]))*"""/,
2749greedy: !0,
2750alias: "string"
2751},
2752char: {
2753pattern: /'(?:\\.|[^'\\\r\n]){1,6}'/,
2754greedy: !0
2755}
2756}), e.languages.insertBefore("java", "class-name", {
2757annotation: {
2758pattern: /(^|[^.])@\w+(?:\s*\.\s*\w+)*/,
2759lookbehind: !0,
2760alias: "punctuation"
2761},
2762generics: {
2763pattern: /<(?:[\w\s,.?]|&(?!&)|<(?:[\w\s,.?]|&(?!&)|<(?:[\w\s,.?]|&(?!&)|<(?:[\w\s,.?]|&(?!&))*>)*>)*>)*>/,
2764inside: {
2765"class-name": r,
2766keyword: t,
2767punctuation: /[<>(),.:]/,
2768operator: /[?&|]/
2769}
2770},
2771import: [ {
2772pattern: RegExp(/(\bimport\s+)/.source + n + /(?:[A-Z]\w*|\*)(?=\s*;)/.source),
2773lookbehind: !0,
2774inside: {
2775namespace: r.inside.namespace,
2776punctuation: /\./,
2777operator: /\*/,
2778"class-name": /\w+/
2779}
2780}, {
2781pattern: RegExp(/(\bimport\s+static\s+)/.source + n + /(?:\w+|\*)(?=\s*;)/.source),
2782lookbehind: !0,
2783alias: "static",
2784inside: {
2785namespace: r.inside.namespace,
2786static: /\b\w+$/,
2787punctuation: /\./,
2788operator: /\*/,
2789"class-name": /\w+/
2790}
2791} ],
2792namespace: {
2793pattern: RegExp(/(\b(?:exports|import(?:\s+static)?|module|open|opens|package|provides|requires|to|transitive|uses|with)\s+)(?!<keyword>)[a-z]\w*(?:\.[a-z]\w*)*\.?/.source.replace(/<keyword>/g, function() {
2794return t.source;
2795})),
2796lookbehind: !0,
2797inside: {
2798punctuation: /\./
2799}
2800}
2801});
2802}(Prism);
2803},
28047022: function(e, t) {
2805!function(e) {
2806var t = "\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_
2806CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\b", n = {
2807pattern: /(^(["']?)\w+\2)[ \t]+\S.*/,
2808lookbehind: !0,
2809alias: "punctuation",
2810inside: null
2811}, r = {
2812bash: n,
2813environment: {
2814pattern: RegExp("\\$" + t),
2815alias: "constant"
2816},
2817variable: [ {
2818pattern: /\$?\(\([\s\S]+?\)\)/,
2819greedy: !0,
2820inside: {
2821variable: [ {
2822pattern: /(^\$\(\([\s\S]+)\)\)/,
2823lookbehind: !0
2824}, /^\$\(\(/ ],
2825number: /\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee]-?\d+)?/,
2826operator: /--|\+\+|\*\*=?|<<=?|>>=?|&&|\|\||[=!+\-*/%<>^&|]=?|[?~:]/,
2827punctuation: /\(\(?|\)\)?|,|;/
2828}
2829}, {
2830pattern: /\$\((?:\([^)]+\)|[^()])+\)|`[^`]+`/,
2831greedy: !0,
2832inside: {
2833variable: /^\$\(|^`|\)$|`$/
2834}
2835}, {
2836pattern: /\$\{[^}]+\}/,
2837greedy: !0,
2838inside: {
2839operator: /:[-=?+]?|[!\/]|##?|%%?|\^\^?|,,?/,
2840punctuation: /[\[\]]/,
2841environment: {
2842pattern: RegExp("(\\{)" + t),
2843lookbehind: !0,
2844alias: "constant"
2845}
2846}
2847}, /\$(?:\w+|[#?*!@$])/ ],
2848entity: /\\(?:[abceEfnrtv\\"]|O?[0-7]{1,3}|U[0-9a-fA-F]{8}|u[0-9a-fA-F]{4}|x[0-9a-fA-F]{1,2})/
2849};
2850e.languages.bash = {
2851shebang: {
2852pattern: /^#!\s*\/.*/,
2853alias: "important"
2854},
2855comment: {
2856pattern: /(^|[^"{\\$])#.*/,
2857lookbehind: !0
2858},
2859"function-name": [ {
2860pattern: /(\bfunction\s+)[\w-]+(?=(?:\s*\(?:\s*\))?\s*\{)/,
2861lookbehind: !0,
2862alias: "function"
2863}, {
2864pattern: /\b[\w-]+(?=\s*\(\s*\)\s*\{)/,
2865alias: "function"
2866} ],
2867"for-or-select": {
2868pattern: /(\b(?:for|select)\s+)\w+(?=\s+in\s)/,
2869alias: "variable",
2870lookbehind: !0
2871},
2872"assign-left": {
2873pattern: /(^|[\s;|&]|[<>]\()\w+(?:\.\w+)*(?=\+?=)/,
2874inside: {
2875environment: {
2876pattern: RegExp("(^|[\\s;|&]|[<>]\\()" + t),
2877lookbehind: !0,
2878alias: "constant"
2879}
2880},
2881alias: "variable",
2882lookbehind: !0
2883},
2884parameter: {
2885pattern: /(^|\s)-{1,2}(?:\w+:[+-]?)?\w+(?:\.\w+)*(?=[=\s]|$)/,
2886alias: "variable",
2887lookbehind: !0
2888},
2889string: [ {
2890pattern: /((?:^|[^<])<<-?\s*)(\w+)\s[\s\S]*?(?:\r?\n|\r)\2/,
2891lookbehind: !0,
2892greedy: !0,
2893inside: r
2894}, {
2895pattern: /((?:^|[^<])<<-?\s*)(["'])(\w+)\2\s[\s\S]*?(?:\r?\n|\r)\3/,
2896lookbehind: !0,
2897greedy: !0,
2898inside: {
2899bash: n
2900}
2901}, {
2902pattern: /(^|[^\\](?:\\\\)*)"(?:\\[\s\S]|\$\([^)]+\)|\$(?!\()|`[^`]+`|[^"\\`$])*"/,
2903lookbehind: !0,
2904greedy: !0,
2905inside: r
2906}, {
2907pattern: /(^|[^$\\])'[^']*'/,
2908lookbehind: !0,
2909greedy: !0
2910}, {
2911pattern: /\$'(?:[^'\\]|\\[\s\S])*'/,
2912greedy: !0,
2913inside: {
2914entity: r.entity
2915}
2916} ],
2917environment: {
2918pattern: RegExp("\\$?" + t),
2919alias: "constant"
2920},
2921variable: r.variable,
2922function: {
2923pattern: /(^|[\s;|&]|[<>]\()(?:add|apropos|apt|apt-cache|apt-get|aptitude|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cargo|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|composer|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|docker|docker-compose|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|java|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|node|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|podman|podman-compose|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|sysctl|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vcpkg|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\s;|&])/,
2924lookbehind: !0
2925},
2926keyword: {
2927pattern: /(^|[\s;|&]|[<>]\()(?:case|do|done|elif|else|esac|fi|for|function|if|in|select|then|until|while)(?=$|[)\s;|&])/,
2928lookbehind: !0
2929},
2930builtin: {
2931pattern: /(^|[\s;|&]|[<>]\()(?:\.|:|alias|bind|break|builtin|caller|cd|command|continue|declare|echo|enable|eval|exec|exit|export|getopts|hash|help|let|local|logout|mapfile|printf|pwd|read|readarray|readonly|return|set|shift|shopt|source|test|times|trap|type|typeset|ulimit|umask|unalias|unset)(?=$|[)\s;|&])/,
2932lookbehind: !0,
2933alias: "class-name"
2934},
2935boolean: {
2936pattern: /(^|[\s;|&]|[<>]\()(?:false|true)(?=$|[)\s;|&])/,
2937lookbehind: !0
2938},
2939"file-descriptor": {
2940pattern: /\B&\d\b/,
2941alias: "important"
2942},
2943operator: {
2944pattern: /\d?<>|>\||\+=|=[=~]?|!=?|<<[<-]?|[&\d]?>>|\d[<>]&?|[<>][&=]?|&[>&]?|\|[&|]?/,
2945inside: {
2946"file-descriptor": {
2947pattern: /^\d/,
2948alias: "important"
2949}
2950}
2951},
2952punctuation: /\$?\(\(?|\)\)?|\.\.|[{}[\];\\]/,
2953number: {
2954pattern: /(^|\s)(?:[1-9]\d*|0)(?:[.,]\d+)?\b/,
2955lookbehind: !0
2956}
2957}, n.inside = e.languages.bash;
2958for (var i = [ "comment", "function-name", "for-or-select", "assign-left", "parameter", "string", "environment", "function", "keyword", "builtin", "boolean", "file-descriptor", "operator", "punctuation", "number" ], o = r.variable[1].inside, s = 0; s < i.length; s++) o[i[s]] = e.languages.bash[i[s]];
2959e.languages.sh = e.languages.bash, e.languages.shell = e.languages.bash;
2960}(Prism);
2961},
29627200: function(e, t, n) {
2963var r = n(9591), i = n(3667);
2964e.exports = function(e, t, n) {
2965var o = !0, s = !0;
2966if ("function" != typeof e) throw new TypeError("Expected a function");
2967return i(n) && (o = "leading" in n ? !!n.leading : o, s = "trailing" in n ? !!n.trailing : s), 
2968r(e, t, {
2969leading: o,
2970maxWait: t,
2971trailing: s
2972});
2973};
2974},
29757726: function(e, t, n) {
2976var r = "object" == typeof n.g && n.g && n.g.Object === Object && n.g;
2977e.exports = r;
2978},
29797746: function(e, t, n) {
2980let r = n(2684);
2981function i(e, t) {
2982try {
2983(e.contentDocument || e.contentWindow.document).body;
2984} catch (e) {
2985return;
2986}
2987let n = setTimeout(function() {
2988t(new Error("timeout"));
2989}, 500);
2990function i(e, r) {
2991clearTimeout(n), t(e, r);
2992}
2993if (!e.offsetWidth) {
2994let t = e.cloneNode(!0);
2995return t.name = "", t.style.height = "50px", t.style.position = "absolute", t.style.display = "block", 
2996t.style.top = "10000px", t.onload = function() {
2997let n = r(this.contentDocument);
2998e.style.display = "block", t.remove(), i(null, n);
2999}, void document.body.appendChild(t);
3000}
3001e.style.display = "block", e.style.height = "1px";
3002let o = r(e.contentDocument);
3003e.style.height = "", i(null, o);
3004}
3005i.async = function(e, t) {
3006setTimeout(function() {
3007i(e, t);
3008}, 0);
3009}, e.exports = i;
3010},
30118060: function(e) {
3012e.exports = function(e) {
3013let t, n = 1 + e.split("\n").length, r = new Array(n);
3014return r = r.join("<span></span>"), t = `<span class="line-numbers-rows">${r}</span>`, 
3015t;
3016};
3017},
30188679: function(e, t, n) {
3019"use strict";
3020var r = n(5304), i = n(6532);
3021function o(e) {
3022return Object.prototype.toString.call(e);
3023}
3024function s(e) {
3025return "[object String]" === o(e);
3026}
3027function a(e) {
3028return !isNaN(e) && isFinite(e);
3029}
3030function l(e) {
3031return !0 === e || !1 === e;
3032}
3033function c(e) {
3034return "[object Object]" === o(e);
3035}
3036var u = Array.isArray || function(e) {
3037return "[object Array]" === o(e);
3038}, d = Array.prototype.forEach;
3039function p(e, t, n) {
3040if (null !== e) if (d && e.forEach === d) e.forEach(t, n); else if (e.length === +e.length) for (var r = 0, i = e.length; r < i; r += 1) t.call(n, e[r], r, e); else for (var o in e) Object.prototype.hasOwnProperty.call(e, o) && t.call(n, e[o
3040], o, e);
3041}
3042var h = /%[sdj%]/g;
3043function f(e) {
3044var t = 1, n = arguments, r = n.length;
3045return String(e).replace(h, function(e) {
3046if ("%%" === e) return "%";
3047if (t >= r) return e;
3048switch (e) {
3049case "%s":
3050return String(n[t++]);
3051
3052case "%d":
3053return Number(n[t++]);
3054
3055case "%j":
3056return JSON.stringify(n[t++]);
3057
3058default:
3059return e;
3060}
3061});
3062}
3063function m(e) {
3064var t = {};
3065return p(e || {}, function(e, n) {
3066e && "object" == typeof e ? p(m(e), function(e, r) {
3067t[n + "." + r] = e;
3068}) : t[n] = e;
3069}), t;
3070}
3071var g = "#@$";
3072function E(e, t) {
3073return e + g + t;
3074}
3075function b(e, t, n) {
3076var r = E(t, n), i = e._storage;
3077if (i.hasOwnProperty(r)) return r;
3078if (t === e._defaultLocale) return null;
3079var o = e._fallbacks_cache;
3080if (o.hasOwnProperty(r)) return o[r];
3081for (var s, a = e._fallbacks[t] || [ e._defaultLocale ], l = 0, c = a.length; l < c; l++) if (s = E(a[l], n), 
3082i.hasOwnProperty(s)) return o[r] = s, o[r];
3083return o[r] = null, null;
3084}
3085function T(e, t, n) {
3086var r = i.indexOf(e, t);
3087return -1 === r ? f('[pluralizer for "%s" locale not found]', e) : void 0 === n[r] ? f('[plural form %d ("%s") not found in translation]', r, i.forms(e)[r]) : n[r];
3088}
3089function v(e) {
3090if (!(this instanceof v)) return new v(e);
3091this._defaultLocale = e ? String(e) : "en", this._fallbacks = {}, this._fallbacks_cache = {}, 
3092this._storage = {}, this._plurals_cache = {};
3093}
3094v.prototype.addPhrase = function(e, t, n, r) {
3095var i, o = this;
3096if (l(r)) i = r ? 1 / 0 : 0; else if (a(r)) {
3097if ((i = Math.floor(r)) < 0) throw new TypeError("Invalid flatten level (should be >= 0).");
3098} else i = 1 / 0;
3099if (c(n) && i > 0) return p(n, function(n, r) {
3100o.addPhrase(e, (t ? t + "." : "") + r, n, i - 1);
3101}), this;
3102if (s(n)) this._storage[E(e, t)] = {
3103translation: n,
3104locale: e,
3105raw: !1
3106}; else {
3107if (!(u(n) || a(n) || l(n) || 0 === i && c(n))) throw new TypeError("Invalid translation - [String|Object|Array|Number|Boolean] expected.");
3108this._storage[E(e, t)] = {
3109translation: n,
3110locale: e,
3111raw: !0
3112};
3113}
3114return o._fallbacks_cache = {}, this;
3115}, v.prototype.setFallback = function(e, t) {
3116var n = this._defaultLocale;
3117if (n === e) throw new Error("Default locale can't have fallbacks");
3118var r = u(t) ? t.slice() : [ t ];
3119return r[r.length - 1] !== n && r.push(n), this._fallbacks[e] = r, this._fallbacks_cache = {}, 
3120this;
3121};
3122var S = /#\{|\(\(|\\\\/;
3123v.prototype.translate = function(e, t, n) {
3124var i, l = b(this, e, t);
3125return l ? (i = this._storage[l]).raw ? i.translation : (i.hasOwnProperty("compiled") || (i.compiled = function(e, t, n) {
3126var i, o, s, a, l, c;
3127return S.test(t) ? 1 === (i = r.parse(t)).length && "literal" === i[0].type ? i[0].text : (e._plurals_cache[n] || (e._plurals_cache[n] = new v(n)), 
3128c = e._plurals_cache[n], (o = []).push([ 'var str = "", strict, strict_exec, forms, forms_exec, plrl, cache, loc, loc_plzr, anchor;' ]), 
3129o.push("params = flatten(params);"), p(i, function(e) {
3130if ("literal" !== e.type) {
3131if ("variable" === e.type) return s = e.anchor, void o.push(f('str += ("undefined" === typeof (params[%j])) ? "[missed variable: %s]" : params[%j];', s, s, s));
3132if ("plural" !== e.type) throw new Error("Unknown node type");
3133s = e.anchor, a = {}, p(e.strict, function(t, i) {
3134var o = r.parse(t);
3135if (1 === o.length && "literal" === o[0].type) return a[i] = !1, void (e.strict[i] = o[0].text);
3136a[i] = !0, c.hasPhrase(n, t, !0) || c.addPhrase(n, t, t);
3137}), l = {}, p(e.forms, function(t, i) {
3138var o, s = r.parse(t);
3139if (1 === s.length && "literal" === s[0].type) return o = s[0].text, e.forms[i] = o, 
3140void (l[o] = !1);
3141l[t] = !0, c.hasPhrase(n, t, !0) || c.addPhrase(n, t, t);
3142}), o.push(f("loc = %j;", n)), o.push(f("loc_plzr = %j;", n.split(/[-_]/)[0])), 
3143o.push(f("anchor = params[%j];", s)), o.push(f("cache = this._plurals_cache[loc];")), 
3144o.push(f("strict = %j;", e.strict)), o.push(f("strict_exec = %j;", a)), o.push(f("forms = %j;", e.forms)), 
3145o.push(f("forms_exec = %j;", l)), o.push("if (+(anchor) != anchor) {"), o.push(f('  str += "[invalid plurals amount: %s(" + anchor + ")]";', s)), 
3146o.push("} else {"), o.push("  if (strict[anchor] !== undefined) {"), o.push("    plrl = strict[anchor];"), 
3147o.push("    str += strict_exec[anchor] ? cache.t(loc, plrl, params) : plrl;"), o.push("  } else {"), 
3148o.push("    plrl = pluralizer(loc_plzr, +anchor, forms);"), o.push("    str += forms_exec[plrl] ? cache.t(loc, plrl, params) : plrl;"), 
3149o.push("  }"), o.push("}");
3150} else o.push(f("str += %j;", e.text));
3151}), o.push("return str;"), new Function("params", "flatten", "pluralizer", o.join("\n"))) : t;
3152}(this, i.translation, i.locale)), "[object Function]" !== o(i.compiled) ? i.compiled : ((a(n) || s(n)) && (n = {
3153count: n,
3154value: n
3155}), i.compiled.call(this, n, m, T))) : e + ": No translation for [" + t + "]";
3156}, v.prototype.hasPhrase = function(e, t, n) {
3157return n ? this._storage.hasOwnProperty(E(e, t)) : !!b(this, e, t);
3158}, v.prototype.getLocale = function(e, t, n) {
3159if (n) return this._storage.hasOwnProperty(E(e, t)) ? e : null;
3160var r = b(this, e, t);
3161return r ? r.split(g, 2)[0] : null;
3162}, v.prototype.t = v.prototype.translate, v.prototype.stringify = function(e) {
3163var t = this, n = {};
3164p(this._storage, function(e, t) {
3165n[t.split(g)[1]] = !0;
3166});
3167var r = {};
3168p(n, function(n, i) {
3169var o = b(t, e, i);
3170if (o) {
3171var s = t._storage[o].locale;
3172r[s] || (r[s] = {}), r[s][i] = t._storage[o].translation;
3173}
3174});
3175var i = {
3176fallback: {},
3177locales: r
3178}, o = (t._fallbacks[e] || []).slice(0, -1);
3179return o.length && (i.fallback[e] = o), JSON.stringify(i);
3180}, v.prototype.load = function(e) {
3181var t = this;
3182return s(e) && (e = JSON.parse(e)), p(e.locales, function(e, n) {
3183p(e, function(e, r) {
3184t.addPhrase(n, r, e, 0);
3185});
3186}), p(e.fallback, function(e, n) {
3187t.setFallback(n, e);
3188}), this;
3189}, e.exports = v;
3190},
31918849: function(e) {
3192e.exports = function(e, t) {
3193let n, r, i = !1;
3194return function o() {
3195if (i) return n = arguments, void (r = this);
3196e.apply(this, arguments), i = !0, setTimeout(() => {
3197i = !1, n && (o.apply(r, n), n = r = null);
3198}, t);
3199};
3200};
3201},
32028944: function(e) {
3203function t(e) {
3204if (e = e || {}, this.elem = e.elem, this.size = e.size || "medium", this.class = e.class ? " " + e.class : "", 
3205this.elemClass = e.elemClass, "medium" != this.size && "small" != this.size && "large" != this.size) throw new Error("Unsupported size: " + this.size);
3206this.elem || (this.elem = document.createElement("div"));
3207}
3208t.prototype.start = function() {
3209this.elemClass && this.elem.classList.toggle(this.elemClass), this.elem.insertAdjacentHTML("beforeend", '<span class="spinner spinner_active spinner_' + this.size + this.class + '"><span class="spinner__dot spinner__dot_1"></span><span class="spinner__dot spinner__dot_2"></span><span class="spinner__dot spinner__dot_3"></span></span>');
3210}, t.prototype.stop = function() {
3211let e = this.elem.querySelector(".spinner");
3212e && (e.remove(), this.elemClass && this.elem.classList.toggle(this.elemClass));
3213}, window.Spinner = t, e.exports = t;
3214},
32159006: function(e, t, n) {
3216var r = n(9474), i = /^\s+/;
3217e.exports = function(e) {
3218return e ? e.slice(0, r(e) + 1).replace(i, "") : e;
3219};
3220},
32219374: function(e, t, n) {
3222"use strict";
3223n.r(t), t.default = {
3224output: "OUTPUT"
3225};
3226},
32279474: function(e) {
3228var t = /\s/;
3229e.exports = function(e) {
3230for (var n = e.length; n-- && t.test(e.charAt(n)); ) ;
3231return n;
3232};
3233},
32349516: function(e) {
3235e.exports = function(e) {
3236if (!e || !e.length) return "";
3237let t = [];
3238for (let n of e) {
3239let e = `<code class="block-highlight${n.cols ? " block-highlight_inline" : ""}" data-start="${n.start}">`;
3240if (e += "\n".repeat(n.start), n.end) e += `<code class="mask">${"\n".repeat(n.end - n.start + 1)}</code>`; else if (n.cols) for (let t = 0; t < n.cols.length; t++) {
3241let r = n.cols[t], i = 0 === t ? null : n.cols[t - 1];
3242e += " ".repeat(i ? r.start - i.end : r.start), e += `<code class="mask-inline">${" ".repeat(r.end - r.start)}</code>`;
3243}
3244e += "</code>
3244", t.push(e);
3245}
3246return t.join("");
3247};
3248},
32499591: function(e, t, n) {
3250var r = n(3667), i = n(1486), o = n(1552), s = Math.max, a = Math.min;
3251e.exports = function(e, t, n) {
3252var l, c, u, d, p, h, f = 0, m = !1, g = !1, E = !0;
3253if ("function" != typeof e) throw new TypeError("Expected a function");
3254function b(t) {
3255var n = l, r = c;
3256return l = c = void 0, f = t, d = e.apply(r, n);
3257}
3258function T(e) {
3259var n = e - h;
3260return void 0 === h || n >= t || n < 0 || g && e - f >= u;
3261}
3262function v() {
3263var e = i();
3264if (T(e)) return S(e);
3265p = setTimeout(v, function(e) {
3266var n = t - (e - h);
3267return g ? a(n, u - (e - f)) : n;
3268}(e));
3269}
3270function S(e) {
3271return p = void 0, E && l ? b(e) : (l = c = void 0, d);
3272}
3273function _() {
3274var e = i(), n = T(e);
3275if (l = arguments, c = this, h = e, n) {
3276if (void 0 === p) return function(e) {
3277return f = e, p = setTimeout(v, t), m ? b(e) : d;
3278}(h);
3279if (g) return clearTimeout(p), p = setTimeout(v, t), b(h);
3280}
3281return void 0 === p && (p = setTimeout(v, t)), d;
3282}
3283return t = o(t) || 0, r(n) && (m = !!n.leading, u = (g = "maxWait" in n) ? s(o(n.maxWait) || 0, t) : u, 
3284E = "trailing" in n ? !!n.trailing : E), _.cancel = function() {
3285void 0 !== p && clearTimeout(p), f = 0, l = h = c = p = void 0;
3286}, _.flush = function() {
3287return void 0 === p ? d : S(i());
3288}, _;
3289};
3290},
32919907: function(e) {
3292e.exports = {
3293lang: "en",
3294localCurrency: "EUR",
3295shopCurrency: "EUR",
3296env: "production",
3297rateShopTo: void 0,
3298countryCode,
3299ordersMail: "[email protected]",
3300providers: [ {
3301name: "Github",
3302id: "github"
3303}, {
3304name: "Discord",
3305id: "discord"
3306}, {
3307name: "Facebook",
3308id: "facebook"
3309}, {
3310name: "Google",
3311id: "google"
3312} ],
3313stripeKey: "pk_live_51HXm0nFjeNqw1p5a3mjFxSeNHh8OL94IyGcp3PHbZVoNuYUYjlM57YtZMIAM1zrEd1F6WIKfFs67KbTemRdNIySo00KfWS1yhr",
3314paypalClientId: "Ac86EanyVr7jcO5a_EwTK2vg1MGguuNX27jI4oC120g8xLMuAKmayooEcpc-mODQd4Gsmm7yqA1C7NM-",
3315telegramBotId: 7532264140,
3316lookatCodeUrlBase: "https://lookatcode.com",
3317isRTL: void 0
3318};
3319}
3320}, __webpack_module_cache__ = {};
3321function __webpack_require__(e) {
3322var t = __webpack_module_cache__[e];
3323if (void 0 !== t) return t.exports;
3324var n = __webpack_module_cache__[e] = {
3325exports: {}
3326};
3327return __webpack_modules__[e].call(n.exports, n, n.exports, __webpack_require__), 
3328n.exports;
3329}
3330__webpack_require__.d = function(e, t) {
3331for (var n in t) __webpack_require__.o(t, n) && !__webpack_require__.o(e, n) && Object.defineProperty(e, n, {
3332enumerable: !0,
3333get: t[n]
3334});
3335}, __webpack_require__.g = function() {
3336if ("object" == typeof globalThis) return globalThis;
3337try {
3338return this || new Function("return this")();
3339} catch (e) {
3340if ("object" == typeof window) return window;
3341}
3342}(), __webpack_require__.o = function(e, t) {
3343return Object.prototype.hasOwnProperty.call(e, t);
3344}, __webpack_require__.r = function(e) {
3345"undefined" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(e, Symbol.toStringTag, {
3346value: "Module"
3347}), Object.defineProperty(e, "__esModule", {
3348value: !0
3349});
3350};
3351var __webpack_exports__ = {};
3352!function() {
3353const delegate = __webpack_require__(3102), prism = __webpack_require__(5566), ItemSlider = __webpack_require__(1623);
3354function init() {
3355initTaskButtons(), initFolderList(), initViewMoreButton(), initCoursesSlider(), 
3356prism.init();
3357}
3358function initTaskButtons() {
3359delegate(document, ".task__solution", "click", function(e) {
3360e.target.closest(".task").classList.toggle("task_answer_open");
3361}), delegate(document, ".task__answer-close", "click", function(e) {
3362e.target.closest(".task").classList.toggle("task_answer_open");
3363}), delegate(document, ".task__step-show", "click", function(e) {
3364e.target.closest(".task__step").classList.toggle("task_step_open");
3365});
3366}
3367function initViewMoreButton() {
3368delegate(document, "a.list-sub__more", "click", function(e) {
3369e.preventDefault();
3370const t = e.target;
3371for (let e of t.closest(".list-sub").querySelectorAll(".list-sub__item_phone_hidden")) e.classList.remove("list-sub__item_phone_hidden");
3372t.style.display = "none";
3373});
3374}
3375function initFolderList() {
3376delegate(document, ".lessons-list__lesson_level_1 > .lessons-list__link", "click", function(e) {
3377let t = e.delegateTarget, n = t.closest(".lessons-list").querySelector(".lessons-list__lesson_open");
3378n && n !== t.parentNode && n.classList.remove("lessons-list__lesson_open"), t.parentNode.classList.toggle("lessons-list__lesson_open"), 
3379e.preventDefault();
3380});
3381}
3382function initCoursesSlider() {
3383const e = document.querySelector("[data-courses-slider]");
3384e && new ItemSlider({
3385el: e,
3386class: "slider_frontpage"
3387});
3388}
3389window.runDemo = function(button) {
3390let demoElem, parent = button;
3391for (;(parent = parent.parentElement) && (demoElem = parent.querySelector("[data-demo]"), 
3392!demoElem); ) ;
3393demoElem ? eval(demoElem.textContent) : alert("Error, no demo element");
3394}, init();
3395}(), function() {
3396let e = __webpack_require__(6127), t = __webpack_require__(2924), n = __webpack_require__(3102);
3397function r() {
3398/[&?]map\b/.test(location.href) || window.history.replaceState(null, null, ~location.href.indexOf("?") ? location.href + "&map" : location.href + "?map"), 
3399(new e).elem.addEventListener("tutorial-map-remove", () => {
3400window.history.replaceState(null, null, location.href.replace(/[&?]map\b/, ""));
3401});
3402}
3403!function() {
3404n(document, '[data-action="tutorial-map"]', "click", e => {
34051 === e.which && (e.preventDefault(), r());
3406});
3407let e = document.querySelector(".tutorial-map");
3408e ? new t(e) : /[&?]map\b/.test(location.href) && r();
3409}();
3410}(), tutorial = __webpack_exports__;
3411})();
3412//# sourceMappingURL=tutorial.4b5752675459006b4b6e.js.map

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.