From 88d4beb68b304ea04bdafdb999c39be10d3f954a Mon Sep 17 00:00:00 2001 From: Nippy Date: Sat, 19 Sep 2026 15:40:27 +0200 Subject: fix profiles --- .../5.5.2.40_0/pages/assistant-inject.js | 11127 + .../5.5.2.40_0/pages/background.js | 208132 ++++++++++++++++++ .../5.5.2.40_0/pages/blocking/blocked.html | 1605 + .../5.5.2.40_0/pages/blocking/blocked.js | 10846 + .../5.5.2.40_0/pages/content-script-end.js | 1870 + .../5.5.2.40_0/pages/content-script-start.js | 14827 ++ .../pages/devtools-elements-sidebar.html | 42 + .../5.5.2.40_0/pages/devtools-elements-sidebar.js | 3746 + .../5.5.2.40_0/pages/devtools.html | 1 + .../5.5.2.40_0/pages/devtools.js | 1263 + .../5.5.2.40_0/pages/filtering-log.html | 6 + .../5.5.2.40_0/pages/filtering-log.js | 51847 +++++ .../5.5.2.40_0/pages/fullscreen-user-rules.html | 15 + .../5.5.2.40_0/pages/fullscreen-user-rules.js | 13241 ++ .../5.5.2.40_0/pages/gpc.js | 133 + .../5.5.2.40_0/pages/hide-document-referrer.js | 133 + .../5.5.2.40_0/pages/import-configuration.js | 3541 + .../5.5.2.40_0/pages/options.html | 6 + .../5.5.2.40_0/pages/options.js | 33591 +++ .../5.5.2.40_0/pages/popup.html | 6 + .../5.5.2.40_0/pages/popup.js | 47212 ++++ .../5.5.2.40_0/pages/post-install.html | 26 + .../5.5.2.40_0/pages/post-install.js | 7639 + .../5.5.2.40_0/pages/subscribe.js | 3693 + .../5.5.2.40_0/pages/thankyou.js | 9169 + 25 files changed, 423717 insertions(+) create mode 100644 raveos-app-installer/data/configs/vivaldi/Default/Extensions/bgnkhhnnamicmpeenaelnjfhikgbkllg/5.5.2.40_0/pages/assistant-inject.js create mode 100644 raveos-app-installer/data/configs/vivaldi/Default/Extensions/bgnkhhnnamicmpeenaelnjfhikgbkllg/5.5.2.40_0/pages/background.js create mode 100644 raveos-app-installer/data/configs/vivaldi/Default/Extensions/bgnkhhnnamicmpeenaelnjfhikgbkllg/5.5.2.40_0/pages/blocking/blocked.html create mode 100644 raveos-app-installer/data/configs/vivaldi/Default/Extensions/bgnkhhnnamicmpeenaelnjfhikgbkllg/5.5.2.40_0/pages/blocking/blocked.js create mode 100644 raveos-app-installer/data/configs/vivaldi/Default/Extensions/bgnkhhnnamicmpeenaelnjfhikgbkllg/5.5.2.40_0/pages/content-script-end.js create mode 100644 raveos-app-installer/data/configs/vivaldi/Default/Extensions/bgnkhhnnamicmpeenaelnjfhikgbkllg/5.5.2.40_0/pages/content-script-start.js create mode 100644 raveos-app-installer/data/configs/vivaldi/Default/Extensions/bgnkhhnnamicmpeenaelnjfhikgbkllg/5.5.2.40_0/pages/devtools-elements-sidebar.html create mode 100644 raveos-app-installer/data/configs/vivaldi/Default/Extensions/bgnkhhnnamicmpeenaelnjfhikgbkllg/5.5.2.40_0/pages/devtools-elements-sidebar.js create mode 100644 raveos-app-installer/data/configs/vivaldi/Default/Extensions/bgnkhhnnamicmpeenaelnjfhikgbkllg/5.5.2.40_0/pages/devtools.html create mode 100644 raveos-app-installer/data/configs/vivaldi/Default/Extensions/bgnkhhnnamicmpeenaelnjfhikgbkllg/5.5.2.40_0/pages/devtools.js create mode 100644 raveos-app-installer/data/configs/vivaldi/Default/Extensions/bgnkhhnnamicmpeenaelnjfhikgbkllg/5.5.2.40_0/pages/filtering-log.html create mode 100644 raveos-app-installer/data/configs/vivaldi/Default/Extensions/bgnkhhnnamicmpeenaelnjfhikgbkllg/5.5.2.40_0/pages/filtering-log.js create mode 100644 raveos-app-installer/data/configs/vivaldi/Default/Extensions/bgnkhhnnamicmpeenaelnjfhikgbkllg/5.5.2.40_0/pages/fullscreen-user-rules.html create mode 100644 raveos-app-installer/data/configs/vivaldi/Default/Extensions/bgnkhhnnamicmpeenaelnjfhikgbkllg/5.5.2.40_0/pages/fullscreen-user-rules.js create mode 100644 raveos-app-installer/data/configs/vivaldi/Default/Extensions/bgnkhhnnamicmpeenaelnjfhikgbkllg/5.5.2.40_0/pages/gpc.js create mode 100644 raveos-app-installer/data/configs/vivaldi/Default/Extensions/bgnkhhnnamicmpeenaelnjfhikgbkllg/5.5.2.40_0/pages/hide-document-referrer.js create mode 100644 raveos-app-installer/data/configs/vivaldi/Default/Extensions/bgnkhhnnamicmpeenaelnjfhikgbkllg/5.5.2.40_0/pages/import-configuration.js create mode 100644 raveos-app-installer/data/configs/vivaldi/Default/Extensions/bgnkhhnnamicmpeenaelnjfhikgbkllg/5.5.2.40_0/pages/options.html create mode 100644 raveos-app-installer/data/configs/vivaldi/Default/Extensions/bgnkhhnnamicmpeenaelnjfhikgbkllg/5.5.2.40_0/pages/options.js create mode 100644 raveos-app-installer/data/configs/vivaldi/Default/Extensions/bgnkhhnnamicmpeenaelnjfhikgbkllg/5.5.2.40_0/pages/popup.html create mode 100644 raveos-app-installer/data/configs/vivaldi/Default/Extensions/bgnkhhnnamicmpeenaelnjfhikgbkllg/5.5.2.40_0/pages/popup.js create mode 100644 raveos-app-installer/data/configs/vivaldi/Default/Extensions/bgnkhhnnamicmpeenaelnjfhikgbkllg/5.5.2.40_0/pages/post-install.html create mode 100644 raveos-app-installer/data/configs/vivaldi/Default/Extensions/bgnkhhnnamicmpeenaelnjfhikgbkllg/5.5.2.40_0/pages/post-install.js create mode 100644 raveos-app-installer/data/configs/vivaldi/Default/Extensions/bgnkhhnnamicmpeenaelnjfhikgbkllg/5.5.2.40_0/pages/subscribe.js create mode 100644 raveos-app-installer/data/configs/vivaldi/Default/Extensions/bgnkhhnnamicmpeenaelnjfhikgbkllg/5.5.2.40_0/pages/thankyou.js (limited to 'raveos-app-installer/data/configs/vivaldi/Default/Extensions/bgnkhhnnamicmpeenaelnjfhikgbkllg/5.5.2.40_0/pages') diff --git a/raveos-app-installer/data/configs/vivaldi/Default/Extensions/bgnkhhnnamicmpeenaelnjfhikgbkllg/5.5.2.40_0/pages/assistant-inject.js b/raveos-app-installer/data/configs/vivaldi/Default/Extensions/bgnkhhnnamicmpeenaelnjfhikgbkllg/5.5.2.40_0/pages/assistant-inject.js new file mode 100644 index 0000000..985a359 --- /dev/null +++ b/raveos-app-installer/data/configs/vivaldi/Default/Extensions/bgnkhhnnamicmpeenaelnjfhikgbkllg/5.5.2.40_0/pages/assistant-inject.js @@ -0,0 +1,11127 @@ +(() => { +var __webpack_modules__ = ({ +37190(module) { +/*! + * AdGuard Assistant - v4.4.13 - Thu Jun 25 2026 + * https://github.com/AdguardTeam/AdguardAssistant#adguard-assistant + * Copyright (c) 2026 AdGuard. Licensed GPL-3.0 + */ +(function webpackUniversalModuleDefinition(root, factory) { + if(true) + module.exports = factory(); + else { var i, a } +})(self, () => { +return /******/ (() => { // webpackBootstrap +/******/ var __webpack_modules__ = ({ + +/***/ 5641 +(module, __unused_webpack_exports, __nested_webpack_require_659_678__) { + +var map = { + "./": 8591, + "./ar/messages": 2066, + "./ar/messages.json": 2066, + "./ar/messages.meta": 2993, + "./ar/messages.meta.json": 2993, + "./be/messages": 7500, + "./be/messages.json": 7500, + "./be/messages.meta": 683, + "./be/messages.meta.json": 683, + "./bg/messages": 4134, + "./bg/messages.json": 4134, + "./bg/messages.meta": 6077, + "./bg/messages.meta.json": 6077, + "./ca/messages": 7699, + "./ca/messages.json": 7699, + "./ca/messages.meta": 70, + "./ca/messages.meta.json": 70, + "./cs/messages": 3753, + "./cs/messages.json": 3753, + "./cs/messages.meta": 5972, + "./cs/messages.meta.json": 5972, + "./da/messages": 8626, + "./da/messages.json": 8626, + "./da/messages.meta": 9025, + "./da/messages.meta.json": 9025, + "./de/messages": 5278, + "./de/messages.json": 5278, + "./de/messages.meta": 4005, + "./de/messages.meta.json": 4005, + "./el/messages": 2360, + "./el/messages.json": 2360, + "./el/messages.meta": 495, + "./el/messages.meta.json": 495, + "./en/messages": 6642, + "./en/messages.json": 6642, + "./en/messages.meta": 9921, + "./en/messages.meta.json": 9921, + "./es/messages": 2271, + "./es/messages.json": 2271, + "./es/messages.meta": 4682, + "./es/messages.meta.json": 4682, + "./fa/messages": 356, + "./fa/messages.json": 356, + "./fa/messages.meta": 563, + "./fa/messages.meta.json": 563, + "./fi/messages": 7804, + "./fi/messages.json": 7804, + "./fi/messages.meta": 3787, + "./fi/messages.meta.json": 3787, + "./fr/messages": 9335, + "./fr/messages.json": 9335, + "./fr/messages.meta": 4818, + "./fr/messages.meta.json": 4818, + "./he/messages": 4314, + "./he/messages.json": 4314, + "./he/messages.meta": 7241, + "./he/messages.meta.json": 7241, + "./hi/messages": 8158, + "./hi/messages.json": 8158, + "./hi/messages.meta": 6837, + "./hi/messages.meta.json": 6837, + "./hr/messages": 1733, + "./hr/messages.json": 1733, + "./hr/messages.meta": 1912, + "./hr/messages.meta.json": 1912, + "./hu/messages": 4890, + "./hu/messages.json": 4890, + "./hu/messages.meta": 9097, + "./hu/messages.meta.json": 9097, + "./id/messages": 940, + "./id/messages.json": 940, + "./id/messages.meta": 9083, + "./id/messages.meta.json": 9083, + "./index": 8591, + "./index.js": 8591, + "./it/messages": 5468, + "./it/messages.json": 5468, + "./it/messages.meta": 7579, + "./it/messages.meta.json": 7579, + "./ja/messages": 1080, + "./ja/messages.json": 1080, + "./ja/messages.meta": 9727, + "./ja/messages.meta.json": 9727, + "./ko/messages": 1973, + "./ko/messages.json": 1973, + "./ko/messages.meta": 8008, + "./ko/messages.meta.json": 8008, + "./lt/messages": 1295, + "./lt/messages.json": 1295, + "./lt/messages.meta": 3994, + "./lt/messages.meta.json": 3994, + "./mk/messages": 8463, + "./mk/messages.json": 8463, + "./mk/messages.meta": 234, + "./mk/messages.meta.json": 234, + "./nl/messages": 9841, + "./nl/messages.json": 9841, + "./nl/messages.meta": 796, + "./nl/messages.meta.json": 796, + "./no/messages": 370, + "./no/messages.json": 370, + "./no/messages.meta": 7313, + "./no/messages.meta.json": 7313, + "./pl/messages": 4067, + "./pl/messages.json": 4067, + "./pl/messages.meta": 7382, + "./pl/messages.meta.json": 7382, + "./pt-PT/messages": 6254, + "./pt-PT/messages.json": 6254, + "./pt-PT/messages.meta": 6245, + "./pt-PT/messages.meta.json": 6245, + "./pt/messages": 7435, + "./pt/messages.json": 7435, + "./pt/messages.meta": 7118, + "./pt/messages.meta.json": 7118, + "./ro/messages": 7150, + "./ro/messages.json": 7150, + "./ro/messages.meta": 5797, + "./ro/messages.meta.json": 5797, + "./ru/messages": 1468, + "./ru/messages.json": 1468, + "./ru/messages.meta": 1915, + "./ru/messages.meta.json": 1915, + "./sk/messages": 3377, + "./sk/messages.json": 3377, + "./sk/messages.meta": 3580, + "./sk/messages.meta.json": 3580, + "./sl/messages": 9422, + "./sl/messages.json": 9422, + "./sl/messages.meta": 37, + "./sl/messages.meta.json": 37, + "./sr/messages": 8896, + "./sr/messages.json": 8896, + "./sr/messages.meta": 8983, + "./sr/messages.meta.json": 8983, + "./sv/messages": 6428, + "./sv/messages.json": 6428, + "./sv/messages.meta": 9707, + "./sv/messages.meta.json": 9707, + "./th/messages": 2739, + "./th/messages.json": 2739, + "./th/messages.meta": 3734, + "./th/messages.meta.json": 3734, + "./tr/messages": 1777, + "./tr/messages.json": 1777, + "./tr/messages.meta": 7020, + "./tr/messages.meta.json": 7020, + "./uk/messages": 7415, + "./uk/messages.json": 7415, + "./uk/messages.meta": 3378, + "./uk/messages.meta.json": 3378, + "./vi/messages": 9692, + "./vi/messages.json": 9692, + "./vi/messages.meta": 8315, + "./vi/messages.meta.json": 8315, + "./zh-HK/messages": 6359, + "./zh-HK/messages.json": 6359, + "./zh-HK/messages.meta": 9762, + "./zh-HK/messages.meta.json": 9762, + "./zh-TW/messages": 6543, + "./zh-TW/messages.json": 6543, + "./zh-TW/messages.meta": 1066, + "./zh-TW/messages.meta.json": 1066, + "./zh/messages": 9161, + "./zh/messages.json": 9161, + "./zh/messages.meta": 3492, + "./zh/messages.meta.json": 3492 +}; + + +function webpackContext(req) { + var id = webpackContextResolve(req); + return __nested_webpack_require_659_678__(id); +} +function webpackContextResolve(req) { + if(!__nested_webpack_require_659_678__.o(map, req)) { + var e = new Error("Cannot find module '" + req + "'"); + e.code = 'MODULE_NOT_FOUND'; + throw e; + } + return map[req]; +} +webpackContext.keys = function webpackContextKeys() { + return Object.keys(map); +}; +webpackContext.resolve = webpackContextResolve; +module.exports = webpackContext; +webpackContext.id = 5641; + +/***/ }, + +/***/ 8591 +(__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_6082_6101__) { + +"use strict"; +__nested_webpack_require_6082_6101__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_6082_6101__.d(__nested_webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +var _require = __nested_webpack_require_6082_6101__(1321), + getEquivalent = _require.getEquivalent; +var _require2 = __nested_webpack_require_6082_6101__(8401), + LANGUAGES = _require2.LANGUAGES, + LOCALE_DATA_FILENAME = _require2.LOCALE_DATA_FILENAME; +var locales = Object.keys(LANGUAGES).reduce(function (acc, language) { + var resultLocale = getEquivalent(language); + // eslint-disable-next-line global-require,import/no-dynamic-require + var dictionary = __nested_webpack_require_6082_6101__(5641)("./".concat(resultLocale, "/").concat(LOCALE_DATA_FILENAME)); + acc[resultLocale] = dictionary; + return acc; +}, {}); +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (locales); + +/***/ }, + +/***/ 8401 +(module, __unused_webpack_exports, __nested_webpack_require_7026_7045__) { + +function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); } +function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } +function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } } +function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; } +function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } } +function _arrayWithHoles(r) { if (Array.isArray(r)) return r; } +var _require = __nested_webpack_require_7026_7045__(6539), + _require2 = _slicedToArray(_require, 1), + _require2$ = _require2[0], + BASE_LOCALE = _require2$.base_locale, + PROJECT_ID = _require2$.project_id, + LANGUAGES = _require2$.languages, + LOCALIZABLE_FILES = _require2$.localizable_files; +var LOCALES_DIR = '../../locales'; + +/** + * Users locale may be defined with only two chars (language code) + * Here we provide a map of equivalent translation for such locales + */ +var LOCALES_EQUIVALENTS_MAP = { + 'pt-BR': 'pt', + 'zh-CN': 'zh' +}; +var LOCALES = Object.keys(LANGUAGES); +var REQUIRED_LOCALES = ['de', 'es', 'fr', 'it', 'ja', 'ko', 'pt', 'pt-PT', 'ru', 'zh', 'zh-TW']; + +/** + * Threshold percentage for validation of required locales. + */ +var THRESHOLD_PERCENTAGE = 100; + +/** + * Name of the locale data file. + */ +var LOCALE_DATA_FILENAME = 'messages.json'; +module.exports = { + LOCALES_EQUIVALENTS_MAP: LOCALES_EQUIVALENTS_MAP, + BASE_LOCALE: BASE_LOCALE, + PROJECT_ID: PROJECT_ID, + LANGUAGES: LANGUAGES, + LOCALIZABLE_FILES: LOCALIZABLE_FILES, + LOCALES: LOCALES, + REQUIRED_LOCALES: REQUIRED_LOCALES, + THRESHOLD_PERCENTAGE: THRESHOLD_PERCENTAGE, + LOCALES_DIR: LOCALES_DIR, + LOCALE_DATA_FILENAME: LOCALE_DATA_FILENAME +}; + +/***/ }, + +/***/ 1321 +(module, __unused_webpack_exports, __nested_webpack_require_9801_9820__) { + +var _require = __nested_webpack_require_9801_9820__(8401), + LOCALES_EQUIVALENTS_MAP = _require.LOCALES_EQUIVALENTS_MAP; + +/** + * Returns equivalent of specified locale code + * @param {string} locale locale + */ +var getEquivalent = function getEquivalent(locale) { + return LOCALES_EQUIVALENTS_MAP[locale] || locale; +}; + +/** + * Normalizes locale code before validation. + * + * @param {string} rawLocale Locale code to normalize. + * + * @returns {string} Normalized locale code. + * + * @example + * 'pt_BR' -> 'pt_br' + * 'es_419' -> 'es' + * 'sr-Latn' -> 'sr_latn' + */ +var normalizeLocale = function normalizeLocale(rawLocale) { + // locale should be lowercase, e.g. 'pt_br', not 'pt_BR' + // and with underscore, not dash, e.g. 'sr_latn', not 'sr-latn' + var locale = rawLocale.toLowerCase().replace('-', '_'); + return getEquivalent(locale); +}; +module.exports = { + getEquivalent: getEquivalent, + normalizeLocale: normalizeLocale +}; + +/***/ }, + +/***/ 8814 +(module, __nested_webpack_exports__, __nested_webpack_require_10788_10807__) { + +"use strict"; +__nested_webpack_require_10788_10807__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_10788_10807__.d(__nested_webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _node_modules_pnpm_css_loader_7_1_3_webpack_5_105_1_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_10788_10807__(4355); +/* harmony import */ var _node_modules_pnpm_css_loader_7_1_3_webpack_5_105_1_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_10788_10807__.n(_node_modules_pnpm_css_loader_7_1_3_webpack_5_105_1_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _node_modules_pnpm_css_loader_7_1_3_webpack_5_105_1_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_10788_10807__(8092); +/* harmony import */ var _node_modules_pnpm_css_loader_7_1_3_webpack_5_105_1_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__nested_webpack_require_10788_10807__.n(_node_modules_pnpm_css_loader_7_1_3_webpack_5_105_1_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _node_modules_pnpm_css_loader_7_1_3_webpack_5_105_1_node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_10788_10807__(8151); +/* harmony import */ var _node_modules_pnpm_css_loader_7_1_3_webpack_5_105_1_node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__nested_webpack_require_10788_10807__.n(_node_modules_pnpm_css_loader_7_1_3_webpack_5_105_1_node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2__); +// Imports + + + +var ___CSS_LOADER_URL_IMPORT_0___ = new URL(/* asset import */ __nested_webpack_require_10788_10807__(7133), __nested_webpack_require_10788_10807__.b); +var ___CSS_LOADER_URL_IMPORT_1___ = new URL(/* asset import */ __nested_webpack_require_10788_10807__(2883), __nested_webpack_require_10788_10807__.b); +var ___CSS_LOADER_URL_IMPORT_2___ = new URL(/* asset import */ __nested_webpack_require_10788_10807__(9010), __nested_webpack_require_10788_10807__.b); +var ___CSS_LOADER_URL_IMPORT_3___ = new URL(/* asset import */ __nested_webpack_require_10788_10807__(4018), __nested_webpack_require_10788_10807__.b); +var ___CSS_LOADER_URL_IMPORT_4___ = new URL(/* asset import */ __nested_webpack_require_10788_10807__(6846), __nested_webpack_require_10788_10807__.b); +var ___CSS_LOADER_EXPORT___ = _node_modules_pnpm_css_loader_7_1_3_webpack_5_105_1_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_pnpm_css_loader_7_1_3_webpack_5_105_1_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); +var ___CSS_LOADER_URL_REPLACEMENT_0___ = _node_modules_pnpm_css_loader_7_1_3_webpack_5_105_1_node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_0___); +var ___CSS_LOADER_URL_REPLACEMENT_1___ = _node_modules_pnpm_css_loader_7_1_3_webpack_5_105_1_node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_1___); +var ___CSS_LOADER_URL_REPLACEMENT_2___ = _node_modules_pnpm_css_loader_7_1_3_webpack_5_105_1_node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_2___); +var ___CSS_LOADER_URL_REPLACEMENT_3___ = _node_modules_pnpm_css_loader_7_1_3_webpack_5_105_1_node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_3___); +var ___CSS_LOADER_URL_REPLACEMENT_4___ = _node_modules_pnpm_css_loader_7_1_3_webpack_5_105_1_node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_4___); +// Module +___CSS_LOADER_EXPORT___.push([module.id, `/*! normalize.css v3.0.1 | MIT License | git.io/normalize */ +/** + * 1. Set default font family to sans-serif. + * 2. Prevent iOS text size adjust after orientation change, without disabling + * user zoom. + */ +html { + font-family: sans-serif; + /* 1 */ + -ms-text-size-adjust: 100%; + /* 2 */ + -webkit-text-size-adjust: 100%; + /* 2 */ +} +/** + * Remove default margin. + */ +body { + margin: 0; +} +/* HTML5 display definitions +========================================================================== */ +/** + * Correct \`block\` display not defined for any HTML5 element in IE 8/9. + * Correct \`block\` display not defined for \`details\` or \`summary\` in IE 10/11 and Firefox. + * Correct \`block\` display not defined for \`main\` in IE 11. + */ +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +main, +nav, +section, +summary { + display: block; +} +/** + * 1. Correct \`inline-block\` display not defined in IE 8/9. + * 2. Normalize vertical alignment of \`progress\` in Chrome, Firefox, and Opera. + */ +audio, +canvas, +progress, +video { + display: inline-block; + /* 1 */ + vertical-align: baseline; + /* 2 */ +} +/** + * Prevent modern browsers from displaying \`audio\` without controls. + * Remove excess height in iOS 5 devices. + */ +audio:not([controls]) { + display: none; + height: 0; +} +/** + * Address \`[hidden]\` styling not present in IE 8/9/10. + * Hide the \`template\` element in IE 8/9/11, Safari, and Firefox < 22. + */ +[hidden], +template { + display: none; +} +/* Links +========================================================================== */ +/** + * Remove the gray background color from active links in IE 10. + */ +a { + background: transparent; +} +/** + * Improve readability when focused and also mouse hovered in all browsers. + */ +a:active, +a:hover { + outline: 0; +} +/* Text-level semantics +========================================================================== */ +/** + * Address styling not present in IE 8/9/10/11, Safari, and Chrome. + */ +abbr[title] { + border-bottom: 1px dotted; +} +/** + * Address style set to \`bolder\` in Firefox 4+, Safari, and Chrome. + */ +b, +strong { + font-weight: bold; +} +/** + * Address styling not present in Safari and Chrome. + */ +dfn { + font-style: italic; +} +/** + * Address variable \`h1\` font-size and margin within \`section\` and \`article\` + * contexts in Firefox 4+, Safari, and Chrome. + */ +h1 { + font-size: 2em; + margin: 0.67em 0; +} +/** + * Address styling not present in IE 8/9. + */ +mark { + background: #ff0; + color: #000; +} +/** + * Address inconsistent and variable font size in all browsers. + */ +small { + font-size: 80%; +} +/** + * Prevent \`sub\` and \`sup\` affecting \`line-height\` in all browsers. + */ +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} +sup { + top: -0.5em; +} +sub { + bottom: -0.25em; +} +/* Embedded content +========================================================================== */ +/** + * Remove border when inside \`a\` element in IE 8/9/10. + */ +img { + border: 0; +} +/** + * Correct overflow not hidden in IE 9/10/11. + */ +svg:not(:root) { + overflow: hidden; +} +/* Grouping content +========================================================================== */ +/** + * Address margin not present in IE 8/9 and Safari. + */ +figure { + margin: 1em 40px; +} +/** + * Address differences between Firefox and other browsers. + */ +hr { + -moz-box-sizing: content-box; + box-sizing: content-box; + height: 0; +} +/** + * Contain overflow in all browsers. + */ +pre { + overflow: auto; +} +/** + * Address odd \`em\`-unit font size rendering in all browsers. + */ +code, +kbd, +pre, +samp { + font-family: monospace, monospace; + font-size: 1em; +} +/* Forms +========================================================================== */ +/** + * Known limitation: by default, Chrome and Safari on OS X allow very limited + * styling of \`select\`, unless a \`border\` property is set. + */ +/** + * 1. Correct color not being inherited. + * Known issue: affects color of disabled elements. + * 2. Correct font properties not being inherited. + * 3. Address margins set differently in Firefox 4+, Safari, and Chrome. + */ +button, +input, +optgroup, +select, +textarea { + color: inherit; + /* 1 */ + font: inherit; + /* 2 */ + margin: 0; + /* 3 */ +} +/** + * Address \`overflow\` set to \`hidden\` in IE 8/9/10/11. + */ +button { + overflow: visible; +} +/** + * Address inconsistent \`text-transform\` inheritance for \`button\` and \`select\`. + * All other form control elements do not inherit \`text-transform\` values. + * Correct \`button\` style inheritance in Firefox, IE 8/9/10/11, and Opera. + * Correct \`select\` style inheritance in Firefox. + */ +button, +select { + text-transform: none; +} +/** + * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native \`audio\` + * and \`video\` controls. + * 2. Correct inability to style clickable \`input\` types in iOS. + * 3. Improve usability and consistency of cursor style between image-type + * \`input\` and others. + */ +button, +html input[type="button"], +input[type="reset"], +input[type="submit"] { + -webkit-appearance: button; + /* 2 */ + cursor: pointer; + /* 3 */ +} +/** + * Re-set default cursor for disabled elements. + */ +button[disabled], +html input[disabled] { + cursor: default; +} +/** + * Remove inner padding and border in Firefox 4+. + */ +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0; +} +/** + * Address Firefox 4+ setting \`line-height\` on \`input\` using \`!important\` in + * the UA stylesheet. + */ +input { + line-height: normal; +} +/** + * It's recommended that you don't attempt to style these elements. + * Firefox's implementation doesn't respect box-sizing, padding, or width. + * + * 1. Address box sizing set to \`content-box\` in IE 8/9/10. + * 2. Remove excess padding in IE 8/9/10. + */ +input[type="checkbox"], +input[type="radio"] { + box-sizing: border-box; + /* 1 */ + padding: 0; + /* 2 */ +} +/** + * Fix the cursor style for Chrome's increment/decrement buttons. For certain + * \`font-size\` values of the \`input\`, it causes the cursor style of the + * decrement button to change from \`default\` to \`text\`. + */ +input[type="number"]::-webkit-inner-spin-button, +input[type="number"]::-webkit-outer-spin-button { + height: auto; +} +/** + * 1. Address \`appearance\` set to \`searchfield\` in Safari and Chrome. + * 2. Address \`box-sizing\` set to \`border-box\` in Safari and Chrome + * (include \`-moz\` to future-proof). + */ +input[type="search"] { + -webkit-appearance: textfield; + /* 1 */ + -moz-box-sizing: content-box; + -webkit-box-sizing: content-box; + /* 2 */ + box-sizing: content-box; +} +/** + * Remove inner padding and search cancel button in Safari and Chrome on OS X. + * Safari (but not Chrome) clips the cancel button when the search input has + * padding (and \`textfield\` appearance). + */ +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} +/** + * Define consistent border, margin, and padding. + */ +fieldset { + border: 1px solid #c0c0c0; + margin: 0 2px; + padding: 0.35em 0.625em 0.75em; +} +/** + * 1. Correct \`color\` not being inherited in IE 8/9/10/11. + * 2. Remove padding so people aren't caught out if they zero out fieldsets. + */ +legend { + border: 0; + /* 1 */ + padding: 0; + /* 2 */ +} +/** + * Remove default vertical scrollbar in IE 8/9/10/11. + */ +textarea { + overflow: auto; +} +/** + * Don't inherit the \`font-weight\` (applied by a rule above). + * NOTE: the default cannot safely be changed in Chrome and Safari on OS X. + */ +optgroup { + font-weight: bold; +} +/* Tables +========================================================================== */ +/** + * Remove most spacing between table cells. + */ +table { + border-collapse: collapse; + border-spacing: 0; +} +td, +th { + padding: 0; +} +* { + box-sizing: border-box; +} +*:after, +*:before { + box-sizing: border-box; +} +html { + font-size: 10px; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); +} +body { + position: relative; + font-size: 1.3rem; + line-height: 1.42857143; + background-color: #e6e6e6; + font-family: "Roboto", Arial, sans-serif; + font-weight: 400; + overflow-y: hidden; +} +button, +input, +select, +textarea { + font-family: inherit; + font-size: inherit; + line-height: inherit; + outline: none; + border-radius: 0; + box-shadow: none; +} +a { + color: #36ba53; + text-decoration: underline; + outline: 0; +} +a:hover { + color: #257f39; + text-decoration: underline; +} +figure { + margin: 0; +} +img { + vertical-align: middle; + max-width: 100%; +} +form { + margin: 0; +} +fieldset { + padding: 0; + margin: 0; + border: 0; + min-width: 0; +} +legend { + display: block; + width: 100%; + padding: 0; + margin-bottom: 22/14; + font-size: 21px; + line-height: inherit; + border: 0; +} +label { + display: inline-block; +} +input[type="search"] { + box-sizing: border-box; +} +input[type="radio"], +input[type="checkbox"] { + display: none; +} +input[type="file"]:focus, +input[type="radio"]:focus, +input[type="checkbox"]:focus { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +.form-control { + display: block; + width: 100%; + padding: 16px; + font-size: 16px; + line-height: 1.3; + text-overflow: ellipsis; + white-space: nowrap; + border-radius: 8px; + border: 1px solid; +} +.form-control:focus { + border-color: #8c8c8c; + outline: 0; +} +.form-control::-moz-placeholder { + color: #777777; + opacity: 1; +} +.form-control:-ms-input-placeholder { + color: #777777; +} +.form-control::-webkit-input-placeholder { + color: #777777; +} +.form-control[disabled], +.form-control[readonly], +fieldset[disabled] .form-control { + cursor: not-allowed; + background-color: #fff; + opacity: 1; +} +textarea.form-control { + height: auto; +} +/* +.fieldset.error{ + .form-control{ + border-color: @state-danger-text; + .placeholder(@state-danger-text); + } +} +*/ +input[type="search"] { + -webkit-appearance: none; +} +input[type="date"], +input[type="time"], +input[type="datetime-local"], +input[type="month"] { + line-height: 22px; +} +.form-group { + margin: 23px 0 0; +} +.form-group:first-child { + margin-top: 0; +} +input[type="radio"][disabled], +input[type="checkbox"][disabled], +input[type="radio"].disabled, +input[type="checkbox"].disabled, +fieldset[disabled] input[type="radio"], +fieldset[disabled] input[type="checkbox"] { + cursor: not-allowed; +} +@font-face { + font-family: 'Roboto'; + src: url(${___CSS_LOADER_URL_REPLACEMENT_0___}) format('woff2'); + font-weight: 400; + font-style: normal; +} + +@font-face { + font-family: 'Roboto'; + src: url(${___CSS_LOADER_URL_REPLACEMENT_1___}) format('woff2'); + font-weight: 500; + font-style: normal; +} + +@font-face { + font-family: 'Roboto'; + src: url(${___CSS_LOADER_URL_REPLACEMENT_2___}) format('woff2'); + font-weight: 700; + font-style: normal; +} + +.form-ui { + position: relative; + display: inline-block; + vertical-align: top; + margin: 0; + line-height: 20px; + font-weight: 400; + cursor: pointer; +} +.form-ui-control { + position: absolute; + top: -9999px; + left: -9999px; + width: 0; + height: 0; + overflow: hidden; + clip: rect(0, 0, 0, 0); + outline: 0 none; +} +.form-ui-txt { + position: relative; + display: inline-block; + vertical-align: top; + padding: 2px 0 0 30px; +} +.form-ui-txt:before { + content: ''; + position: absolute; + top: 0; + left: 0; + width: 22px; + height: 22px; +} +.form-ui-txt:after { + content: ''; + position: absolute; +} +input[type="radio"] + .form-ui .form-ui-txt:before { + border: 1px solid #cfcfcf; + border-radius: 50%; +} +input[type="radio"] + .form-ui .form-ui-txt:after { + top: 7px; + left: 7px; + width: 8px; + height: 8px; + border-radius: 50%; +} +input[type="radio"]:disabled + .form-ui .form-ui-txt:before { + background: #f2f2f2; + opacity: 0.6; +} +input[type="radio"]:disabled + .form-ui .form-ui-txt:after { + opacity: 0.6; +} +input[type="checkbox"] + .form-ui { + display: flex; + column-gap: 12px; +} +input[type="checkbox"] + .form-ui .form-ui-txt { + padding: 3px 0; + font-size: 14px; + font-weight: 600; + line-height: 18px; +} +input[type="checkbox"] + .form-ui .form-ui-txt:before, +input[type="checkbox"] + .form-ui .form-ui-txt:after { + content: none; +} +input[type="checkbox"] + .form-ui .form-ui-icon { + width: 24px; + height: 24px; +} +input[type="checkbox"] + .form-ui .form-ui-icon--off { + display: block; +} +input[type="checkbox"] + .form-ui .form-ui-icon--on { + display: none; +} +input[type="checkbox"]:disabled + .form-ui .form-ui-icon { + opacity: 0.6; +} +input[type="checkbox"]:checked + .form-ui .form-ui-icon--off { + display: none; +} +input[type="checkbox"]:checked + .form-ui .form-ui-icon--on { + display: block; +} +.btn { + display: inline-block; + margin: 0; + padding: 18px 16px; + font-size: 16px; + line-height: 1.3; + text-align: center; + text-decoration: none; + vertical-align: middle; + cursor: pointer; + background-color: transparent; + background-image: none; + border: 1px solid transparent; + white-space: nowrap; + user-select: none; + border-radius: 8px; + overflow: hidden; + text-overflow: ellipsis; + font-weight: 600; + transition: background 0.3s ease, color 0.3s ease, border-color 0.3s ease; +} +.btn:disabled, +.btn[disabled], +.btn.disabled { + cursor: default; + pointer-events: none; +} +@media (max-width: 320px) { + .btn-another-el { + font-size: 9px; + padding-left: 0; + padding-right: 0; + background-color: transparent; + border: 0; + color: #000; + } + .btn-another-el:hover { + border-color: transparent; + background: transparent; + color: #000; + } +} +.btn-lg { + font-size: 20px; + padding: 14px 24px 12px; +} +.btn-sm { + font-size: 16px; + padding-top: 14px; + padding-bottom: 14px; +} +.btn-xs { + font-size: 14px; + padding-top: 12px; + padding-bottom: 12px; +} +.btn-block { + display: block; + width: 100%; + padding-left: 0; + padding-right: 0; +} +.btn-block + .btn-block { + margin-top: 5px; +} +input[type="submit"].btn-block, +input[type="reset"].btn-block, +input[type="button"].btn-block { + width: 100%; +} +.btn-upload { + position: relative; + overflow: hidden; +} +.btn-upload input[type=file] { + position: absolute; + top: 0; + right: 0; + margin: 0; + font-size: 600%; + line-height: 600%; + width: auto; + height: auto; + opacity: 0; + cursor: pointer; +} +.old-btn { + display: inline-block; + margin-bottom: 0; + padding: 10px 20px; + font-size: 13px; + line-height: 18px; + text-align: center; + text-decoration: none; + vertical-align: middle; + cursor: pointer; + background-image: none; + border: 1px solid transparent; + white-space: nowrap; + user-select: none; +} +.old-btn:hover { + color: #000; + text-decoration: none; +} +.old-btn:active, +.old-btn.active { + outline: none; +} +.old-btn:focus { + outline: none; + box-shadow: inset 0 0 0 1px #fff; +} +.old-btn[disabled], +.old-btn.disabled { + cursor: default; + box-shadow: none; + opacity: 0.5; + pointer-events: none; +} +.old-btn-default { + border-color: #58595b; + background: #58595b; + color: #fff; +} +.old-btn-default:hover { + border-color: #717275; + background: #717275; + color: #fff; +} +.old-btn-default.active, +.old-btn-default:active { + border-color: #717275; + background: #717275; +} +.old-btn-default.disabled, +.old-btn-default[disabled] { + border-color: #58595b; + background: #58595b; +} +@media (prefers-color-scheme: light) { + body { + color: #3D3D3D; + } + .main { + background: #FFFFFF; + } + .main-popup__btn { + background: #ffffff; + border: 1px solid #cfcfcf; + } + .main-popup__btn:hover { + background-color: #efefef; + } + .main-menu__btn { + background-color: #ffffff; + } + .main-menu__btn:hover { + background-color: #efefef; + } + .main-menu__btn:active, + .main-menu__btn.active { + background-color: #f3f3f3; + } + .main-version { + color: #dfdfdf; + } + .main_close { + color: #7F7F7F; + } + .main_close:hover { + color: #3D3D3D; + } + .head_title { + color: #3D3D3D; + } + .head_text { + color: #5B5B5B; + } + .head::after { + background-color: #D2D2D2; + } + .element-rule_expand-link { + color: #3D3D3D; + } + .element-rule_expand-link_arr { + color: #7F7F7F; + } + .element-rule_expand-link:hover .element-rule_expand-link_arr { + color: #3D3D3D; + } + .element-rule_text { + color: #5B5B5B; + } + .close { + background: url(${___CSS_LOADER_URL_REPLACEMENT_3___}) no-repeat 0 0 / cover; + opacity: 0.6; + } + .close:hover { + opacity: 0.8; + } + .form-control { + color: #3D3D3D; + background-color: #F6F6F6; + border-color: #D2D2D2; + } + input[type="checkbox"] + .form-ui .form-ui-txt { + color: #3D3D3D; + } + input[type="checkbox"] + .form-ui .form-ui-icon--off { + color: #7F7F7F; + } + input[type="checkbox"] + .form-ui .form-ui-icon--on { + color: #67B279; + } + .menu, + .menu-filter { + border-top: 1px solid #e0dfdb; + } + .settings_fieldset { + border-top: 1px solid #e0dfdb; + } + .btn-primary { + color: #3D3D3D; + background-color: #FFFFFF; + border-color: #FFFFFF; + } + .btn-primary:hover, + .btn-primary:focus-visible { + background-color: #F6F6F6; + border-color: #F6F6F6; + } + .btn-primary:active, + .btn-primary.active { + background-color: #E4E4E4; + border-color: #E4E4E4; + } + .btn-primary:disabled, + .btn-primary[disabled], + .btn-primary.disabled { + color: #A4A4A4; + background-color: #FFFFFF; + border-color: #FFFFFF; + } + .btn-cancel { + color: #FFFFFF; + background-color: #F67247; + border-color: #F67247; + } + .btn-cancel:hover, + .btn-cancel:focus-visible { + background-color: #DF6740; + border-color: #DF6740; + } + .btn-cancel:active, + .btn-cancel.active { + background-color: #B55434; + border-color: #B55434; + } + .btn-cancel:disabled, + .btn-cancel[disabled], + .btn-cancel.disabled { + background-color: #FAA98F; + border-color: #FAA98F; + } + .btn-default { + color: #3D3D3D; + background-color: #FFFFFF; + border-color: #3D3D3D; + } + .btn-default:hover, + .btn-default:focus-visible { + background-color: #F6F6F6; + } + .btn-default:active, + .btn-default.active { + background-color: #E4E4E4; + } + .btn-default:disabled, + .btn-default[disabled], + .btn-default.disabled { + color: #A4A4A4; + background-color: #FFFFFF; + border-color: #A4A4A4; + } + .change-position_input:checked + .change-position_label { + border-color: #36ba53; + background: #36ba53; + } + input[type="radio"] + .form-ui .form-ui-txt:before { + background: #ffffff; + } + input[type="radio"]:checked + .form-ui .form-ui-txt:after { + background: #36ba53; + } + .menu-head_title { + color: #343434; + } + .menu-head_text { + color: #343434; + } + .menu-filter_handle { + background: #ffffff; + } + .adg-slide_clue { + color: #3D3D3D; + } + .adg-slide_tick { + background-color: #C0C0C0; + } + .adg-slide_tick--active, + .adg-slide_handle { + background-color: #67B279 !important; + } + .old-btn-primary { + border-color: #36ba53; + background: #36ba53; + color: #fff; + } + .old-btn-primary:hover { + border-color: #30a64a; + background: #30a64a; + color: #fff; + } + .old-btn-primary.active, + .old-btn-primary:active { + border-color: #30a64a; + background: #30a64a; + } + .old-btn-primary.disabled, + .old-btn-primary[disabled] { + border-color: #30a64a; + background: #30a64a; + } +} +@media (prefers-color-scheme: dark) { + body { + color: #E4E4E4; + } + .main { + background: #3D3D3D; + } + .main-popup__btn { + background: #323232; + border: 1px solid #666; + } + .main-popup__btn:hover { + background-color: #555555; + } + .main-menu__btn { + background-color: #323232; + } + .main-menu__btn:hover { + background-color: #555555; + } + .main-menu__btn:active, + .main-menu__btn.active { + background-color: #4d4d4d; + } + .main-version { + color: #444; + } + .main_close { + color: #C0C0C0; + } + .main_close:hover { + color: #E4E4E4; + } + .head_title { + color: #E4E4E4; + } + .head_text { + color: #D2D2D2; + } + .head::after { + background-color: #5B5B5B; + } + .element-rule_expand-link { + color: #E4E4E4; + } + .element-rule_expand-link_arr { + color: #C0C0C0; + } + .element-rule_expand-link:hover .element-rule_expand-link_arr { + color: #E4E4E4; + } + .element-rule_text { + color: #D2D2D2; + } + .close { + background: url(${___CSS_LOADER_URL_REPLACEMENT_4___}) no-repeat 0 0 / cover; + opacity: 0.7; + } + .close:hover { + opacity: 1; + } + .form-control { + color: #E4E4E4; + background-color: #3D3D3D; + border-color: #5B5B5B; + } + input[type="checkbox"] + .form-ui .form-ui-txt { + color: #E4E4E4; + } + input[type="checkbox"] + .form-ui .form-ui-icon--off { + color: #C0C0C0; + } + .menu, + .menu-filter { + border-top: 1px solid #444; + } + .settings_fieldset { + border-top: 1px solid #444; + } + .btn-primary { + color: #E4E4E4; + background-color: #3D3D3D; + border-color: #3D3D3D; + } + .btn-primary:hover, + .btn-primary:focus-visible { + background-color: #5B5B5B; + border-color: #5B5B5B; + } + .btn-primary:active, + .btn-primary.active { + background-color: #7F7F7F; + border-color: #7F7F7F; + } + .btn-primary:disabled, + .btn-primary[disabled], + .btn-primary.disabled { + background-color: #3D3D3D; + border-color: #3D3D3D; + } + .btn-cancel:disabled, + .btn-cancel[disabled], + .btn-cancel.disabled { + background-color: #7B3923; + border-color: #7B3923; + } + .btn-default { + color: #E4E4E4; + background-color: #3D3D3D; + border-color: #E4E4E4; + } + .btn-default:hover, + .btn-default:focus-visible { + background-color: #5B5B5B; + } + .btn-default:active, + .btn-default.active { + background-color: #7F7F7F; + } + .btn-default:disabled, + .btn-default[disabled], + .btn-default.disabled { + background-color: #3D3D3D; + } + .change-position_input:checked + .change-position_label { + border-color: #4D995F; + background: #4D995F; + } + input[type="radio"] + .form-ui .form-ui-txt:before { + background: #323232; + } + input[type="radio"]:checked + .form-ui .form-ui-txt:after { + background: #4D995F; + } + .menu-head_title { + color: #ccc; + } + .menu-head_text { + color: #ccc; + } + .menu-filter_handle { + background: #323232; + } + .adg-slide_clue { + color: #E4E4E4; + } + .adg-slide_tick { + background-color: #7F7F7F; + } + .old-btn-primary { + border-color: #4D995F; + background: #4D995F; + color: #fff; + } + .old-btn-primary:hover { + border-color: #39774C; + background: #39774C; + color: #fff; + } + .old-btn-primary.active, + .old-btn-primary:active { + border-color: #39774C; + background: #39774C; + } + .old-btn-primary.disabled, + .old-btn-primary[disabled] { + border-color: #39774C; + background: #39774C; + } +} +`, ""]); +// Exports +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); + + +/***/ }, + +/***/ 5909 +(module, __nested_webpack_exports__, __nested_webpack_require_37394_37413__) { + +"use strict"; +__nested_webpack_require_37394_37413__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_37394_37413__.d(__nested_webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _node_modules_pnpm_css_loader_7_1_3_webpack_5_105_1_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_37394_37413__(4355); +/* harmony import */ var _node_modules_pnpm_css_loader_7_1_3_webpack_5_105_1_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_37394_37413__.n(_node_modules_pnpm_css_loader_7_1_3_webpack_5_105_1_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _node_modules_pnpm_css_loader_7_1_3_webpack_5_105_1_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_37394_37413__(8092); +/* harmony import */ var _node_modules_pnpm_css_loader_7_1_3_webpack_5_105_1_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__nested_webpack_require_37394_37413__.n(_node_modules_pnpm_css_loader_7_1_3_webpack_5_105_1_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _node_modules_pnpm_css_loader_7_1_3_webpack_5_105_1_node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_37394_37413__(8151); +/* harmony import */ var _node_modules_pnpm_css_loader_7_1_3_webpack_5_105_1_node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__nested_webpack_require_37394_37413__.n(_node_modules_pnpm_css_loader_7_1_3_webpack_5_105_1_node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2__); +// Imports + + + +var ___CSS_LOADER_URL_IMPORT_0___ = new URL(/* asset import */ __nested_webpack_require_37394_37413__(6263), __nested_webpack_require_37394_37413__.b); +var ___CSS_LOADER_EXPORT___ = _node_modules_pnpm_css_loader_7_1_3_webpack_5_105_1_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_pnpm_css_loader_7_1_3_webpack_5_105_1_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); +var ___CSS_LOADER_URL_REPLACEMENT_0___ = _node_modules_pnpm_css_loader_7_1_3_webpack_5_105_1_node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_0___); +// Module +___CSS_LOADER_EXPORT___.push([module.id, `:host { + display: block!important; + position: relative!important; + width: 0!important; + height: 0!important; + margin: 0!important; + padding: 0!important; + z-index: 2147483647!important; +} +:host ::after, +:host ::before { + display: none!important; +} +.adguard-assistant-button-main-logo { + background-image: url(${___CSS_LOADER_URL_REPLACEMENT_0___}) !important; +} +.adguard-alert { + cursor: pointer; + left: 0; + top: 0; + position: fixed !important; + z-index: 2147483647 !important; + width: 40px !important; + height: 40px !important; + zoom: 1 !important; + display: inline-block !important; + margin: 0 !important; + border: 0 !important; + padding: 0 !important; + will-change: transform; + opacity: 1; + touch-action: none; + -ms-touch-action: none; + visibility: visible !important; + min-height: auto !important; + max-height: auto !important; + min-width: auto !important; + max-width: auto !important; + background-size: 21px!important; + background-position: center center!important; + background-repeat: no-repeat !important; + background-color: #fff !important; + border: none !important; + box-shadow: 0 0 10px 3px rgba(162, 161, 161, 0.3) !important; + border-radius: 100% !important; + transition: background-color 0.3s ease; +} +.adguard-alert.sg_hide_element { + display: none!important; +} +.adguard-alert.logo-small { + width: 24px !important; + height: 24px !important; + background-position: 50% 6px!important; + background-size: 14px!important; +} +.adguard-alert:hover { + background-color: #ccf0d4 !important; +} +@media print { + .adguard-alert { + display: none!important; + } +} +.adguard-assistant-button-right { + left: auto; + right: 0; +} +.adguard-assistant-button-left { + left: 0; + right: auto; +} +.adguard-assistant-button-top { + top: 0; + bottom: auto; +} +.adguard-assistant-button-bottom { + top: auto; + bottom: 0; +} +.adguard-assistant-button-top.adguard-assistant-button-left { + left: 0; + right: auto; + transform: translate3d(10px, 10px, 0); +} +.adguard-assistant-button-top.adguard-assistant-button-right { + left: auto; + right: 0; + transform: translate3d(-10px, 10px, 0); +} +.adguard-assistant-button-bottom.adguard-assistant-button-left { + left: 0; + right: auto; + transform: translate3d(10px, -10px, 0); +} +.adguard-assistant-button-bottom.adguard-assistant-button-right { + left: auto; + right: 0; + transform: translate3d(-10px, -10px, 0); +} +.adguard-assistant-button-bottom.adguard-assistant-button-respect-vk { + transform: translate3d(-70px, -5px, 0); +} +.adguard-assistant-button-bottom.adguard-assistant-button-respect-fb { + transform: translate3d(-5px, -40px, 0); +} +@media (prefers-color-scheme: dark) { + .adguard-alert { + background-color: #1d2021 !important; + box-shadow: 0 0 10px 3px rgba(0, 0, 0, 0.3) !important; + } + .adguard-alert:hover { + background-color: #2c2f30 !important; + } +} +`, ""]); +// Exports +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); + + +/***/ }, + +/***/ 6826 +(module, __nested_webpack_exports__, __nested_webpack_require_42899_42918__) { + +"use strict"; +__nested_webpack_require_42899_42918__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_42899_42918__.d(__nested_webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _node_modules_pnpm_css_loader_7_1_3_webpack_5_105_1_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_42899_42918__(4355); +/* harmony import */ var _node_modules_pnpm_css_loader_7_1_3_webpack_5_105_1_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_42899_42918__.n(_node_modules_pnpm_css_loader_7_1_3_webpack_5_105_1_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _node_modules_pnpm_css_loader_7_1_3_webpack_5_105_1_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_42899_42918__(8092); +/* harmony import */ var _node_modules_pnpm_css_loader_7_1_3_webpack_5_105_1_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__nested_webpack_require_42899_42918__.n(_node_modules_pnpm_css_loader_7_1_3_webpack_5_105_1_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _node_modules_pnpm_css_loader_7_1_3_webpack_5_105_1_node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_42899_42918__(8151); +/* harmony import */ var _node_modules_pnpm_css_loader_7_1_3_webpack_5_105_1_node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__nested_webpack_require_42899_42918__.n(_node_modules_pnpm_css_loader_7_1_3_webpack_5_105_1_node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2__); +// Imports + + + +var ___CSS_LOADER_URL_IMPORT_0___ = new URL(/* asset import */ __nested_webpack_require_42899_42918__(322), __nested_webpack_require_42899_42918__.b); +var ___CSS_LOADER_URL_IMPORT_1___ = new URL(/* asset import */ __nested_webpack_require_42899_42918__(158), __nested_webpack_require_42899_42918__.b); +var ___CSS_LOADER_URL_IMPORT_2___ = new URL(/* asset import */ __nested_webpack_require_42899_42918__(207), __nested_webpack_require_42899_42918__.b); +var ___CSS_LOADER_URL_IMPORT_3___ = new URL(/* asset import */ __nested_webpack_require_42899_42918__(7884), __nested_webpack_require_42899_42918__.b); +var ___CSS_LOADER_URL_IMPORT_4___ = new URL(/* asset import */ __nested_webpack_require_42899_42918__(6429), __nested_webpack_require_42899_42918__.b); +var ___CSS_LOADER_URL_IMPORT_5___ = new URL(/* asset import */ __nested_webpack_require_42899_42918__(2498), __nested_webpack_require_42899_42918__.b); +var ___CSS_LOADER_URL_IMPORT_6___ = new URL(/* asset import */ __nested_webpack_require_42899_42918__(5811), __nested_webpack_require_42899_42918__.b); +var ___CSS_LOADER_URL_IMPORT_7___ = new URL(/* asset import */ __nested_webpack_require_42899_42918__(2540), __nested_webpack_require_42899_42918__.b); +var ___CSS_LOADER_URL_IMPORT_8___ = new URL(/* asset import */ __nested_webpack_require_42899_42918__(6873), __nested_webpack_require_42899_42918__.b); +var ___CSS_LOADER_URL_IMPORT_9___ = new URL(/* asset import */ __nested_webpack_require_42899_42918__(3417), __nested_webpack_require_42899_42918__.b); +var ___CSS_LOADER_URL_IMPORT_10___ = new URL(/* asset import */ __nested_webpack_require_42899_42918__(1412), __nested_webpack_require_42899_42918__.b); +var ___CSS_LOADER_URL_IMPORT_11___ = new URL(/* asset import */ __nested_webpack_require_42899_42918__(4117), __nested_webpack_require_42899_42918__.b); +var ___CSS_LOADER_URL_IMPORT_12___ = new URL(/* asset import */ __nested_webpack_require_42899_42918__(384), __nested_webpack_require_42899_42918__.b); +var ___CSS_LOADER_URL_IMPORT_13___ = new URL(/* asset import */ __nested_webpack_require_42899_42918__(7988), __nested_webpack_require_42899_42918__.b); +var ___CSS_LOADER_URL_IMPORT_14___ = new URL(/* asset import */ __nested_webpack_require_42899_42918__(7608), __nested_webpack_require_42899_42918__.b); +var ___CSS_LOADER_URL_IMPORT_15___ = new URL(/* asset import */ __nested_webpack_require_42899_42918__(7501), __nested_webpack_require_42899_42918__.b); +var ___CSS_LOADER_URL_IMPORT_16___ = new URL(/* asset import */ __nested_webpack_require_42899_42918__(4018), __nested_webpack_require_42899_42918__.b); +var ___CSS_LOADER_URL_IMPORT_17___ = new URL(/* asset import */ __nested_webpack_require_42899_42918__(6846), __nested_webpack_require_42899_42918__.b); +var ___CSS_LOADER_EXPORT___ = _node_modules_pnpm_css_loader_7_1_3_webpack_5_105_1_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_pnpm_css_loader_7_1_3_webpack_5_105_1_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); +var ___CSS_LOADER_URL_REPLACEMENT_0___ = _node_modules_pnpm_css_loader_7_1_3_webpack_5_105_1_node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_0___); +var ___CSS_LOADER_URL_REPLACEMENT_1___ = _node_modules_pnpm_css_loader_7_1_3_webpack_5_105_1_node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_1___); +var ___CSS_LOADER_URL_REPLACEMENT_2___ = _node_modules_pnpm_css_loader_7_1_3_webpack_5_105_1_node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_2___); +var ___CSS_LOADER_URL_REPLACEMENT_3___ = _node_modules_pnpm_css_loader_7_1_3_webpack_5_105_1_node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_3___); +var ___CSS_LOADER_URL_REPLACEMENT_4___ = _node_modules_pnpm_css_loader_7_1_3_webpack_5_105_1_node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_4___); +var ___CSS_LOADER_URL_REPLACEMENT_5___ = _node_modules_pnpm_css_loader_7_1_3_webpack_5_105_1_node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_5___); +var ___CSS_LOADER_URL_REPLACEMENT_6___ = _node_modules_pnpm_css_loader_7_1_3_webpack_5_105_1_node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_6___); +var ___CSS_LOADER_URL_REPLACEMENT_7___ = _node_modules_pnpm_css_loader_7_1_3_webpack_5_105_1_node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_7___); +var ___CSS_LOADER_URL_REPLACEMENT_8___ = _node_modules_pnpm_css_loader_7_1_3_webpack_5_105_1_node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_8___); +var ___CSS_LOADER_URL_REPLACEMENT_9___ = _node_modules_pnpm_css_loader_7_1_3_webpack_5_105_1_node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_9___); +var ___CSS_LOADER_URL_REPLACEMENT_10___ = _node_modules_pnpm_css_loader_7_1_3_webpack_5_105_1_node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_10___); +var ___CSS_LOADER_URL_REPLACEMENT_11___ = _node_modules_pnpm_css_loader_7_1_3_webpack_5_105_1_node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_11___); +var ___CSS_LOADER_URL_REPLACEMENT_12___ = _node_modules_pnpm_css_loader_7_1_3_webpack_5_105_1_node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_12___); +var ___CSS_LOADER_URL_REPLACEMENT_13___ = _node_modules_pnpm_css_loader_7_1_3_webpack_5_105_1_node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_13___); +var ___CSS_LOADER_URL_REPLACEMENT_14___ = _node_modules_pnpm_css_loader_7_1_3_webpack_5_105_1_node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_14___); +var ___CSS_LOADER_URL_REPLACEMENT_15___ = _node_modules_pnpm_css_loader_7_1_3_webpack_5_105_1_node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_15___); +var ___CSS_LOADER_URL_REPLACEMENT_16___ = _node_modules_pnpm_css_loader_7_1_3_webpack_5_105_1_node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_16___); +var ___CSS_LOADER_URL_REPLACEMENT_17___ = _node_modules_pnpm_css_loader_7_1_3_webpack_5_105_1_node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_17___); +// Module +___CSS_LOADER_EXPORT___.push([module.id, `.close { + position: absolute; + top: 10px; + right: 10px; + display: inline-block; + vertical-align: top; + width: 1em; + font-size: 12px; + line-height: 1; + cursor: pointer; + transition: opacity 0.3s ease; +} +.close:before { + content: "\\00a0"; +} +@media (max-width: 320px) { + .close { + font-size: 15px; + top: 18px; + right: 14px; + } +} +.a-logo { + display: inline-block; + vertical-align: top; + width: 40px; + height: 40px; + padding: 10px 0 0; + font-size: 20px; + text-align: center; + border: 1px solid #cdcdcd; + border-radius: 50%; + background: #fff; +} +.a-logo__small { + width: 24px; + height: 24px; + font-size: 12px; + padding: 6px 0 0; +} +.tooltip { + position: relative; +} +.tooltip:before { + display: none; + content: attr(data-title); + position: absolute; + top: 100%; + left: 50%; + width: 170px; + margin: 7px 0 0 -85px; + padding: 6px 0 5px; + font-size: 10px; + font-style: normal; + font-weight: 500; + color: #fff; + text-align: center; + white-space: nowrap; + border-radius: 4px; + background: rgba(0, 0, 0, 0.8); +} +.tooltip:after { + display: none; + content: ''; + position: absolute; + top: 100%; + left: 50%; + margin: 3px 0 0 -4px; + border-bottom: 4px solid rgba(0, 0, 0, 0.8); + border-left: 4px solid transparent; + border-right: 4px solid transparent; +} +.tooltip:hover:before, +.tooltip:hover:after { + display: block; +} +.main { + position: relative; + min-height: 100%; + display: flex; + flex-direction: column; + justify-content: space-evenly; +} +.main--roboto { + font-family: "Roboto", "Open Sans", Arial, sans-serif; + font-weight: 400; +} +.main_close { + position: absolute; + top: 16px; + right: 16px; + display: inline-block; + vertical-align: top; + width: 24px; + height: 24px; + line-height: 1; + cursor: pointer; + transition: color 0.3s ease; +} +.main_close svg { + width: 100%; + height: 100%; +} +.head { + padding: 32px 32px 24px; + cursor: move; + touch-action: none; + -ms-touch-action: none; +} +.head_title { + font-size: 24px; + font-weight: 700; + line-height: 1.2; + padding: 6px 0; +} +.head_text { + font-size: 16px; + line-height: 1.5; +} +.head::after { + content: ''; + display: block; + margin-top: 16px; + height: 1px; + width: 100%; +} +.foot { + display: flex; + justify-content: space-between; + align-items: center; + flex-wrap: wrap; + row-gap: 16px; + padding: 0 32px 32px; +} +.foot .btn { + width: 256px; +} +.foot .btn:nth-child(3) { + width: 328px; + margin: 0 auto; +} +.old-head { + padding: 18px 20px; + cursor: move; +} +.old-head_title { + font-size: 16px; + font-weight: 700; +} +.old-head_text { + margin: 4px 0 0; + font-size: 12px; +} +.old-foot { + padding: 20px; +} +.old-foot_action { + float: right; +} +.old-foot_action_btn { + font-size: 0; +} +.old-foot_action_btn .old-btn + .old-btn { + margin-left: 10px; +} +.old-foot .cf { + clear: right; +} +.element-rule { + padding: 0 32px 24px; +} +.element-rule_slider { + user-select: none; +} +@media (max-width: 320px) { + .element-rule_slider { + display: none; + } +} +.element-rule_expand-link { + font-size: 18px; + line-height: 1.2; + font-weight: 700; + cursor: pointer; + padding: 8px 0; + display: flex; + column-gap: 4px; +} +.element-rule_expand-link_txt { + display: inline-block; + vertical-align: top; + padding: 1px 0; +} +.element-rule_expand-link_arr { + display: inline-block; + vertical-align: top; + width: 24px; + height: 24px; + transition: color 0.3s ease, transform 0.3s ease; + line-height: 1; +} +.element-rule_expand-link.active .element-rule_expand-link_arr { + transform: rotate(180deg); +} +.element-rule_form { + display: none; +} +.element-rule_form.open { + display: block; +} +.element-rule_fieldset { + padding: 8px 0; +} +.element-rule_more--mobile { + display: none; +} +@media (max-width: 320px) { + .element-rule_more--mobile { + display: block; + } + .element-rule_more--mobile .element-rule_expand-link { + display: none; + } + .element-rule_more--mobile #adg-cancel { + width: 106px; + padding: 10px 7px; + } + .element-rule_more--mobile #adg-accept { + padding: 10px 6px; + } +} +.element-rule_text { + font-size: 16px; + line-height: 1.5; +} +.adg-slide { + display: flex; + padding: 16px 0; +} +.adg-slide_clue { + padding: 9px 0; + font-size: 18px; + font-weight: 700; + cursor: pointer; + line-height: 1.2; +} +.adg-slide_clue--min { + order: 1; +} +.adg-slide_clue--max { + order: 3; +} +.adg-slide_track { + order: 2; + flex: 1 1 auto; + position: relative; + display: flex; + justify-content: space-between; + column-gap: 4px; + padding: 18px 28px; + cursor: pointer; + touch-action: none; +} +.adg-slide_tick { + flex: 1 1 auto; + width: auto; + height: 4px; + pointer-events: none; +} +.adg-slide_handle { + position: absolute; + width: 24px; + height: 24px; + border-radius: 50%; + top: 50%; + transform: translate(-50%, -50%); + box-shadow: 4px 4px 8px rgba(0, 0, 0, 0.2), 2px 2px 4px rgba(0, 0, 0, 0.1); + pointer-events: none; +} +.adg-slide-btns { + display: none; +} +.adg-slide-btn { + position: relative; + width: 36px; + height: 36px; + border: 2px solid #e2e2e2; + border-radius: 2px; +} +.adg-slide-btn:after { + content: ""; + position: absolute; + left: 8px; + top: 15.3px; + width: 18px; + height: 2px; + background-color: #4e4e4e; + border-radius: 2px; +} +.adg-slide-btn--plus { + margin-left: 9px; +} +.adg-slide-btn--plus:before { + content: ""; + position: absolute; + left: 16px; + top: 8px; + height: 17px; + width: 2px; + background-color: #4e4e4e; + border-radius: 2px; +} +.settings_fieldset { + padding: 20px; +} +.settings_fieldset:first-child { + border: 0; +} +.settings_fieldset_lbl { + float: left; + width: 126px; + margin: 1px 0 0; + font-weight: 500; +} +.settings_fieldset_lbl__pos { + margin-top: 21px; +} +.settings_fieldset_val { + margin: 0 0 0 126px; +} +.choice-size { + position: relative; + font-size: 14px; +} +.choice-size_field { + margin: 10px 0 0; +} +.choice-size_field:first-child { + margin: 0; +} +.choice-size_logo { + display: none; + position: absolute; + top: 10px; + right: 15px; + width: 40px; + height: 40px; + background-size: 21px; + background-position: 50% 11px; + background-repeat: no-repeat; + background-color: #fff; + border: none ; + box-shadow: 0 0 10px 3px rgba(162, 161, 161, 0.3); + border-radius: 100% ; +} +.choice-size_logo.logo__small { + top: 15px; + right: 20px; + width: 24px; + height: 24px; + background-position: 50% 6px; + background-size: 14px; +} +.choice-size_input:checked ~ .choice-size_logo { + display: block; +} +[class^="s-position-arr-"] { + display: block; + width: 11px; + height: 11px; + background: url(${___CSS_LOADER_URL_REPLACEMENT_0___}) no-repeat; + background-size: 44px 22px; +} +.s-position-arr-top-left { + background-position: 0 0; +} +.s-position-arr-top-right { + background-position: -11px 0; +} +.s-position-arr-bottom-left { + background-position: 0 -11px; +} +.s-position-arr-bottom-right { + background-position: -11px -11px; +} +.change-position { + position: relative; + display: inline-block; + vertical-align: top; + width: 70px; + margin: -3px 0 0 -3px; +} +.change-position_i { + float: left; + margin: 3px 0 0 3px; +} +.change-position_input:checked + .change-position_label .s-position-arr-top-left { + background-position: -22px 0; +} +.change-position_input:checked + .change-position_label .s-position-arr-top-right { + background-position: -33px 0; +} +.change-position_input:checked + .change-position_label .s-position-arr-bottom-left { + background-position: -22px -11px; +} +.change-position_input:checked + .change-position_label .s-position-arr-bottom-right { + background-position: -33px -11px; +} +.change-position_input:checked ~ .change-position_val { + display: block; +} +.change-position_label { + display: block; + width: 32px; + height: 32px; + margin: 0; + padding: 9px 0 0 9px; + border: 1px solid #dfdedb; + cursor: pointer; +} +.change-position_val { + display: none; + position: absolute; + top: 27px; + left: 82px; + font-size: 12px; + white-space: nowrap; +} +.position-save .position-save_field { + margin-bottom: 10px; +} +.wot-indicator { + display: inline-block; + vertical-align: top; + margin-right: 5px; +} +#WotDescriptionText { + white-space: pre-line; +} +#WotDescriptionText #WotLogo { + cursor: pointer; +} +.adg-wot { + width: 18px; + height: 18px; + display: block; + border: 5px solid #000; + border-radius: 50%; +} +.adg-wot-unknown { + border-color: #ccc; +} +.adg-wot-red { + border-color: #b60000; +} +.adg-wot-lightRed { + border-color: #f21800; +} +.adg-wot-yellow { + border-color: #fac000; +} +.adg-wot-lightGreen { + border-color: #69d225; +} +.adg-wot-green { + border-color: #00ae17; +} +.adg-wot-confidence { + width: 52px; + height: 18px; + display: inline-block; + vertical-align: middle; +} +.adg-wot-confidence-0 { + background-image: url(${___CSS_LOADER_URL_REPLACEMENT_1___}); +} +.adg-wot-confidence-1 { + background-image: url(${___CSS_LOADER_URL_REPLACEMENT_2___}); +} +.adg-wot-confidence-2 { + background-image: url(${___CSS_LOADER_URL_REPLACEMENT_3___}); +} +.adg-wot-confidence-3 { + background-image: url(${___CSS_LOADER_URL_REPLACEMENT_4___}); +} +.adg-wot-confidence-4 { + background-image: url(${___CSS_LOADER_URL_REPLACEMENT_5___}); +} +.adg-wot-confidence-5 { + background-image: url(${___CSS_LOADER_URL_REPLACEMENT_6___}); +} +.confidence-indication, +.wot-indicator { + text-decoration: none; + vertical-align: middle; +} +.confidence-indication:hover, +.wot-indicator:hover { + text-decoration: none; +} +.confidence-indication { + display: inline-block; + margin-right: 10px; +} +.wot-logo { + display: inline-block; + vertical-align: top; + width: 31px; + height: 12px; + background: url(${___CSS_LOADER_URL_REPLACEMENT_7___}) no-repeat 0 0 / cover; + margin-top: 3px; +} +.wot-hide { + display: none; +} +iframe#adguard-assistant-dialog { + position: fixed; + clip: auto; + border-radius: 8px; + box-shadow: 8px 8px 24px 0px rgba(0, 0, 0, 0.1); + z-index: 2147483647; + display: block!important; +} +.sg_hide_element { + display: none!important; +} +img.adguard_sg_selected { + border: 5px solid #0F0 !important; +} +#_sg_div.sg_top { + top: 5px !important; +} +#_sg_div.sg_bottom { + bottom: 5px !important; +} +#_sg_div input { + margin-right: 10px !important; + font-size: 15px !important; +} +#_sg_path_field { + width: 400px !important; +} +#_sg_div .sg_new_line { + clear: both !important; +} +#_sg_div .sg_option { + float: left !important; +} +#_sg_div .adguard_sg_selected_option { + text-decoration: underline; +} +.adguard-placeholder { + background-image: url(${___CSS_LOADER_URL_REPLACEMENT_8___}); +} +.adguard-placeholder-icon { + background-image: url(${___CSS_LOADER_URL_REPLACEMENT_9___}); + background-position: center center; + background-repeat: no-repeat; + height: 100%; +} +.adguard-placeholder-domain { + background: #778b7c; + color: #ffffff; + left: 0; + top: 0; + padding: 2px 4px; + position: relative; +} +@media print { + .adguard-alert, + #adguard-assistant-dialog { + display: none!important; + opacity: 0!important; + visibility: hidden!important; + } +} +.menu-head { + padding: 18px 20px; + cursor: move; + touch-action: none; + -ms-touch-action: none; +} +.menu-head_title { + font-size: 16px; + font-weight: 700; +} +.menu-head_name { + display: inline-block; + vertical-align: top; + text-overflow: ellipsis; + overflow: hidden; + white-space: nowrap; + max-width: 260px; + line-height: 26px; + margin: 0 10px 5px 0; +} +.menu-head_text { + margin: 4px 10px 0 0; + font-size: 12px; +} +.menu-filter { + width: 100%; + display: table; + padding: 20px; +} +.menu-filter_lbl { + display: table-cell; + vertical-align: middle; +} +.menu-filter_val { + display: table-cell; + vertical-align: middle; +} +.menu-filter_label { + position: relative; + width: 30px; + height: 12px; + border-radius: 25px; + background-color: #ed7865; + cursor: pointer; + transition: all 0.3s ease; + float: right; +} +.menu-filter_label:after { + content: ""; + cursor: pointer; + border-radius: 100%; + position: absolute; + left: -3px; + top: -4px; + box-shadow: 0 0 10px 3px rgba(162, 161, 161, 0.3); + width: 20px; + height: 20px; + background-color: #e85037; + transition: all 0.3s ease; +} +.menu-filter_handle { + position: absolute; + width: 20px; + height: 20px; + top: 1px; + left: 1px; + border-radius: 4px; +} +.menu-filter_input:checked + .menu-filter_label { + background-color: #bde5c1; +} +.menu-filter_input:checked + .menu-filter_label:after { + left: 12px; + background-color: #68bc72; +} +.menu__btn { + position: relative; + cursor: pointer; + line-height: 45px; + height: 45px; + background-repeat: no-repeat; + background-position: 20px 50%; + transition: 0.3s ease; + padding: 0 20px 0 60px; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} +.menu__btn:hover { + background-color: rgba(104, 188, 113, 0.2); +} +.menu__btn--clock { + background-image: url(${___CSS_LOADER_URL_REPLACEMENT_10___}); + background-size: 16px 19px; +} +.menu__btn--landscape { + background-image: url(${___CSS_LOADER_URL_REPLACEMENT_11___}); + background-size: 19px 17px; +} +.menu__btn--report { + background-image: url(${___CSS_LOADER_URL_REPLACEMENT_12___}); + background-size: 16px 17px; +} +.menu__btn--security { + background-image: url(${___CSS_LOADER_URL_REPLACEMENT_13___}); + background-size: 15px 16px; +} +.menu__btn--extensions { + background-image: url(${___CSS_LOADER_URL_REPLACEMENT_14___}); + background-size: 18px; +} +.menu__btn--settings { + background-image: url(${___CSS_LOADER_URL_REPLACEMENT_15___}); + background-size: 19px; +} +.menu__btn.hidden { + display: none; +} +body { + color: #3D3D3D; +} +.main { + background: #FFFFFF; +} +.main-popup__btn { + background: #ffffff; + border: 1px solid #cfcfcf; +} +.main-popup__btn:hover { + background-color: #efefef; +} +.main-menu__btn { + background-color: #ffffff; +} +.main-menu__btn:hover { + background-color: #efefef; +} +.main-menu__btn:active, +.main-menu__btn.active { + background-color: #f3f3f3; +} +.main-version { + color: #dfdfdf; +} +.main_close { + color: #7F7F7F; +} +.main_close:hover { + color: #3D3D3D; +} +.head_title { + color: #3D3D3D; +} +.head_text { + color: #5B5B5B; +} +.head::after { + background-color: #D2D2D2; +} +.element-rule_expand-link { + color: #3D3D3D; +} +.element-rule_expand-link_arr { + color: #7F7F7F; +} +.element-rule_expand-link:hover .element-rule_expand-link_arr { + color: #3D3D3D; +} +.element-rule_text { + color: #5B5B5B; +} +.close { + background: url(${___CSS_LOADER_URL_REPLACEMENT_16___}) no-repeat 0 0 / cover; + opacity: 0.6; +} +.close:hover { + opacity: 0.8; +} +.form-control { + color: #3D3D3D; + background-color: #F6F6F6; + border-color: #D2D2D2; +} +input[type="checkbox"] + .form-ui .form-ui-txt { + color: #3D3D3D; +} +input[type="checkbox"] + .form-ui .form-ui-icon--off { + color: #7F7F7F; +} +input[type="checkbox"] + .form-ui .form-ui-icon--on { + color: #67B279; +} +.menu, +.menu-filter { + border-top: 1px solid #e0dfdb; +} +.settings_fieldset { + border-top: 1px solid #e0dfdb; +} +.btn-primary { + color: #3D3D3D; + background-color: #FFFFFF; + border-color: #FFFFFF; +} +.btn-primary:hover, +.btn-primary:focus-visible { + background-color: #F6F6F6; + border-color: #F6F6F6; +} +.btn-primary:active, +.btn-primary.active { + background-color: #E4E4E4; + border-color: #E4E4E4; +} +.btn-primary:disabled, +.btn-primary[disabled], +.btn-primary.disabled { + color: #A4A4A4; + background-color: #FFFFFF; + border-color: #FFFFFF; +} +.btn-cancel { + color: #FFFFFF; + background-color: #F67247; + border-color: #F67247; +} +.btn-cancel:hover, +.btn-cancel:focus-visible { + background-color: #DF6740; + border-color: #DF6740; +} +.btn-cancel:active, +.btn-cancel.active { + background-color: #B55434; + border-color: #B55434; +} +.btn-cancel:disabled, +.btn-cancel[disabled], +.btn-cancel.disabled { + background-color: #FAA98F; + border-color: #FAA98F; +} +.btn-default { + color: #3D3D3D; + background-color: #FFFFFF; + border-color: #3D3D3D; +} +.btn-default:hover, +.btn-default:focus-visible { + background-color: #F6F6F6; +} +.btn-default:active, +.btn-default.active { + background-color: #E4E4E4; +} +.btn-default:disabled, +.btn-default[disabled], +.btn-default.disabled { + color: #A4A4A4; + background-color: #FFFFFF; + border-color: #A4A4A4; +} +.change-position_input:checked + .change-position_label { + border-color: #36ba53; + background: #36ba53; +} +input[type="radio"] + .form-ui .form-ui-txt:before { + background: #ffffff; +} +input[type="radio"]:checked + .form-ui .form-ui-txt:after { + background: #36ba53; +} +.menu-head_title { + color: #343434; +} +.menu-head_text { + color: #343434; +} +.menu-filter_handle { + background: #ffffff; +} +.adg-slide_clue { + color: #3D3D3D; +} +.adg-slide_tick { + background-color: #C0C0C0; +} +.adg-slide_tick--active, +.adg-slide_handle { + background-color: #67B279 !important; +} +.old-btn-primary { + border-color: #36ba53; + background: #36ba53; + color: #fff; +} +.old-btn-primary:hover { + border-color: #30a64a; + background: #30a64a; + color: #fff; +} +.old-btn-primary.active, +.old-btn-primary:active { + border-color: #30a64a; + background: #30a64a; +} +.old-btn-primary.disabled, +.old-btn-primary[disabled] { + border-color: #30a64a; + background: #30a64a; +} +@media (prefers-color-scheme: dark) { + body { + color: #E4E4E4; + } + .main { + background: #3D3D3D; + } + .main-popup__btn { + background: #323232; + border: 1px solid #666; + } + .main-popup__btn:hover { + background-color: #555555; + } + .main-menu__btn { + background-color: #323232; + } + .main-menu__btn:hover { + background-color: #555555; + } + .main-menu__btn:active, + .main-menu__btn.active { + background-color: #4d4d4d; + } + .main-version { + color: #444; + } + .main_close { + color: #C0C0C0; + } + .main_close:hover { + color: #E4E4E4; + } + .head_title { + color: #E4E4E4; + } + .head_text { + color: #D2D2D2; + } + .head::after { + background-color: #5B5B5B; + } + .element-rule_expand-link { + color: #E4E4E4; + } + .element-rule_expand-link_arr { + color: #C0C0C0; + } + .element-rule_expand-link:hover .element-rule_expand-link_arr { + color: #E4E4E4; + } + .element-rule_text { + color: #D2D2D2; + } + .close { + background: url(${___CSS_LOADER_URL_REPLACEMENT_17___}) no-repeat 0 0 / cover; + opacity: 0.7; + } + .close:hover { + opacity: 1; + } + .form-control { + color: #E4E4E4; + background-color: #3D3D3D; + border-color: #5B5B5B; + } + input[type="checkbox"] + .form-ui .form-ui-txt { + color: #E4E4E4; + } + input[type="checkbox"] + .form-ui .form-ui-icon--off { + color: #C0C0C0; + } + .menu, + .menu-filter { + border-top: 1px solid #444; + } + .settings_fieldset { + border-top: 1px solid #444; + } + .btn-primary { + color: #E4E4E4; + background-color: #3D3D3D; + border-color: #3D3D3D; + } + .btn-primary:hover, + .btn-primary:focus-visible { + background-color: #5B5B5B; + border-color: #5B5B5B; + } + .btn-primary:active, + .btn-primary.active { + background-color: #7F7F7F; + border-color: #7F7F7F; + } + .btn-primary:disabled, + .btn-primary[disabled], + .btn-primary.disabled { + background-color: #3D3D3D; + border-color: #3D3D3D; + } + .btn-cancel:disabled, + .btn-cancel[disabled], + .btn-cancel.disabled { + background-color: #7B3923; + border-color: #7B3923; + } + .btn-default { + color: #E4E4E4; + background-color: #3D3D3D; + border-color: #E4E4E4; + } + .btn-default:hover, + .btn-default:focus-visible { + background-color: #5B5B5B; + } + .btn-default:active, + .btn-default.active { + background-color: #7F7F7F; + } + .btn-default:disabled, + .btn-default[disabled], + .btn-default.disabled { + background-color: #3D3D3D; + } + .change-position_input:checked + .change-position_label { + border-color: #4D995F; + background: #4D995F; + } + input[type="radio"] + .form-ui .form-ui-txt:before { + background: #323232; + } + input[type="radio"]:checked + .form-ui .form-ui-txt:after { + background: #4D995F; + } + .menu-head_title { + color: #ccc; + } + .menu-head_text { + color: #ccc; + } + .menu-filter_handle { + background: #323232; + } + .adg-slide_clue { + color: #E4E4E4; + } + .adg-slide_tick { + background-color: #7F7F7F; + } + .old-btn-primary { + border-color: #4D995F; + background: #4D995F; + color: #fff; + } + .old-btn-primary:hover { + border-color: #39774C; + background: #39774C; + color: #fff; + } + .old-btn-primary.active, + .old-btn-primary:active { + border-color: #39774C; + background: #39774C; + } + .old-btn-primary.disabled, + .old-btn-primary[disabled] { + border-color: #39774C; + background: #39774C; + } +} +:host { + display: block!important; + position: relative!important; + width: 0!important; + height: 0!important; + margin: 0!important; + padding: 0!important; + z-index: 2147483647!important; +} +:host ::after, +:host ::before { + display: none!important; +} +`, ""]); +// Exports +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); + + +/***/ }, + +/***/ 9331 +(module, __nested_webpack_exports__, __nested_webpack_require_71734_71753__) { + +"use strict"; +__nested_webpack_require_71734_71753__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_71734_71753__.d(__nested_webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _node_modules_pnpm_css_loader_7_1_3_webpack_5_105_1_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_71734_71753__(4355); +/* harmony import */ var _node_modules_pnpm_css_loader_7_1_3_webpack_5_105_1_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_71734_71753__.n(_node_modules_pnpm_css_loader_7_1_3_webpack_5_105_1_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _node_modules_pnpm_css_loader_7_1_3_webpack_5_105_1_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_71734_71753__(8092); +/* harmony import */ var _node_modules_pnpm_css_loader_7_1_3_webpack_5_105_1_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__nested_webpack_require_71734_71753__.n(_node_modules_pnpm_css_loader_7_1_3_webpack_5_105_1_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _node_modules_pnpm_css_loader_7_1_3_webpack_5_105_1_node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_71734_71753__(8151); +/* harmony import */ var _node_modules_pnpm_css_loader_7_1_3_webpack_5_105_1_node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__nested_webpack_require_71734_71753__.n(_node_modules_pnpm_css_loader_7_1_3_webpack_5_105_1_node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2__); +// Imports + + + +var ___CSS_LOADER_URL_IMPORT_0___ = new URL(/* asset import */ __nested_webpack_require_71734_71753__(4018), __nested_webpack_require_71734_71753__.b); +var ___CSS_LOADER_URL_IMPORT_1___ = new URL(/* asset import */ __nested_webpack_require_71734_71753__(6846), __nested_webpack_require_71734_71753__.b); +var ___CSS_LOADER_URL_IMPORT_2___ = new URL(/* asset import */ __nested_webpack_require_71734_71753__(6263), __nested_webpack_require_71734_71753__.b); +var ___CSS_LOADER_URL_IMPORT_3___ = new URL(/* asset import */ __nested_webpack_require_71734_71753__(3270), __nested_webpack_require_71734_71753__.b); +var ___CSS_LOADER_URL_IMPORT_4___ = new URL(/* asset import */ __nested_webpack_require_71734_71753__(5913), __nested_webpack_require_71734_71753__.b); +var ___CSS_LOADER_URL_IMPORT_5___ = new URL(/* asset import */ __nested_webpack_require_71734_71753__(7162), __nested_webpack_require_71734_71753__.b); +var ___CSS_LOADER_URL_IMPORT_6___ = new URL(/* asset import */ __nested_webpack_require_71734_71753__(7562), __nested_webpack_require_71734_71753__.b); +var ___CSS_LOADER_URL_IMPORT_7___ = new URL(/* asset import */ __nested_webpack_require_71734_71753__(9810), __nested_webpack_require_71734_71753__.b); +var ___CSS_LOADER_URL_IMPORT_8___ = new URL(/* asset import */ __nested_webpack_require_71734_71753__(4486), __nested_webpack_require_71734_71753__.b); +var ___CSS_LOADER_EXPORT___ = _node_modules_pnpm_css_loader_7_1_3_webpack_5_105_1_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_pnpm_css_loader_7_1_3_webpack_5_105_1_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); +var ___CSS_LOADER_URL_REPLACEMENT_0___ = _node_modules_pnpm_css_loader_7_1_3_webpack_5_105_1_node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_0___); +var ___CSS_LOADER_URL_REPLACEMENT_1___ = _node_modules_pnpm_css_loader_7_1_3_webpack_5_105_1_node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_1___); +var ___CSS_LOADER_URL_REPLACEMENT_2___ = _node_modules_pnpm_css_loader_7_1_3_webpack_5_105_1_node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_2___); +var ___CSS_LOADER_URL_REPLACEMENT_3___ = _node_modules_pnpm_css_loader_7_1_3_webpack_5_105_1_node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_3___); +var ___CSS_LOADER_URL_REPLACEMENT_4___ = _node_modules_pnpm_css_loader_7_1_3_webpack_5_105_1_node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_4___); +var ___CSS_LOADER_URL_REPLACEMENT_5___ = _node_modules_pnpm_css_loader_7_1_3_webpack_5_105_1_node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_5___); +var ___CSS_LOADER_URL_REPLACEMENT_6___ = _node_modules_pnpm_css_loader_7_1_3_webpack_5_105_1_node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_6___); +var ___CSS_LOADER_URL_REPLACEMENT_7___ = _node_modules_pnpm_css_loader_7_1_3_webpack_5_105_1_node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_7___); +var ___CSS_LOADER_URL_REPLACEMENT_8___ = _node_modules_pnpm_css_loader_7_1_3_webpack_5_105_1_node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_8___); +// Module +___CSS_LOADER_EXPORT___.push([module.id, `:host { + display: block!important; + position: relative!important; + width: 0!important; + height: 0!important; + margin: 0!important; + padding: 0!important; + z-index: 2147483647!important; +} +:host ::after, +:host ::before { + display: none!important; +} +body { + color: #3D3D3D; +} +.main { + background: #FFFFFF; +} +.main-popup__btn { + background: #ffffff; + border: 1px solid #cfcfcf; +} +.main-popup__btn:hover { + background-color: #efefef; +} +.main-menu__btn { + background-color: #ffffff; +} +.main-menu__btn:hover { + background-color: #efefef; +} +.main-menu__btn:active, +.main-menu__btn.active { + background-color: #f3f3f3; +} +.main-version { + color: #dfdfdf; +} +.main_close { + color: #7F7F7F; +} +.main_close:hover { + color: #3D3D3D; +} +.head_title { + color: #3D3D3D; +} +.head_text { + color: #5B5B5B; +} +.head::after { + background-color: #D2D2D2; +} +.element-rule_expand-link { + color: #3D3D3D; +} +.element-rule_expand-link_arr { + color: #7F7F7F; +} +.element-rule_expand-link:hover .element-rule_expand-link_arr { + color: #3D3D3D; +} +.element-rule_text { + color: #5B5B5B; +} +.close { + background: url(${___CSS_LOADER_URL_REPLACEMENT_0___}) no-repeat 0 0 / cover; + opacity: 0.6; +} +.close:hover { + opacity: 0.8; +} +.form-control { + color: #3D3D3D; + background-color: #F6F6F6; + border-color: #D2D2D2; +} +input[type="checkbox"] + .form-ui .form-ui-txt { + color: #3D3D3D; +} +input[type="checkbox"] + .form-ui .form-ui-icon--off { + color: #7F7F7F; +} +input[type="checkbox"] + .form-ui .form-ui-icon--on { + color: #67B279; +} +.menu, +.menu-filter { + border-top: 1px solid #e0dfdb; +} +.settings_fieldset { + border-top: 1px solid #e0dfdb; +} +.btn-primary { + color: #3D3D3D; + background-color: #FFFFFF; + border-color: #FFFFFF; +} +.btn-primary:hover, +.btn-primary:focus-visible { + background-color: #F6F6F6; + border-color: #F6F6F6; +} +.btn-primary:active, +.btn-primary.active { + background-color: #E4E4E4; + border-color: #E4E4E4; +} +.btn-primary:disabled, +.btn-primary[disabled], +.btn-primary.disabled { + color: #A4A4A4; + background-color: #FFFFFF; + border-color: #FFFFFF; +} +.btn-cancel { + color: #FFFFFF; + background-color: #F67247; + border-color: #F67247; +} +.btn-cancel:hover, +.btn-cancel:focus-visible { + background-color: #DF6740; + border-color: #DF6740; +} +.btn-cancel:active, +.btn-cancel.active { + background-color: #B55434; + border-color: #B55434; +} +.btn-cancel:disabled, +.btn-cancel[disabled], +.btn-cancel.disabled { + background-color: #FAA98F; + border-color: #FAA98F; +} +.btn-default { + color: #3D3D3D; + background-color: #FFFFFF; + border-color: #3D3D3D; +} +.btn-default:hover, +.btn-default:focus-visible { + background-color: #F6F6F6; +} +.btn-default:active, +.btn-default.active { + background-color: #E4E4E4; +} +.btn-default:disabled, +.btn-default[disabled], +.btn-default.disabled { + color: #A4A4A4; + background-color: #FFFFFF; + border-color: #A4A4A4; +} +.change-position_input:checked + .change-position_label { + border-color: #36ba53; + background: #36ba53; +} +input[type="radio"] + .form-ui .form-ui-txt:before { + background: #ffffff; +} +input[type="radio"]:checked + .form-ui .form-ui-txt:after { + background: #36ba53; +} +.menu-head_title { + color: #343434; +} +.menu-head_text { + color: #343434; +} +.menu-filter_handle { + background: #ffffff; +} +.adg-slide_clue { + color: #3D3D3D; +} +.adg-slide_tick { + background-color: #C0C0C0; +} +.adg-slide_tick--active, +.adg-slide_handle { + background-color: #67B279 !important; +} +.old-btn-primary { + border-color: #36ba53; + background: #36ba53; + color: #fff; +} +.old-btn-primary:hover { + border-color: #30a64a; + background: #30a64a; + color: #fff; +} +.old-btn-primary.active, +.old-btn-primary:active { + border-color: #30a64a; + background: #30a64a; +} +.old-btn-primary.disabled, +.old-btn-primary[disabled] { + border-color: #30a64a; + background: #30a64a; +} +@media (prefers-color-scheme: dark) { + body { + color: #E4E4E4; + } + .main { + background: #3D3D3D; + } + .main-popup__btn { + background: #323232; + border: 1px solid #666; + } + .main-popup__btn:hover { + background-color: #555555; + } + .main-menu__btn { + background-color: #323232; + } + .main-menu__btn:hover { + background-color: #555555; + } + .main-menu__btn:active, + .main-menu__btn.active { + background-color: #4d4d4d; + } + .main-version { + color: #444; + } + .main_close { + color: #C0C0C0; + } + .main_close:hover { + color: #E4E4E4; + } + .head_title { + color: #E4E4E4; + } + .head_text { + color: #D2D2D2; + } + .head::after { + background-color: #5B5B5B; + } + .element-rule_expand-link { + color: #E4E4E4; + } + .element-rule_expand-link_arr { + color: #C0C0C0; + } + .element-rule_expand-link:hover .element-rule_expand-link_arr { + color: #E4E4E4; + } + .element-rule_text { + color: #D2D2D2; + } + .close { + background: url(${___CSS_LOADER_URL_REPLACEMENT_1___}) no-repeat 0 0 / cover; + opacity: 0.7; + } + .close:hover { + opacity: 1; + } + .form-control { + color: #E4E4E4; + background-color: #3D3D3D; + border-color: #5B5B5B; + } + input[type="checkbox"] + .form-ui .form-ui-txt { + color: #E4E4E4; + } + input[type="checkbox"] + .form-ui .form-ui-icon--off { + color: #C0C0C0; + } + .menu, + .menu-filter { + border-top: 1px solid #444; + } + .settings_fieldset { + border-top: 1px solid #444; + } + .btn-primary { + color: #E4E4E4; + background-color: #3D3D3D; + border-color: #3D3D3D; + } + .btn-primary:hover, + .btn-primary:focus-visible { + background-color: #5B5B5B; + border-color: #5B5B5B; + } + .btn-primary:active, + .btn-primary.active { + background-color: #7F7F7F; + border-color: #7F7F7F; + } + .btn-primary:disabled, + .btn-primary[disabled], + .btn-primary.disabled { + background-color: #3D3D3D; + border-color: #3D3D3D; + } + .btn-cancel:disabled, + .btn-cancel[disabled], + .btn-cancel.disabled { + background-color: #7B3923; + border-color: #7B3923; + } + .btn-default { + color: #E4E4E4; + background-color: #3D3D3D; + border-color: #E4E4E4; + } + .btn-default:hover, + .btn-default:focus-visible { + background-color: #5B5B5B; + } + .btn-default:active, + .btn-default.active { + background-color: #7F7F7F; + } + .btn-default:disabled, + .btn-default[disabled], + .btn-default.disabled { + background-color: #3D3D3D; + } + .change-position_input:checked + .change-position_label { + border-color: #4D995F; + background: #4D995F; + } + input[type="radio"] + .form-ui .form-ui-txt:before { + background: #323232; + } + input[type="radio"]:checked + .form-ui .form-ui-txt:after { + background: #4D995F; + } + .menu-head_title { + color: #ccc; + } + .menu-head_text { + color: #ccc; + } + .menu-filter_handle { + background: #323232; + } + .adg-slide_clue { + color: #E4E4E4; + } + .adg-slide_tick { + background-color: #7F7F7F; + } + .old-btn-primary { + border-color: #4D995F; + background: #4D995F; + color: #fff; + } + .old-btn-primary:hover { + border-color: #39774C; + background: #39774C; + color: #fff; + } + .old-btn-primary.active, + .old-btn-primary:active { + border-color: #39774C; + background: #39774C; + } + .old-btn-primary.disabled, + .old-btn-primary[disabled] { + border-color: #39774C; + background: #39774C; + } +} +body { + padding: 1vw; + background: transparent; +} +.main { + position: relative; + padding: 8vw 3vw; +} +.main .footer { + letter-spacing: 3vw; +} +.main-version { + position: absolute; + bottom: 0; + right: 7px; + font-size: 5vw; +} +.main-popup { + text-align: center; + display: flex; + flex-direction: column; + align-items: center; + margin: 5vw; + box-shadow: 0 0px 5vw 0 rgba(0, 0, 0, 0.2); +} +.main-popup__logo { + width: 11vw; + height: 11vw; +} +.main-popup__logo.adguard-assistant-button-main-logo { + background-image: url(${___CSS_LOADER_URL_REPLACEMENT_2___}); + background-repeat: no-repeat; +} +.main-popup__title { + font-size: 6vw; + margin: 3vw 0; +} +.main-popup__content { + font-size: 5vw; + padding: 0 3vw; + margin-bottom: 5vw; + border-top: none; +} +.main-popup__btn { + font-size: 5vw; + padding: 2vh 8vw; + border-radius: 3px; + letter-spacing: normal; +} +.main-popup__btn--green { + color: #ffffff; + border: 1px solid #66B574; + background-color: #66B574; + box-shadow: none; +} +.main-popup__btn--green:hover { + background-color: #5ea76b; + color: #fff; +} +.main-popup__btn:focus { + box-shadow: none; +} +.main-menu { + margin: 4vw; + padding: 4vw; + display: flex; + justify-content: space-between; + border-radius: 4vw; + box-shadow: 0 0 4vw -2px rgba(0, 0, 0, 0.3); +} +.main-menu__info { + width: 100%; + text-align: center; +} +.main-menu__btn { + border: 0; + font-size: 0; + width: 12vw; + height: 12vw; + border-radius: 2vw; + background-repeat: no-repeat; + background-position: 50%; + background-size: 100%; + position: relative; +} +.main-menu__btn:disabled { + opacity: 0.5; + pointer-events: none; +} +.main-menu__btn--accept { + background-image: url(${___CSS_LOADER_URL_REPLACEMENT_3___}); +} +.main-menu__btn--preview { + background-image: url(${___CSS_LOADER_URL_REPLACEMENT_4___}); +} +.main-menu__btn--preview:active, +.main-menu__btn--preview.active { + background-image: url(${___CSS_LOADER_URL_REPLACEMENT_5___}); +} +.main-menu__btn--plus { + background-image: url(${___CSS_LOADER_URL_REPLACEMENT_6___}); +} +.main-menu__btn--minus { + background-image: url(${___CSS_LOADER_URL_REPLACEMENT_7___}); +} +.main-menu__btn--close { + background-image: url(${___CSS_LOADER_URL_REPLACEMENT_8___}); +} +`, ""]); +// Exports +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); + + +/***/ }, + +/***/ 4668 +(module, __nested_webpack_exports__, __nested_webpack_require_86435_86454__) { + +"use strict"; +__nested_webpack_require_86435_86454__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_86435_86454__.d(__nested_webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _node_modules_pnpm_css_loader_7_1_3_webpack_5_105_1_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_86435_86454__(4355); +/* harmony import */ var _node_modules_pnpm_css_loader_7_1_3_webpack_5_105_1_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nested_webpack_require_86435_86454__.n(_node_modules_pnpm_css_loader_7_1_3_webpack_5_105_1_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _node_modules_pnpm_css_loader_7_1_3_webpack_5_105_1_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_86435_86454__(8092); +/* harmony import */ var _node_modules_pnpm_css_loader_7_1_3_webpack_5_105_1_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__nested_webpack_require_86435_86454__.n(_node_modules_pnpm_css_loader_7_1_3_webpack_5_105_1_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _node_modules_pnpm_css_loader_7_1_3_webpack_5_105_1_node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_86435_86454__(8151); +/* harmony import */ var _node_modules_pnpm_css_loader_7_1_3_webpack_5_105_1_node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__nested_webpack_require_86435_86454__.n(_node_modules_pnpm_css_loader_7_1_3_webpack_5_105_1_node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2__); +// Imports + + + +var ___CSS_LOADER_URL_IMPORT_0___ = new URL(/* asset import */ __nested_webpack_require_86435_86454__(6873), __nested_webpack_require_86435_86454__.b); +var ___CSS_LOADER_URL_IMPORT_1___ = new URL(/* asset import */ __nested_webpack_require_86435_86454__(3417), __nested_webpack_require_86435_86454__.b); +var ___CSS_LOADER_EXPORT___ = _node_modules_pnpm_css_loader_7_1_3_webpack_5_105_1_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_pnpm_css_loader_7_1_3_webpack_5_105_1_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); +var ___CSS_LOADER_URL_REPLACEMENT_0___ = _node_modules_pnpm_css_loader_7_1_3_webpack_5_105_1_node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_0___); +var ___CSS_LOADER_URL_REPLACEMENT_1___ = _node_modules_pnpm_css_loader_7_1_3_webpack_5_105_1_node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_1___); +// Module +___CSS_LOADER_EXPORT___.push([module.id, `iframe#adguard-assistant-dialog { + position: fixed; + clip: auto; + border-radius: 8px; + box-shadow: 8px 8px 24px 0px rgba(0, 0, 0, 0.1); + z-index: 2147483647; + display: block!important; +} +.sg_hide_element { + display: none!important; +} +img.adguard_sg_selected { + border: 5px solid #0F0 !important; +} +#_sg_div.sg_top { + top: 5px !important; +} +#_sg_div.sg_bottom { + bottom: 5px !important; +} +#_sg_div input { + margin-right: 10px !important; + font-size: 15px !important; +} +#_sg_path_field { + width: 400px !important; +} +#_sg_div .sg_new_line { + clear: both !important; +} +#_sg_div .sg_option { + float: left !important; +} +#_sg_div .adguard_sg_selected_option { + text-decoration: underline; +} +.adguard-placeholder { + background-image: url(${___CSS_LOADER_URL_REPLACEMENT_0___}); +} +.adguard-placeholder-icon { + background-image: url(${___CSS_LOADER_URL_REPLACEMENT_1___}); + background-position: center center; + background-repeat: no-repeat; + height: 100%; +} +.adguard-placeholder-domain { + background: #778b7c; + color: #ffffff; + left: 0; + top: 0; + padding: 2px 4px; + position: relative; +} +@media print { + .adguard-alert, + #adguard-assistant-dialog { + display: none!important; + opacity: 0!important; + visibility: hidden!important; + } +} +`, ""]); +// Exports +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); + + +/***/ }, + +/***/ 8092 +(module) { + +"use strict"; + + +/* + MIT License http://www.opensource.org/licenses/mit-license.php + Author Tobias Koppers @sokra +*/ +module.exports = function (cssWithMappingToString) { + var list = []; + + // return the list of modules as css string + list.toString = function toString() { + return this.map(function (item) { + var content = ""; + var needLayer = typeof item[5] !== "undefined"; + if (item[4]) { + content += "@supports (".concat(item[4], ") {"); + } + if (item[2]) { + content += "@media ".concat(item[2], " {"); + } + if (needLayer) { + content += "@layer".concat(item[5].length > 0 ? " ".concat(item[5]) : "", " {"); + } + content += cssWithMappingToString(item); + if (needLayer) { + content += "}"; + } + if (item[2]) { + content += "}"; + } + if (item[4]) { + content += "}"; + } + return content; + }).join(""); + }; + + // import a list of modules into the list + list.i = function i(modules, media, dedupe, supports, layer) { + if (typeof modules === "string") { + modules = [[null, modules, undefined]]; + } + var alreadyImportedModules = {}; + if (dedupe) { + for (var k = 0; k < this.length; k++) { + var id = this[k][0]; + if (id != null) { + alreadyImportedModules[id] = true; + } + } + } + for (var _k = 0; _k < modules.length; _k++) { + var item = [].concat(modules[_k]); + if (dedupe && alreadyImportedModules[item[0]]) { + continue; + } + if (typeof layer !== "undefined") { + if (typeof item[5] === "undefined") { + item[5] = layer; + } else { + item[1] = "@layer".concat(item[5].length > 0 ? " ".concat(item[5]) : "", " {").concat(item[1], "}"); + item[5] = layer; + } + } + if (media) { + if (!item[2]) { + item[2] = media; + } else { + item[1] = "@media ".concat(item[2], " {").concat(item[1], "}"); + item[2] = media; + } + } + if (supports) { + if (!item[4]) { + item[4] = "".concat(supports); + } else { + item[1] = "@supports (".concat(item[4], ") {").concat(item[1], "}"); + item[4] = supports; + } + } + list.push(item); + } + }; + return list; +}; + +/***/ }, + +/***/ 8151 +(module) { + +"use strict"; + + +module.exports = function (url, options) { + if (!options) { + options = {}; + } + if (!url) { + return url; + } + url = String(url.__esModule ? url.default : url); + + // If url is already wrapped in quotes, remove them + if (/^['"].*['"]$/.test(url)) { + url = url.slice(1, -1); + } + if (options.hash) { + url += options.hash; + } + + // Should url be wrapped? + // See https://drafts.csswg.org/css-values-3/#urls + if (/["'() \t\n]|(%20)/.test(url) || options.needQuotes) { + return "\"".concat(url.replace(/"/g, '\\"').replace(/\n/g, "\\n"), "\""); + } + return url; +}; + +/***/ }, + +/***/ 4355 +(module) { + +"use strict"; + + +module.exports = function (i) { + return i[1]; +}; + +/***/ }, + +/***/ 5640 +(module, __unused_webpack_exports, __nested_webpack_require_93749_93768__) { + + + var result = __nested_webpack_require_93749_93768__(8814); + + if (result && result.__esModule) { + result = result.default; + } + + if (typeof result === "string") { + module.exports = result; + } else { + module.exports = result.toString(); + } + + +/***/ }, + +/***/ 3623 +(module, __unused_webpack_exports, __nested_webpack_require_94130_94149__) { + + + var result = __nested_webpack_require_94130_94149__(5909); + + if (result && result.__esModule) { + result = result.default; + } + + if (typeof result === "string") { + module.exports = result; + } else { + module.exports = result.toString(); + } + + +/***/ }, + +/***/ 6644 +(module, __unused_webpack_exports, __nested_webpack_require_94511_94530__) { + + + var result = __nested_webpack_require_94511_94530__(6826); + + if (result && result.__esModule) { + result = result.default; + } + + if (typeof result === "string") { + module.exports = result; + } else { + module.exports = result.toString(); + } + + +/***/ }, + +/***/ 6501 +(module, __unused_webpack_exports, __nested_webpack_require_94892_94911__) { + + + var result = __nested_webpack_require_94892_94911__(9331); + + if (result && result.__esModule) { + result = result.default; + } + + if (typeof result === "string") { + module.exports = result; + } else { + module.exports = result.toString(); + } + + +/***/ }, + +/***/ 4898 +(module, __unused_webpack_exports, __nested_webpack_require_95273_95292__) { + + + var result = __nested_webpack_require_95273_95292__(4668); + + if (result && result.__esModule) { + result = result.default; + } + + if (typeof result === "string") { + module.exports = result; + } else { + module.exports = result.toString(); + } + + +/***/ }, + +/***/ 3270 +(module) { + +"use strict"; +module.exports = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTUgMTEuNzY2NUwxMC41ODc4IDE3TDE5IDgiIHN0cm9rZT0iIzY3QjI3OSIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8L3N2Zz4K"; + +/***/ }, + +/***/ 1412 +(module) { + +"use strict"; +module.exports = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB2aWV3Qm94PSIwIDAgMTcgMTciIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiAgICA8ZyBpZD0iQXJ0Ym9hcmQiIHN0cm9rZT0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIxIiBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yMi4wMDAwMDAsIC0xNDQuMDAwMDAwKSI+CiAgICAgICAgPGcgaWQ9Ikdyb3VwLTIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIzLjAwMDAwMCwgMTQxLjAwMDAwMCkiIHN0cm9rZT0iIzk3OTc5NyIgc3Ryb2tlLXdpZHRoPSIxLjM1Ij4KICAgICAgICAgICAgPGNpcmNsZSBpZD0iT3ZhbCIgY3g9IjcuODcwMzYxMzMiIGN5PSIxMS4yNzU5NzY2IiByPSI3LjM3ODg1NzQyIj48L2NpcmNsZT4KICAgICAgICAgICAgPHBvbHlsaW5lIGlkPSJMaW5lLTIiIHN0cm9rZS1saW5lY2FwPSJzcXVhcmUiIHBvaW50cz0iNy43Njc5Njg3NSA3LjQ2MzI4MTI1IDcuNzY3OTY4NzUgMTEuOTYzMjgxMiAxMS4zNjc5Njg3IDExLjk2MzI4MTIiPjwvcG9seWxpbmU+CiAgICAgICAgPC9nPgogICAgPC9nPgo8L3N2Zz4K"; + +/***/ }, + +/***/ 6846 +(module) { + +"use strict"; +module.exports = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDEwMCAxMDAiPgogICAgPGxpbmUgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjZWVlIiBzdHJva2Utd2lkdGg9IjIwIiB4MT0iNSIgeTE9IjUiIHgyPSI5NSIgeTI9Ijk1Ii8+CiAgICA8bGluZSBmaWxsPSJub25lIiBzdHJva2U9IiNlZWUiIHN0cm9rZS13aWR0aD0iMjAiIHgxPSI5NSIgeTE9IjUiIHgyPSI1IiB5Mj0iOTUiLz4KPC9zdmc+Cg=="; + +/***/ }, + +/***/ 4018 +(module) { + +"use strict"; +module.exports = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDEwMCAxMDAiPgogICAgPGxpbmUgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwMDAwIiBzdHJva2Utd2lkdGg9IjIwIiB4MT0iNSIgeTE9IjUiIHgyPSI5NSIgeTI9Ijk1Ii8+CiAgICA8bGluZSBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAwMDAiIHN0cm9rZS13aWR0aD0iMjAiIHgxPSI5NSIgeTE9IjUiIHgyPSI1IiB5Mj0iOTUiLz4KPC9zdmc+Cg=="; + +/***/ }, + +/***/ 4486 +(module) { + +"use strict"; +module.exports = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTYuNDI4NTcgNi40Mjg1N0wxNy42MDQzIDE3LjYwNDMiIHN0cm9rZT0iI0E0QTRBNCIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8cGF0aCBkPSJNNi40Mjc3MyAxNy41NzE0TDE3LjYwMzUgNi4zOTU2MyIgc3Ryb2tlPSIjQTRBNEE0IiBzdHJva2Utd2lkdGg9IjEuNSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+Cjwvc3ZnPgo="; + +/***/ }, + +/***/ 7608 +(module) { + +"use strict"; +module.exports = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB2aWV3Qm94PSIwIDAgMjAgMTkiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiAgICA8ZGVmcz4KICAgICAgICA8cGF0aAogICAgICAgICAgICBkPSJNMjcuNjE1NjkzMSwzMjIuMjg4MDg2IEwyMC43Njc5Njg3LDMyMi4yODgwODYgTDIwLjc2Nzk2ODcsMzE1LjQxNjAyNiBMMjEuOTU5OTMxNCwzMTUuNDE2MDI2IEMyMi41MTAyOTA4LDMxNS40MTYwMjYgMjIuOTU2NDQ1MywzMTQuOTY5ODcxIDIyLjk1NjQ0NTMsMzE0LjQxOTUxMiBDMjIuOTU2NDQ1MywzMTMuODY5MTUzIDIyLjUxMDI5MDgsMzEzLjQyMjk5OCAyMS45NTk5MzE0LDMxMy40MjI5OTggTDIwLjc2Nzk2ODcsMzEzLjQyMjk5OCBMMjAuNzY3OTY4NywzMDYuOTE3MTEgTDI1LjkzOTg5MjYsMzA2LjkxNzExIEwyNS45Mzk4OTI2LDMwNi44MTYzNjggQzI1LjkzOTg5MjYsMzA1LjMyNTE5OSAyNy4xNDg3MjM4LDMwNC4xMTYzNjggMjguNjM5ODkyNiwzMDQuMTE2MzY4IEMzMC4xMzEwNjE0LDMwNC4xMTYzNjggMzEuMzM5ODkyNiwzMDUuMzI1MTk5IDMxLjMzOTg5MjYsMzA2LjgxNjM2OCBMMzEuMzM5ODkyNiwzMDYuOTE3MTEgTDM2LjEzODk0NDUsMzA2LjkxNzExIEwzNi4xMzg5NDQ1LDMxMS45MDI1OTggTDM2LjMzMjA4MDEsMzExLjkwMjU5OCBDMzcuODIzMjQ4OSwzMTEuOTAyNTk4IDM5LjAzMjA4MDEsMzEzLjExMTQyOSAzOS4wMzIwODAxLDMxNC42MDI1OTggQzM5LjAzMjA4MDEsMzE2LjA5Mzc2NyAzNy44MjMyNDg5LDMxNy4zMDI1OTggMzYuMzMyMDgwMSwzMTcuMzAyNTk4IEwzNi4xMzg5NDQ1LDMxNy4zMDI1OTggTDM2LjEzODk0NDUsMzIyLjI4ODA4NiBMMjkuNjA4NzIwOSwzMjIuMjg4MDg2IEwyOS42MDg3MjA5LDMyMC41NzE2OSBDMjkuNjA4NzIwOSwzMjAuMDIxMzMgMjkuMTYyNTY2NSwzMTkuNTc1MTc2IDI4LjYxMjIwNywzMTkuNTc1MTc2IEMyOC4wNjE4NDc2LDMxOS41NzUxNzYgMjcuNjE1NjkzMSwzMjAuMDIxMzMgMjcuNjE1NjkzMSwzMjAuNTcxNjkgTDI3LjYxNTY5MzEsMzIyLjI4ODA4NiBaIgogICAgICAgICAgICBpZD0icGF0aC0xIj48L3BhdGg+CiAgICA8L2RlZnM+CiAgICA8ZyBzdHJva2U9Im5vbmUiIHN0cm9rZS13aWR0aD0iMSIgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMjAuMDAwMDAwLCAtMzA0LjAwMDAwMCkiPgogICAgICAgIDxnPgogICAgICAgICAgICA8dXNlIGZpbGwtcnVsZT0iZXZlbm9kZCIgeGxpbms6aHJlZj0iI3BhdGgtMSI+PC91c2U+CiAgICAgICAgICAgIDxwYXRoCiAgICAgICAgICAgICAgICBzdHJva2U9IiM5Nzk3OTciCiAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9IjEuMzUiCiAgICAgICAgICAgICAgICBkPSJNMjYuOTQwNjkzMSwzMjEuNjEzMDg2IEwyNi45NDA2OTMxLDMyMC41NzE2OSBDMjYuOTQwNjkzMSwzMTkuNjQ4NTM4IDI3LjY4OTA1NTQsMzE4LjkwMDE3NiAyOC42MTIyMDcsMzE4LjkwMDE3NiBDMjkuNTM1MzU4NywzMTguOTAwMTc2IDMwLjI4MzcyMDksMzE5LjY0ODUzOCAzMC4yODM3MjA5LDMyMC41NzE2OSBMMzAuMjgzNzIwOSwzMjEuNjEzMDg2IEwzNS40NjM5NDQ1LDMyMS42MTMwODYgTDM1LjQ2Mzk0NDUsMzE2LjYyNzU5OCBMMzYuMzMyMDgwMSwzMTYuNjI3NTk4IEMzNy40NTA0NTY3LDMxNi42Mjc1OTggMzguMzU3MDgwMSwzMTUuNzIwOTc1IDM4LjM1NzA4MDEsMzE0LjYwMjU5OCBDMzguMzU3MDgwMSwzMTMuNDg0MjIxIDM3LjQ1MDQ1NjcsMzEyLjU3NzU5OCAzNi4zMzIwODAxLDMxMi41Nzc1OTggTDM1LjQ2Mzk0NDUsMzEyLjU3NzU5OCBMMzUuNDYzOTQ0NSwzMDcuNTkyMTEgTDMwLjY2NDg5MjYsMzA3LjU5MjExIEwzMC42NjQ4OTI2LDMwNi44MTYzNjggQzMwLjY2NDg5MjYsMzA1LjY5Nzk5MSAyOS43NTgyNjkyLDMwNC43OTEzNjggMjguNjM5ODkyNiwzMDQuNzkxMzY4IEMyNy41MjE1MTYsMzA0Ljc5MTM2OCAyNi42MTQ4OTI2LDMwNS42OTc5OTEgMjYuNjE0ODkyNiwzMDYuODE2MzY4IEwyNi42MTQ4OTI2LDMwNy41OTIxMSBMMjEuNDQyOTY4NywzMDcuNTkyMTEgTDIxLjQ0Mjk2ODcsMzEyLjc0Nzk5OCBMMjEuOTU5OTMxNCwzMTIuNzQ3OTk4IEMyMi44ODMwODMxLDMxMi43NDc5OTggMjMuNjMxNDQ1MywzMTMuNDk2MzYgMjMuNjMxNDQ1MywzMTQuNDE5NTEyIEMyMy42MzE0NDUzLDMxNS4zNDI2NjQgMjIuODgzMDgzMSwzMTYuMDkxMDI2IDIxLjk1OTkzMTQsMzE2LjA5MTAyNiBMMjEuNDQyOTY4NywzMTYuMDkxMDI2IEwyMS40NDI5Njg3LDMyMS42MTMwODYgTDI2Ljk0MDY5MzEsMzIxLjYxMzA4NiBaIj48L3BhdGg+CiAgICAgICAgPC9nPgogICAgPC9nPgo8L3N2Zz4K"; + +/***/ }, + +/***/ 7162 +(module) { + +"use strict"; +module.exports = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTQgMTBDNCAxMCA4IDE0Ljc3MiAxMiAxNC43NzJDMTYgMTQuNzcyIDIwIDEwIDIwIDEwIiBzdHJva2U9IiM2N0IyNzkiIHN0cm9rZS13aWR0aD0iMS41IiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPHBhdGggZD0iTTEyIDE1VjE3IiBzdHJva2U9IiM2N0IyNzkiIHN0cm9rZS13aWR0aD0iMS41IiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPHBhdGggZD0iTTE4IDEzVjE1IiBzdHJva2U9IiM2N0IyNzkiIHN0cm9rZS13aWR0aD0iMS41IiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPHBhdGggZD0iTTYgMTNWMTUiIHN0cm9rZT0iIzY3QjI3OSIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8L3N2Zz4K"; + +/***/ }, + +/***/ 5913 +(module) { + +"use strict"; +module.exports = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik00IDExLjc3MkM2LjY2NjY3IDguNTkwNjUgOS4zMzMzMyA3IDEyIDdDMTQuNjY2NyA3IDE3LjMzMzMgOC41OTA2NSAyMCAxMS43NzJDMjAgMTEuNzcyIDE2IDE2Ljc3MiAxMiAxNi43NzJDOCAxNi43NzIgNCAxMS43NzIgNCAxMS43NzJaIiBzdHJva2U9IiM2N0IyNzkiIHN0cm9rZS13aWR0aD0iMS41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xMiAxMEMxMy4xMDQ2IDEwIDE0IDEwLjg5NTQgMTQgMTJDMTQgMTMuMTA0NiAxMy4xMDQ2IDE0IDEyIDE0QzEwLjg5NTQgMTQgMTAgMTMuMTA0NiAxMCAxMkMxMCAxMC44OTU0IDEwLjg5NTQgMTAgMTIgMTBaIiBzdHJva2U9IiM2N0IyNzkiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjwvc3ZnPgo="; + +/***/ }, + +/***/ 4117 +(module) { + +"use strict"; +module.exports = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB2aWV3Qm94PSIwIDAgMTkgMTciIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiAgICA8ZGVmcz4KICAgICAgICA8cmVjdCBpZD0icGF0aC0xIiB4PSIwLjc2Nzk2ODc1IiB5PSIwLjk4MDY2NDA2MyIgd2lkdGg9IjE4IiBoZWlnaHQ9IjE1Ljg4MDUxNzYiIHJ4PSIxLjgiPjwvcmVjdD4KICAgIDwvZGVmcz4KICAgIDxnIHN0cm9rZT0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIxIiBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yMC4wMDAwMDAsIC0xODQuMDAwMDAwKSI+CiAgICAgICAgPGcgaWQ9Ikdyb3VwLTMiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIwLjAwMDAwMCwgMTg0LjAwMDAwMCkiPgogICAgICAgICAgICA8ZyBpZD0iUmVjdGFuZ2xlIj4KICAgICAgICAgICAgICAgIDx1c2UgZmlsbC1ydWxlPSJldmVub2RkIiB4bGluazpocmVmPSIjcGF0aC0xIj48L3VzZT4KICAgICAgICAgICAgICAgIDxyZWN0IHN0cm9rZT0iIzk3OTc5NyIgc3Ryb2tlLXdpZHRoPSIxLjM1IiB4PSIxLjQ0Mjk2ODc1IiB5PSIxLjY1NTY2NDA2IiB3aWR0aD0iMTYuNjUiIGhlaWdodD0iMTQuNTMwNTE3NiIgcng9IjEuOCI+PC9yZWN0PgogICAgICAgICAgICA8L2c+CiAgICAgICAgICAgIDxwb2x5bGluZSBpZD0iTGluZS0zIiBzdHJva2U9IiM5Nzk3OTciIHN0cm9rZS13aWR0aD0iMS4zNSIgc3Ryb2tlLWxpbmVjYXA9InNxdWFyZSIgcG9pbnRzPSIxLjYyNjY2MDE2IDEzLjA3MTMzNzkgNS4yMjY2NjAxNiA5LjQ3MTMzNzg5IDguMTc0MDcyMjcgMTIuMTE1NTI3MyAxMi45Mjk4MzQgNi43MjgyNzE0OCAxNy44Njc5Njg3IDEyLjMzMzA1NjYiPjwvcG9seWxpbmU+CiAgICAgICAgPC9nPgogICAgPC9nPgo8L3N2Zz4K"; + +/***/ }, + +/***/ 6263 +(module) { + +"use strict"; +module.exports = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB2aWV3Qm94PSIwIDAgMzUgMzYiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiAgICA8ZyBzdHJva2U9Im5vbmUiIHN0cm9rZS13aWR0aD0iMSIgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTY0LjAwMDAwMCwgLTIxOS4wMDAwMDApIj4KICAgICAgICA8ZyBpZD0iMyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNDAuMDAwMDAwLCAxOTAuMDAwMDAwKSI+CiAgICAgICAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEyNC41MDAwMDAsIDI5LjQxNDA2MikiPgogICAgICAgICAgICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC40NTM2NTYsIDAuMjI2ODI4KSI+CiAgICAgICAgICAgICAgICAgICAgPGc+CiAgICAgICAgICAgICAgICAgICAgICAgIDxnPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPSJNMTYuNzE1NzQ5MiwwIEMxMS40OTA5MTk1LDAgNS4xODg0Njg3NywxLjI2NTU4MzUxIDUuMTI2MjAxMTRlLTA2LDQuMDUxMjIyMzkgQzUuMTI2MjAxMTRlLTA2LDEwLjA2NzQ0OTUgLTAuMDcxNjEzNjMyNCwyNS4wNTU2OTI1IDE2LjcxNTc0OTIsMzUuMjk2Njc5OCBDMzMuNTAzNDgzLDI1LjA1NTY5MjUgMzMuNDMyMjM1NCwxMC4wNjc0NDk1IDMzLjQzMjIzNTQsNC4wNTEyMjIzOSBDMjguMjQzNDAwNiwxLjI2NTU4MzUxIDIxLjk0MDk0OTksMCAxNi43MTU3NDkyLDAgTDE2LjcxNTc0OTIsMCBaIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPSJQYXRoIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9IiM2OEJDNzEiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNi42OTg2NzQzLDM1LjI4NjI1ODIgQy0wLjA3MTU2NTA2MDUsMjUuMDQ1NTI2OCA1LjEyNjIwMTEzZS0wNiwxMC4wNjU0MDkxIDUuMTI2MjAxMTNlLTA2LDQuMDUxMjIyMzkgQzUuMTgyODE4MDIsMS4yNjg2MTczNCAxMS40NzcxOTI5LDAuMDAyNzU4NDkxMjQgMTYuNjk4Njc0Myw0LjUwMzc4MzExZS0wNiBMMTYuNjk4Njc0MywzNS4yODYyNjE3IFoiIGlkPSJDb21iaW5lZC1TaGFwZSIgZmlsbD0iIzY3QjI3OSI+PC9wYXRoPgogICAgICAgICAgICAgICAgICAgICAgICA8L2c+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPSJNMTYuMTA2MDI0NywyMy41NTEwOTQgTDI2LjIxNDMxNTUsOS41MTgwMTg2OSBDMjUuNDczNjAwNSw4LjkwNjQ3MjQ5IDI0LjgyMzg4NzYsOS4zMzgwODkxNiAyNC40NjYyMjgxLDkuNjcyMjQ0IEwyNC40NTMxNzc0LDkuNjczMzE1MDEgTDE2LjAyNDg5ODcsMTguNzA0NDIwOCBMMTIuODQ5MzQ3NywxNC43NjgxMDUzIEMxMS4zMzQ0MDkxLDEyLjk2NTI0IDkuMjc0ODY4NjYsMTQuMzQwNDE1NyA4Ljc5Mzc1NjYyLDE0LjcwMzg0NDggTDE2LjEwNjAyNDcsMjMuNTUxMDk0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9IkZpbGwtMTEiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPSIjRkZGRkZGIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPC9nPgogICAgICAgICAgICAgICAgPC9nPgogICAgICAgICAgICA8L2c+CiAgICAgICAgPC9nPgogICAgPC9nPgo8L3N2Zz4K"; + +/***/ }, + +/***/ 9810 +(module) { + +"use strict"; +module.exports = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTEwIDZWMTBINiIgc3Ryb2tlPSIjQTRBNEE0IiBzdHJva2Utd2lkdGg9IjEuNSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIGQ9Ik0xMCAxOFYxNEg2IiBzdHJva2U9IiNBNEE0QTQiIHN0cm9rZS13aWR0aD0iMS41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggZD0iTTE0IDZWMTBIMTgiIHN0cm9rZT0iI0E0QTRBNCIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8cGF0aCBkPSJNMTQgMThWMTRIMTgiIHN0cm9rZT0iI0E0QTRBNCIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8L3N2Zz4K"; + +/***/ }, + +/***/ 7562 +(module) { + +"use strict"; +module.exports = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTYgMTBWNkgxME02IDE0VjE4SDEwTTE4IDEwVjZIMTRNMTggMTRWMThIMTQiIHN0cm9rZT0iI0E0QTRBNCIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8L3N2Zz4K"; + +/***/ }, + +/***/ 322 +(module) { + +"use strict"; +module.exports = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiCiAgICAgd2lkdGg9IjQwMCIgaGVpZ2h0PSIyMDAiIHZpZXdCb3g9IjAgMCA0MDAgMjAwIj4KICAgIDxkZWZzPgogICAgICAgIDxnIGlkPSJhcnIiPgogICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjE4LjgsODQuNSAxOC44LDMyIDg2LjcsMTAwIDEwMCw4Ni43IDMyLDE4LjggODQuNSwxOC44IDg0LjUsMCAxOC44LDAgMCwwIDAsMTguOAogICAgICAgICAgICAgICAgMCw4NC41IAkiLz4KICAgICAgICA8L2c+CiAgICA8L2RlZnM+CgogICAgPHVzZSB4bGluazpocmVmPSIjYXJyIiBmaWxsPSIjYWJhYmFiIi8+CiAgICA8dXNlIHhsaW5rOmhyZWY9IiNhcnIiIGZpbGw9IiNhYmFiYWIiIHRyYW5zZm9ybT0icm90YXRlKDkwIDEwMCAxMDApIi8+CiAgICA8dXNlIHhsaW5rOmhyZWY9IiNhcnIiIGZpbGw9IiNhYmFiYWIiIHRyYW5zZm9ybT0icm90YXRlKDE4MCAxMDAgMTAwKSIvPgogICAgPHVzZSB4bGluazpocmVmPSIjYXJyIiBmaWxsPSIjYWJhYmFiIiB0cmFuc2Zvcm09InJvdGF0ZSgyNzAgMTAwIDEwMCkiLz4KCiAgICA8dXNlIHhsaW5rOmhyZWY9IiNhcnIiIGZpbGw9IiNmZmYiIHg9IjIwMCIvPgogICAgPHVzZSB4bGluazpocmVmPSIjYXJyIiBmaWxsPSIjZmZmIiB5PSItMjAwIiB0cmFuc2Zvcm09InJvdGF0ZSg5MCAxMDAgMTAwKSIvPgogICAgPHVzZSB4bGluazpocmVmPSIjYXJyIiBmaWxsPSIjZmZmIiB4PSItMjAwIiB0cmFuc2Zvcm09InJvdGF0ZSgxODAgMTAwIDEwMCkiLz4KICAgIDx1c2UgeGxpbms6aHJlZj0iI2FyciIgZmlsbD0iI2ZmZiIgeT0iMjAwIiB0cmFuc2Zvcm09InJvdGF0ZSgyNzAgMTAwIDEwMCkiLz4KPC9zdmc+Cg=="; + +/***/ }, + +/***/ 384 +(module) { + +"use strict"; +module.exports = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB2aWV3Qm94PSIwIDAgMTcgMTgiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiAgICA8ZyBzdHJva2U9Im5vbmUiIHN0cm9rZS13aWR0aD0iMSIgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMjIuMDAwMDAwLCAtMjI0LjAwMDAwMCkiPgogICAgICAgIDxwYXRoIGQ9Ik0yMi44MTc1NzgxLDIzNC40MTc0NTUgTDIyLjgxNzU3ODEsMjQwLjU1OTc0NyBMMzYuODk2MDY2LDIzMi43MjMwODkgTDIyLjgxNzU3ODEsMjI1LjY5OTEyMSBMMjIuODE3NTc4MSwyMzEuMDgwNTcyIEwyNS45Nzg4MzYzLDIzMi42NTc3NzEgTDIyLjgxNzU3ODEsMjM0LjQxNzQ1NSBaIiBpZD0iQ29tYmluZWQtU2hhcGUiIHN0cm9rZT0iIzk3OTc5NyIgc3Ryb2tlLXdpZHRoPSIxLjM1Ij48L3BhdGg+CiAgICA8L2c+Cjwvc3ZnPgo="; + +/***/ }, + +/***/ 7988 +(module) { + +"use strict"; +module.exports = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiAgICA8ZyBzdHJva2U9Im5vbmUiIHN0cm9rZS13aWR0aD0iMSIgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMjEuMDAwMDAwLCAtMjYzLjAwMDAwMCkiPgogICAgICAgIDxwYXRoIGQ9Ik0zMC4wMjM1ODk1LDI4MC4xMTkwMjQgQzI5Ljk3MTAwMTYsMjgwLjExOTAyNCAyOS45MTgzNjI1LDI4MC4xMTA4OTggMjkuODY3NjY1NSwyODAuMDk0NjQ3IEMyOC4xNjM1OTE1LDI3OS41NDg3ODUgMjYuNzEyNzk4MSwyNzguNTAxNzc5IDI1LjU1NTUwNTcsMjc2Ljk4Mjc1OSBDMjQuNjQ0MzkwMywyNzUuNzg2ODMxIDIzLjkxNDg1NCwyNzQuMjk4MzczIDIzLjM4NzI4ODEsMjcyLjU1ODcyOSBDMjIuNDk3MzMwNSwyNjkuNjI0NDg1IDIyLjQ4NzEwOTQsMjY3LjAxMDUyMiAyMi40ODcxMDk0LDI2Ni45MDA2OTYgQzIyLjQ4NzEwOTQsMjY2LjYzNzUwMSAyMi42ODcwMzU1LDI2Ni40MTcyODYgMjIuOTQ5MDU1MywyNjYuMzkxOTg4IEMyMi45ODg1MDksMjY2LjM4ODE1NSAyNi45NTc2OTc0LDI2NS45ODA2ODggMjkuNzIzMjkxNCwyNjMuOTcyMjc5IEMyOS45MDIzNjY0LDI2My44NDIxNjMgMzAuMTQ0ODYzNywyNjMuODQyMzE2IDMwLjMyMzkzODcsMjYzLjk3MjMzIEMzMy4wODg3NjYyLDI2NS45ODA2ODggMzcuMDU4NDY1NiwyNjYuMzg4MTU1IDM3LjA5ODIyNTksMjY2LjM5MjAzOSBDMzcuMzYwMDQxMywyNjYuNDE3NTkyIDM3LjU1OTkxNjMsMjY2LjYzNzcwNSAzNy41NTk5MTYzLDI2Ni45MDA2OTYgQzM3LjU1OTkxNjMsMjY3LjAxMDUyMiAzNy41NDk2OTUyLDI2OS42MjQ0ODUgMzYuNjU5Nzg4NywyNzIuNTU4NzggQzM2LjEzMjE3MTcsMjc0LjI5ODQyNCAzNS40MDI2ODY1LDI3NS43ODY4ODIgMzQuNDkxNTcxMSwyNzYuOTgyODExIEMzMy4zMzQzMjk5LDI3OC41MDE4MyAzMS44ODM1MzY1LDI3OS41NDg4MzYgMzAuMTc5NDYyNCwyODAuMDk0Njk4IEMzMC4xMjg3NjU0LDI4MC4xMTA4OTggMzAuMDc2MTc3NSwyODAuMTE5MDI0IDMwLjAyMzU4OTUsMjgwLjExOTAyNCBMMzAuMDIzNTg5NSwyODAuMTE5MDI0IFoiIGlkPSJQYXRoIiBzdHJva2U9IiM5Nzk3OTciIHN0cm9rZS13aWR0aD0iMS4zNSI+PC9wYXRoPgogICAgPC9nPgo8L3N2Zz4K"; + +/***/ }, + +/***/ 7501 +(module) { + +"use strict"; +module.exports = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB2aWV3Qm94PSIwIDAgMTkgMTkiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiAgICA8ZyBzdHJva2U9Im5vbmUiIHN0cm9rZS13aWR0aD0iMSIgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMjAuMDAwMDAwLCAtMzQzLjAwMDAwMCkiPgogICAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIwLjE0MjM4MywgMzQzLjMwMzQ2NykiIHN0cm9rZT0iIzk3OTc5NyIgc3Ryb2tlLXdpZHRoPSIxLjM1Ij4KICAgICAgICAgICAgPHBhdGgKICAgICAgICAgICAgICAgIGQ9Ik03LjcxMTUyMzQ0LDEuOTAwNjM0NzcgTDcuNzExNTIzNDQsMi44OTYzNDMxNSBMNy4yMjkwNjY5NCwzLjAzOTkyOTIyIEM2LjgxMTM1NTQzLDMuMTY0MjQ2MjUgNi40MDg2MjIwOCwzLjMzMTQ2NDY4IDYuMDI2NDg4NDEsMy41Mzg1MzQ3NyBMNS41ODM3MDgzMiwzLjc3ODQ2Nzg2IEw0Ljg3OTEwMjQyLDMuMDczODYxOTYgQzQuNDM5NzYyNiwyLjYzNDUyMjE0IDMuNzI3NDUxOTksMi42MzQ1MjIxNCAzLjI4ODExMjE3LDMuMDczODYxOTYgTDMuMDAyMjMxMSwzLjM1OTc0MzAzIEMyLjU2Mjg5MTI4LDMuNzk5MDgyODUgMi41NjI4OTEyOCw0LjUxMTM5MzQ2IDMuMDAyMjMxMSw0Ljk1MDczMzI4IEwzLjcwNjgzNyw1LjY1NTMzOTE4IEwzLjQ2NjkwMzkxLDYuMDk4MTE5MjcgQzMuMjU5ODMzODIsNi40ODAyNTI5MyAzLjA5MjYxNTM5LDYuODgyOTg2MjkgMi45NjgyOTgzNiw3LjMwMDY5NzggTDIuODI0NzEyMjksNy43ODMxNTQzIEwxLjgyOTAwMzkxLDcuNzgzMTU0MyBDMS4yMDc2ODM1Niw3Ljc4MzE1NDMgMC43MDQwMDM5MDYsOC4yODY4MzM5NSAwLjcwNDAwMzkwNiw4LjkwODE1NDMgTDAuNzA0MDAzOTA2LDkuMzEyNDUxMTcgQzAuNzA0MDAzOTA2LDkuOTMzNzcxNTIgMS4yMDc2ODM1NiwxMC40Mzc0NTEyIDEuODI5MDAzOTEsMTAuNDM3NDUxMiBMMi44MjQ3MTIyOSwxMC40Mzc0NTEyIEwyLjk2ODI5ODM2LDEwLjkxOTkwNzcgQzMuMDkyNjE1MzksMTEuMzM3NjE5MiAzLjI1OTgzMzgyLDExLjc0MDM1MjUgMy40NjY5MDM5MSwxMi4xMjI0ODYyIEwzLjcwNjgzNywxMi41NjUyNjYzIEwzLjAwMjIzMTEsMTMuMjY5ODcyMiBDMi41NjI4OTEyOCwxMy43MDkyMTIgMi41NjI4OTEyOCwxNC40MjE1MjI2IDMuMDAyMjMxMSwxNC44NjA4NjI0IEwzLjI4ODExMjE3LDE1LjE0Njc0MzUgQzMuNzI3NDUxOTksMTUuNTg2MDgzMyA0LjQzOTc2MjYsMTUuNTg2MDgzMyA0Ljg3OTEwMjQyLDE1LjE0Njc0MzUgTDUuNTgzNzA4MzIsMTQuNDQyMTM3NiBMNi4wMjY0ODg0MSwxNC42ODIwNzA3IEM2LjQwODYyMjA4LDE0Ljg4OTE0MDggNi44MTEzNTU0MywxNS4wNTYzNTkyIDcuMjI5MDY2OTQsMTUuMTgwNjc2MiBMNy43MTE1MjM0NCwxNS4zMjQyNjIzIEw3LjcxMTUyMzQ0LDE2LjMxOTk3MDcgQzcuNzExNTIzNDQsMTYuOTQxMjkxIDguMjE1MjAzMDksMTcuNDQ0OTcwNyA4LjgzNjUyMzQ0LDE3LjQ0NDk3MDcgTDkuMjQwODIwMzEsMTcuNDQ0OTcwNyBDOS44NjIxNDA2NiwxNy40NDQ5NzA3IDEwLjM2NTgyMDMsMTYuOTQxMjkxIDEwLjM2NTgyMDMsMTYuMzE5OTcwNyBMMTAuMzY1ODIwMywxNS4zMjQyNjIzIEwxMC44NDgyNzY4LDE1LjE4MDY3NjIgQzExLjI2NTk4ODMsMTUuMDU2MzU5MiAxMS42Njg3MjE3LDE0Ljg4OTE0MDggMTIuMDUwODU1MywxNC42ODIwNzA3IEwxMi40OTM2MzU0LDE0LjQ0MjEzNzYgTDEzLjE5ODI0MTMsMTUuMTQ2NzQzNSBDMTMuNjM3NTgxMiwxNS41ODYwODMzIDE0LjM0OTg5MTgsMTUuNTg2MDgzMyAxNC43ODkyMzE2LDE1LjE0Njc0MzUgTDE1LjA3NTExMjYsMTQuODYwODYyNCBDMTUuNTE0NDUyNSwxNC40MjE1MjI2IDE1LjUxNDQ1MjUsMTMuNzA5MjEyIDE1LjA3NTExMjYsMTMuMjY5ODcyMiBMMTQuMzcwNTA2NywxMi41NjUyNjYzIEwxNC42MTA0Mzk4LDEyLjEyMjQ4NjIgQzE0LjgxNzUwOTksMTEuNzQwMzUyNSAxNC45ODQ3Mjg0LDExLjMzNzYxOTIgMTUuMTA5MDQ1NCwxMC45MTk5MDc3IEwxNS4yNTI2MzE1LDEwLjQzNzQ1MTIgTDE2LjI0ODMzOTgsMTAuNDM3NDUxMiBDMTYuODY5NjYwMiwxMC40Mzc0NTEyIDE3LjM3MzMzOTgsOS45MzM3NzE1MiAxNy4zNzMzMzk4LDkuMzEyNDUxMTcgTDE3LjM3MzMzOTgsOC45MDgxNTQzIEMxNy4zNzMzMzk4LDguMjg2ODMzOTUgMTYuODY5NjYwMiw3Ljc4MzE1NDMgMTYuMjQ4MzM5OCw3Ljc4MzE1NDMgTDE1LjI1MjYzMTUsNy43ODMxNTQzIEwxNS4xMDkwNDU0LDcuMzAwNjk3OCBDMTQuOTg0NzI4NCw2Ljg4Mjk4NjI5IDE0LjgxNzUwOTksNi40ODAyNTI5MyAxNC42MTA0Mzk4LDYuMDk4MTE5MjcgTDE0LjM3MDUwNjcsNS42NTUzMzkxOCBMMTUuMDc1MTEyNiw0Ljk1MDczMzI4IEMxNS41MTQ0NTI1LDQuNTExMzkzNDYgMTUuNTE0NDUyNSwzLjc5OTA4Mjg1IDE1LjA3NTExMjYsMy4zNTk3NDMwMyBMMTQuNzg5MjMxNiwzLjA3Mzg2MTk2IEMxNC4zNDk4OTE4LDIuNjM0NTIyMTQgMTMuNjM3NTgxMiwyLjYzNDUyMjE0IDEzLjE5ODI0MTMsMy4wNzM4NjE5NiBMMTIuNDkzNjM1NCwzLjc3ODQ2Nzg2IEwxMi4wNTA4NTUzLDMuNTM4NTM0NzcgQzExLjY2ODcyMTcsMy4zMzE0NjQ2OCAxMS4yNjU5ODgzLDMuMTY0MjQ2MjUgMTAuODQ4Mjc2OCwzLjAzOTkyOTIyIEwxMC4zNjU4MjAzLDIuODk2MzQzMTUgTDEwLjM2NTgyMDMsMS45MDA2MzQ3NyBDMTAuMzY1ODIwMywxLjI3OTMxNDQyIDkuODYyMTQwNjYsMC43NzU2MzQ3NjYgOS4yNDA4MjAzMSwwLjc3NTYzNDc2NiBMOC44MzY1MjM0NCwwLjc3NTYzNDc2NiBDOC4yMTUyMDMwOSwwLjc3NTYzNDc2NiA3LjcxMTUyMzQ0LDEuMjc5MzE0NDIgNy43MTE1MjM0NCwxLjkwMDYzNDc3IFoiCiAgICAgICAgICAgICAgICBpZD0iQ29tYmluZWQtU2hhcGUiPjwvcGF0aD4KICAgICAgICAgICAgPGNpcmNsZSBpZD0iT3ZhbC0xNSIgY3g9IjkuMDM4NjcxODgiIGN5PSI5LjExMDMwMjczIiByPSIxLjgiPjwvY2lyY2xlPgogICAgICAgIDwvZz4KICAgIDwvZz4KPC9zdmc+Cg=="; + +/***/ }, + +/***/ 158 +(module) { + +"use strict"; +module.exports = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDUyIDE4Ij4KICAgIDxwYXRoIGQ9Ik01LjM1Myw3LjQxMiBMNS4zMDQsNy4zNjMgQzcuMTIxLDcuMTI1IDguNTI5LDUuNTg3IDguNTI5LDMuNzA2IEM4LjUyOSwxLjY1OSA2Ljg3LDAgNC44MjQsMCBDMi43NzcsMCAxLjExOCwxLjY1OSAxLjExOCwzLjcwNiBDMS4xMTgsNS41NzIgMi41MDIsNy4wOTkgNC4yOTQsNy4zNTggTDQuMjk0LDcuNDEyIEMxLjExOCw3LjQxMiAwLjA1OSw5LjUyOSAwLjA1OSw5LjUyOSBMMS4xMTgsMTUuODgyIEMxLjExOCwxNi45MzggMi40NzUsMTcuODA2IDQuMjQ0LDE3Ljk2NyBMNC4yOTQsMTggTDUuMzUzLDE4IEw1LjQwMywxNy45NjcgQzcuMTcyLDE3LjgwNiA4LjUyOSwxNi45MzggOC41MjksMTUuODgyIEw5LjU4OCw5LjUyOSBDOS41ODgsOS41MjkgOC41MjksNy40MTIgNS4zNTMsNy40MTIgeiIgZmlsbD0iI0Q2RDZENiIvPgogICAgPHBhdGggZD0iTTE1Ljk0MSw3LjQxMiBMMTUuODkyLDcuMzYzIEMxNy43MDksNy4xMjUgMTkuMTE4LDUuNTg3IDE5LjExOCwzLjcwNiBDMTkuMTE4LDEuNjU5IDE3LjQ1OCwwIDE1LjQxMiwwIEMxMy4zNjUsMCAxMS43MDYsMS42NTkgMTEuNzA2LDMuNzA2IEMxMS43MDYsNS41NzIgMTMuMDksNy4wOTkgMTQuODgyLDcuMzU4IEwxNC44ODIsNy40MTIgQzExLjcwNiw3LjQxMiAxMC42NDcsOS41MjkgMTAuNjQ3LDkuNTI5IEwxMS43MDYsMTUuODgyIEMxMS43MDYsMTYuOTM4IDEzLjA2MywxNy44MDYgMTQuODMzLDE3Ljk2NyBMMTQuODgyLDE4IEwxNS45NDEsMTggTDE1Ljk5MSwxNy45NjcgQzE3Ljc2LDE3LjgwNiAxOS4xMTgsMTYuOTM4IDE5LjExOCwxNS44ODIgTDIwLjE3Niw5LjUyOSBDMjAuMTc2LDkuNTI5IDE5LjExOCw3LjQxMiAxNS45NDEsNy40MTIgeiIgZmlsbD0iI0Q2RDZENiIvPgogICAgPHBhdGggZD0iTTI2LjUyOSw3LjQxMiBMMjYuNDgxLDcuMzYzIEMyOC4yOTgsNy4xMjUgMjkuNzA2LDUuNTg3IDI5LjcwNiwzLjcwNiBDMjkuNzA2LDEuNjU5IDI4LjA0NywwIDI2LDAgQzIzLjk1MywwIDIyLjI5NCwxLjY1OSAyMi4yOTQsMy43MDYgQzIyLjI5NCw1LjU3MiAyMy42NzgsNy4wOTkgMjUuNDcxLDcuMzU4IEwyNS40NzEsNy40MTIgQzIyLjI5NCw3LjQxMiAyMS4yMzUsOS41MjkgMjEuMjM1LDkuNTI5IEwyMi4yOTQsMTUuODgyIEMyMi4yOTQsMTYuOTM4IDIzLjY1MiwxNy44MDYgMjUuNDIxLDE3Ljk2NyBMMjUuNDcxLDE4IEwyNi41MjksMTggTDI2LjU3OSwxNy45NjcgQzI4LjM0OCwxNy44MDYgMjkuNzA2LDE2LjkzOCAyOS43MDYsMTUuODgyIEwzMC43NjUsOS41MjkgQzMwLjc2NSw5LjUyOSAyOS43MDYsNy40MTIgMjYuNTI5LDcuNDEyIHoiIGZpbGw9IiNENkQ2RDYiLz4KICAgIDxwYXRoIGQ9Ik0zNy4xMTgsNy40MTIgTDM3LjA2OSw3LjM2MyBDMzguODg2LDcuMTI1IDQwLjI5NCw1LjU4NyA0MC4yOTQsMy43MDYgQzQwLjI5NCwxLjY1OSAzOC42MzUsMCAzNi41ODgsMCBDMzQuNTQyLDAgMzIuODgyLDEuNjU5IDMyLjg4MiwzLjcwNiBDMzIuODgyLDUuNTcyIDM0LjI2Niw3LjA5OSAzNi4wNTksNy4zNTggTDM2LjA1OSw3LjQxMiBDMzIuODgyLDcuNDEyIDMxLjgyNCw5LjUyOSAzMS44MjQsOS41MjkgTDMyLjg4MiwxNS44ODIgQzMyLjg4MiwxNi45MzggMzQuMjQsMTcuODA2IDM2LjAwOSwxNy45NjcgTDM2LjA1OSwxOCBMMzcuMTE4LDE4IEwzNy4xNjcsMTcuOTY3IEMzOC45MzcsMTcuODA2IDQwLjI5NCwxNi45MzggNDAuMjk0LDE1Ljg4MiBMNDEuMzUzLDkuNTI5IEM0MS4zNTMsOS41MjkgNDAuMjk0LDcuNDEyIDM3LjExOCw3LjQxMiB6IiBmaWxsPSIjRDZENkQ2Ii8+CiAgICA8cGF0aCBkPSJNNDcuNzA2LDcuNDEyIEw0Ny42NTcsNy4zNjMgQzQ5LjQ3NCw3LjEyNSA1MC44ODIsNS41ODcgNTAuODgyLDMuNzA2IEM1MC44ODIsMS42NTkgNDkuMjIzLDAgNDcuMTc2LDAgQzQ1LjEzLDAgNDMuNDcxLDEuNjU5IDQzLjQ3MSwzLjcwNiBDNDMuNDcxLDUuNTcyIDQ0Ljg1NCw3LjA5OSA0Ni42NDcsNy4zNTggTDQ2LjY0Nyw3LjQxMiBDNDMuNDcxLDcuNDEyIDQyLjQxMiw5LjUyOSA0Mi40MTIsOS41MjkgTDQzLjQ3MSwxNS44ODIgQzQzLjQ3MSwxNi45MzggNDQuODI4LDE3LjgwNiA0Ni41OTcsMTcuOTY3IEw0Ni42NDcsMTggTDQ3LjcwNiwxOCBMNDcuNzU2LDE3Ljk2NyBDNDkuNTI1LDE3LjgwNiA1MC44ODIsMTYuOTM4IDUwLjg4MiwxNS44ODIgTDUxLjk0MSw5LjUyOSBDNTEuOTQxLDkuNTI5IDUwLjg4Miw3LjQxMiA0Ny43MDYsNy40MTIgeiIgZmlsbD0iI0Q2RDZENiIvPgo8L3N2Zz4K"; + +/***/ }, + +/***/ 207 +(module) { + +"use strict"; +module.exports = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDUyIDE4Ij4KICAgIDxwYXRoIGQ9Ik01LjM1Myw3LjQxMiBMNS4zMDQsNy4zNjMgQzcuMTIxLDcuMTI1IDguNTI5LDUuNTg3IDguNTI5LDMuNzA2IEM4LjUyOSwxLjY1OSA2Ljg3LDAgNC44MjQsMCBDMi43NzcsMCAxLjExOCwxLjY1OSAxLjExOCwzLjcwNiBDMS4xMTgsNS41NzIgMi41MDIsNy4wOTkgNC4yOTQsNy4zNTggTDQuMjk0LDcuNDEyIEMxLjExOCw3LjQxMiAwLjA1OSw5LjUyOSAwLjA1OSw5LjUyOSBMMS4xMTgsMTUuODgyIEMxLjExOCwxNi45MzggMi40NzUsMTcuODA2IDQuMjQ0LDE3Ljk2NyBMNC4yOTQsMTggTDUuMzUzLDE4IEw1LjQwMywxNy45NjcgQzcuMTcyLDE3LjgwNiA4LjUyOSwxNi45MzggOC41MjksMTUuODgyIEw5LjU4OCw5LjUyOSBDOS41ODgsOS41MjkgOC41MjksNy40MTIgNS4zNTMsNy40MTIgeiIgZmlsbD0iIzcxNzE3MSIvPgogICAgPHBhdGggZD0iTTE1Ljk0MSw3LjQxMiBMMTUuODkyLDcuMzYzIEMxNy43MDksNy4xMjUgMTkuMTE4LDUuNTg3IDE5LjExOCwzLjcwNiBDMTkuMTE4LDEuNjU5IDE3LjQ1OCwwIDE1LjQxMiwwIEMxMy4zNjUsMCAxMS43MDYsMS42NTkgMTEuNzA2LDMuNzA2IEMxMS43MDYsNS41NzIgMTMuMDksNy4wOTkgMTQuODgyLDcuMzU4IEwxNC44ODIsNy40MTIgQzExLjcwNiw3LjQxMiAxMC42NDcsOS41MjkgMTAuNjQ3LDkuNTI5IEwxMS43MDYsMTUuODgyIEMxMS43MDYsMTYuOTM4IDEzLjA2MywxNy44MDYgMTQuODMzLDE3Ljk2NyBMMTQuODgyLDE4IEwxNS45NDEsMTggTDE1Ljk5MSwxNy45NjcgQzE3Ljc2LDE3LjgwNiAxOS4xMTgsMTYuOTM4IDE5LjExOCwxNS44ODIgTDIwLjE3Niw5LjUyOSBDMjAuMTc2LDkuNTI5IDE5LjExOCw3LjQxMiAxNS45NDEsNy40MTIgeiIgZmlsbD0iI0Q2RDZENiIvPgogICAgPHBhdGggZD0iTTI2LjUyOSw3LjQxMiBMMjYuNDgxLDcuMzYzIEMyOC4yOTgsNy4xMjUgMjkuNzA2LDUuNTg3IDI5LjcwNiwzLjcwNiBDMjkuNzA2LDEuNjU5IDI4LjA0NywwIDI2LDAgQzIzLjk1MywwIDIyLjI5NCwxLjY1OSAyMi4yOTQsMy43MDYgQzIyLjI5NCw1LjU3MiAyMy42NzgsNy4wOTkgMjUuNDcxLDcuMzU4IEwyNS40NzEsNy40MTIgQzIyLjI5NCw3LjQxMiAyMS4yMzUsOS41MjkgMjEuMjM1LDkuNTI5IEwyMi4yOTQsMTUuODgyIEMyMi4yOTQsMTYuOTM4IDIzLjY1MiwxNy44MDYgMjUuNDIxLDE3Ljk2NyBMMjUuNDcxLDE4IEwyNi41MjksMTggTDI2LjU3OSwxNy45NjcgQzI4LjM0OCwxNy44MDYgMjkuNzA2LDE2LjkzOCAyOS43MDYsMTUuODgyIEwzMC43NjUsOS41MjkgQzMwLjc2NSw5LjUyOSAyOS43MDYsNy40MTIgMjYuNTI5LDcuNDEyIHoiIGZpbGw9IiNENkQ2RDYiLz4KICAgIDxwYXRoIGQ9Ik0zNy4xMTgsNy40MTIgTDM3LjA2OSw3LjM2MyBDMzguODg2LDcuMTI1IDQwLjI5NCw1LjU4NyA0MC4yOTQsMy43MDYgQzQwLjI5NCwxLjY1OSAzOC42MzUsMCAzNi41ODgsMCBDMzQuNTQyLDAgMzIuODgyLDEuNjU5IDMyLjg4MiwzLjcwNiBDMzIuODgyLDUuNTcyIDM0LjI2Niw3LjA5OSAzNi4wNTksNy4zNTggTDM2LjA1OSw3LjQxMiBDMzIuODgyLDcuNDEyIDMxLjgyNCw5LjUyOSAzMS44MjQsOS41MjkgTDMyLjg4MiwxNS44ODIgQzMyLjg4MiwxNi45MzggMzQuMjQsMTcuODA2IDM2LjAwOSwxNy45NjcgTDM2LjA1OSwxOCBMMzcuMTE4LDE4IEwzNy4xNjcsMTcuOTY3IEMzOC45MzcsMTcuODA2IDQwLjI5NCwxNi45MzggNDAuMjk0LDE1Ljg4MiBMNDEuMzUzLDkuNTI5IEM0MS4zNTMsOS41MjkgNDAuMjk0LDcuNDEyIDM3LjExOCw3LjQxMiB6IiBmaWxsPSIjRDZENkQ2Ii8+CiAgICA8cGF0aCBkPSJNNDcuNzA2LDcuNDEyIEw0Ny42NTcsNy4zNjMgQzQ5LjQ3NCw3LjEyNSA1MC44ODIsNS41ODcgNTAuODgyLDMuNzA2IEM1MC44ODIsMS42NTkgNDkuMjIzLDAgNDcuMTc2LDAgQzQ1LjEzLDAgNDMuNDcxLDEuNjU5IDQzLjQ3MSwzLjcwNiBDNDMuNDcxLDUuNTcyIDQ0Ljg1NCw3LjA5OSA0Ni42NDcsNy4zNTggTDQ2LjY0Nyw3LjQxMiBDNDMuNDcxLDcuNDEyIDQyLjQxMiw5LjUyOSA0Mi40MTIsOS41MjkgTDQzLjQ3MSwxNS44ODIgQzQzLjQ3MSwxNi45MzggNDQuODI4LDE3LjgwNiA0Ni41OTcsMTcuOTY3IEw0Ni42NDcsMTggTDQ3LjcwNiwxOCBMNDcuNzU2LDE3Ljk2NyBDNDkuNTI1LDE3LjgwNiA1MC44ODIsMTYuOTM4IDUwLjg4MiwxNS44ODIgTDUxLjk0MSw5LjUyOSBDNTEuOTQxLDkuNTI5IDUwLjg4Miw3LjQxMiA0Ny43MDYsNy40MTIgeiIgZmlsbD0iI0Q2RDZENiIvPgo8L3N2Zz4K"; + +/***/ }, + +/***/ 7884 +(module) { + +"use strict"; +module.exports = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDUyIDE4Ij4KICAgIDxwYXRoIGQ9Ik01LjM1Myw3LjQxMiBMNS4zMDQsNy4zNjMgQzcuMTIxLDcuMTI1IDguNTI5LDUuNTg3IDguNTI5LDMuNzA2IEM4LjUyOSwxLjY1OSA2Ljg3LDAgNC44MjQsMCBDMi43NzcsMCAxLjExOCwxLjY1OSAxLjExOCwzLjcwNiBDMS4xMTgsNS41NzIgMi41MDIsNy4wOTkgNC4yOTQsNy4zNTggTDQuMjk0LDcuNDEyIEMxLjExOCw3LjQxMiAwLjA1OSw5LjUyOSAwLjA1OSw5LjUyOSBMMS4xMTgsMTUuODgyIEMxLjExOCwxNi45MzggMi40NzUsMTcuODA2IDQuMjQ0LDE3Ljk2NyBMNC4yOTQsMTggTDUuMzUzLDE4IEw1LjQwMywxNy45NjcgQzcuMTcyLDE3LjgwNiA4LjUyOSwxNi45MzggOC41MjksMTUuODgyIEw5LjU4OCw5LjUyOSBDOS41ODgsOS41MjkgOC41MjksNy40MTIgNS4zNTMsNy40MTIgeiIgZmlsbD0iIzcxNzE3MSIvPgogICAgPHBhdGggZD0iTTE1Ljk0MSw3LjQxMiBMMTUuODkyLDcuMzYzIEMxNy43MDksNy4xMjUgMTkuMTE4LDUuNTg3IDE5LjExOCwzLjcwNiBDMTkuMTE4LDEuNjU5IDE3LjQ1OCwwIDE1LjQxMiwwIEMxMy4zNjUsMCAxMS43MDYsMS42NTkgMTEuNzA2LDMuNzA2IEMxMS43MDYsNS41NzIgMTMuMDksNy4wOTkgMTQuODgyLDcuMzU4IEwxNC44ODIsNy40MTIgQzExLjcwNiw3LjQxMiAxMC42NDcsOS41MjkgMTAuNjQ3LDkuNTI5IEwxMS43MDYsMTUuODgyIEMxMS43MDYsMTYuOTM4IDEzLjA2MywxNy44MDYgMTQuODMzLDE3Ljk2NyBMMTQuODgyLDE4IEwxNS45NDEsMTggTDE1Ljk5MSwxNy45NjcgQzE3Ljc2LDE3LjgwNiAxOS4xMTgsMTYuOTM4IDE5LjExOCwxNS44ODIgTDIwLjE3Niw5LjUyOSBDMjAuMTc2LDkuNTI5IDE5LjExOCw3LjQxMiAxNS45NDEsNy40MTIgeiIgZmlsbD0iIzcxNzE3MSIvPgogICAgPHBhdGggZD0iTTI2LjUyOSw3LjQxMiBMMjYuNDgxLDcuMzYzIEMyOC4yOTgsNy4xMjUgMjkuNzA2LDUuNTg3IDI5LjcwNiwzLjcwNiBDMjkuNzA2LDEuNjU5IDI4LjA0NywwIDI2LDAgQzIzLjk1MywwIDIyLjI5NCwxLjY1OSAyMi4yOTQsMy43MDYgQzIyLjI5NCw1LjU3MiAyMy42NzgsNy4wOTkgMjUuNDcxLDcuMzU4IEwyNS40NzEsNy40MTIgQzIyLjI5NCw3LjQxMiAyMS4yMzUsOS41MjkgMjEuMjM1LDkuNTI5IEwyMi4yOTQsMTUuODgyIEMyMi4yOTQsMTYuOTM4IDIzLjY1MiwxNy44MDYgMjUuNDIxLDE3Ljk2NyBMMjUuNDcxLDE4IEwyNi41MjksMTggTDI2LjU3OSwxNy45NjcgQzI4LjM0OCwxNy44MDYgMjkuNzA2LDE2LjkzOCAyOS43MDYsMTUuODgyIEwzMC43NjUsOS41MjkgQzMwLjc2NSw5LjUyOSAyOS43MDYsNy40MTIgMjYuNTI5LDcuNDEyIHoiIGZpbGw9IiNENkQ2RDYiLz4KICAgIDxwYXRoIGQ9Ik0zNy4xMTgsNy40MTIgTDM3LjA2OSw3LjM2MyBDMzguODg2LDcuMTI1IDQwLjI5NCw1LjU4NyA0MC4yOTQsMy43MDYgQzQwLjI5NCwxLjY1OSAzOC42MzUsMCAzNi41ODgsMCBDMzQuNTQyLDAgMzIuODgyLDEuNjU5IDMyLjg4MiwzLjcwNiBDMzIuODgyLDUuNTcyIDM0LjI2Niw3LjA5OSAzNi4wNTksNy4zNTggTDM2LjA1OSw3LjQxMiBDMzIuODgyLDcuNDEyIDMxLjgyNCw5LjUyOSAzMS44MjQsOS41MjkgTDMyLjg4MiwxNS44ODIgQzMyLjg4MiwxNi45MzggMzQuMjQsMTcuODA2IDM2LjAwOSwxNy45NjcgTDM2LjA1OSwxOCBMMzcuMTE4LDE4IEwzNy4xNjcsMTcuOTY3IEMzOC45MzcsMTcuODA2IDQwLjI5NCwxNi45MzggNDAuMjk0LDE1Ljg4MiBMNDEuMzUzLDkuNTI5IEM0MS4zNTMsOS41MjkgNDAuMjk0LDcuNDEyIDM3LjExOCw3LjQxMiB6IiBmaWxsPSIjRDZENkQ2Ii8+CiAgICA8cGF0aCBkPSJNNDcuNzA2LDcuNDEyIEw0Ny42NTcsNy4zNjMgQzQ5LjQ3NCw3LjEyNSA1MC44ODIsNS41ODcgNTAuODgyLDMuNzA2IEM1MC44ODIsMS42NTkgNDkuMjIzLDAgNDcuMTc2LDAgQzQ1LjEzLDAgNDMuNDcxLDEuNjU5IDQzLjQ3MSwzLjcwNiBDNDMuNDcxLDUuNTcyIDQ0Ljg1NCw3LjA5OSA0Ni42NDcsNy4zNTggTDQ2LjY0Nyw3LjQxMiBDNDMuNDcxLDcuNDEyIDQyLjQxMiw5LjUyOSA0Mi40MTIsOS41MjkgTDQzLjQ3MSwxNS44ODIgQzQzLjQ3MSwxNi45MzggNDQuODI4LDE3LjgwNiA0Ni41OTcsMTcuOTY3IEw0Ni42NDcsMTggTDQ3LjcwNiwxOCBMNDcuNzU2LDE3Ljk2NyBDNDkuNTI1LDE3LjgwNiA1MC44ODIsMTYuOTM4IDUwLjg4MiwxNS44ODIgTDUxLjk0MSw5LjUyOSBDNTEuOTQxLDkuNTI5IDUwLjg4Miw3LjQxMiA0Ny43MDYsNy40MTIgeiIgZmlsbD0iI0Q2RDZENiIvPgo8L3N2Zz4K"; + +/***/ }, + +/***/ 6429 +(module) { + +"use strict"; +module.exports = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDUyIDE4Ij4KICAgIDxwYXRoIGQ9Ik01LjM1Myw3LjQxMiBMNS4zMDQsNy4zNjMgQzcuMTIxLDcuMTI1IDguNTI5LDUuNTg3IDguNTI5LDMuNzA2IEM4LjUyOSwxLjY1OSA2Ljg3LDAgNC44MjQsMCBDMi43NzcsMCAxLjExOCwxLjY1OSAxLjExOCwzLjcwNiBDMS4xMTgsNS41NzIgMi41MDIsNy4wOTkgNC4yOTQsNy4zNTggTDQuMjk0LDcuNDEyIEMxLjExOCw3LjQxMiAwLjA1OSw5LjUyOSAwLjA1OSw5LjUyOSBMMS4xMTgsMTUuODgyIEMxLjExOCwxNi45MzggMi40NzUsMTcuODA2IDQuMjQ0LDE3Ljk2NyBMNC4yOTQsMTggTDUuMzUzLDE4IEw1LjQwMywxNy45NjcgQzcuMTcyLDE3LjgwNiA4LjUyOSwxNi45MzggOC41MjksMTUuODgyIEw5LjU4OCw5LjUyOSBDOS41ODgsOS41MjkgOC41MjksNy40MTIgNS4zNTMsNy40MTIgeiIgZmlsbD0iIzcxNzE3MSIvPgogICAgPHBhdGggZD0iTTE1Ljk0MSw3LjQxMiBMMTUuODkyLDcuMzYzIEMxNy43MDksNy4xMjUgMTkuMTE4LDUuNTg3IDE5LjExOCwzLjcwNiBDMTkuMTE4LDEuNjU5IDE3LjQ1OCwwIDE1LjQxMiwwIEMxMy4zNjUsMCAxMS43MDYsMS42NTkgMTEuNzA2LDMuNzA2IEMxMS43MDYsNS41NzIgMTMuMDksNy4wOTkgMTQuODgyLDcuMzU4IEwxNC44ODIsNy40MTIgQzExLjcwNiw3LjQxMiAxMC42NDcsOS41MjkgMTAuNjQ3LDkuNTI5IEwxMS43MDYsMTUuODgyIEMxMS43MDYsMTYuOTM4IDEzLjA2MywxNy44MDYgMTQuODMzLDE3Ljk2NyBMMTQuODgyLDE4IEwxNS45NDEsMTggTDE1Ljk5MSwxNy45NjcgQzE3Ljc2LDE3LjgwNiAxOS4xMTgsMTYuOTM4IDE5LjExOCwxNS44ODIgTDIwLjE3Niw5LjUyOSBDMjAuMTc2LDkuNTI5IDE5LjExOCw3LjQxMiAxNS45NDEsNy40MTIgeiIgZmlsbD0iIzcxNzE3MSIvPgogICAgPHBhdGggZD0iTTI2LjUyOSw3LjQxMiBMMjYuNDgxLDcuMzYzIEMyOC4yOTgsNy4xMjUgMjkuNzA2LDUuNTg3IDI5LjcwNiwzLjcwNiBDMjkuNzA2LDEuNjU5IDI4LjA0NywwIDI2LDAgQzIzLjk1MywwIDIyLjI5NCwxLjY1OSAyMi4yOTQsMy43MDYgQzIyLjI5NCw1LjU3MiAyMy42NzgsNy4wOTkgMjUuNDcxLDcuMzU4IEwyNS40NzEsNy40MTIgQzIyLjI5NCw3LjQxMiAyMS4yMzUsOS41MjkgMjEuMjM1LDkuNTI5IEwyMi4yOTQsMTUuODgyIEMyMi4yOTQsMTYuOTM4IDIzLjY1MiwxNy44MDYgMjUuNDIxLDE3Ljk2NyBMMjUuNDcxLDE4IEwyNi41MjksMTggTDI2LjU3OSwxNy45NjcgQzI4LjM0OCwxNy44MDYgMjkuNzA2LDE2LjkzOCAyOS43MDYsMTUuODgyIEwzMC43NjUsOS41MjkgQzMwLjc2NSw5LjUyOSAyOS43MDYsNy40MTIgMjYuNTI5LDcuNDEyIHoiIGZpbGw9IiM3MTcxNzEiLz4KICAgIDxwYXRoIGQ9Ik0zNy4xMTgsNy40MTIgTDM3LjA2OSw3LjM2MyBDMzguODg2LDcuMTI1IDQwLjI5NCw1LjU4NyA0MC4yOTQsMy43MDYgQzQwLjI5NCwxLjY1OSAzOC42MzUsMCAzNi41ODgsMCBDMzQuNTQyLDAgMzIuODgyLDEuNjU5IDMyLjg4MiwzLjcwNiBDMzIuODgyLDUuNTcyIDM0LjI2Niw3LjA5OSAzNi4wNTksNy4zNTggTDM2LjA1OSw3LjQxMiBDMzIuODgyLDcuNDEyIDMxLjgyNCw5LjUyOSAzMS44MjQsOS41MjkgTDMyLjg4MiwxNS44ODIgQzMyLjg4MiwxNi45MzggMzQuMjQsMTcuODA2IDM2LjAwOSwxNy45NjcgTDM2LjA1OSwxOCBMMzcuMTE4LDE4IEwzNy4xNjcsMTcuOTY3IEMzOC45MzcsMTcuODA2IDQwLjI5NCwxNi45MzggNDAuMjk0LDE1Ljg4MiBMNDEuMzUzLDkuNTI5IEM0MS4zNTMsOS41MjkgNDAuMjk0LDcuNDEyIDM3LjExOCw3LjQxMiB6IiBmaWxsPSIjRDZENkQ2Ii8+CiAgICA8cGF0aCBkPSJNNDcuNzA2LDcuNDEyIEw0Ny42NTcsNy4zNjMgQzQ5LjQ3NCw3LjEyNSA1MC44ODIsNS41ODcgNTAuODgyLDMuNzA2IEM1MC44ODIsMS42NTkgNDkuMjIzLDAgNDcuMTc2LDAgQzQ1LjEzLDAgNDMuNDcxLDEuNjU5IDQzLjQ3MSwzLjcwNiBDNDMuNDcxLDUuNTcyIDQ0Ljg1NCw3LjA5OSA0Ni42NDcsNy4zNTggTDQ2LjY0Nyw3LjQxMiBDNDMuNDcxLDcuNDEyIDQyLjQxMiw5LjUyOSA0Mi40MTIsOS41MjkgTDQzLjQ3MSwxNS44ODIgQzQzLjQ3MSwxNi45MzggNDQuODI4LDE3LjgwNiA0Ni41OTcsMTcuOTY3IEw0Ni42NDcsMTggTDQ3LjcwNiwxOCBMNDcuNzU2LDE3Ljk2NyBDNDkuNTI1LDE3LjgwNiA1MC44ODIsMTYuOTM4IDUwLjg4MiwxNS44ODIgTDUxLjk0MSw5LjUyOSBDNTEuOTQxLDkuNTI5IDUwLjg4Miw3LjQxMiA0Ny43MDYsNy40MTIgeiIgZmlsbD0iI0Q2RDZENiIvPgo8L3N2Zz4K"; + +/***/ }, + +/***/ 2498 +(module) { + +"use strict"; +module.exports = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDUyIDE4Ij4KICAgIDxwYXRoIGQ9Ik01LjM1Myw3LjQxMiBMNS4zMDQsNy4zNjMgQzcuMTIxLDcuMTI1IDguNTI5LDUuNTg3IDguNTI5LDMuNzA2IEM4LjUyOSwxLjY1OSA2Ljg3LDAgNC44MjQsMCBDMi43NzcsMCAxLjExOCwxLjY1OSAxLjExOCwzLjcwNiBDMS4xMTgsNS41NzIgMi41MDIsNy4wOTkgNC4yOTQsNy4zNTggTDQuMjk0LDcuNDEyIEMxLjExOCw3LjQxMiAwLjA1OSw5LjUyOSAwLjA1OSw5LjUyOSBMMS4xMTgsMTUuODgyIEMxLjExOCwxNi45MzggMi40NzUsMTcuODA2IDQuMjQ0LDE3Ljk2NyBMNC4yOTQsMTggTDUuMzUzLDE4IEw1LjQwMywxNy45NjcgQzcuMTcyLDE3LjgwNiA4LjUyOSwxNi45MzggOC41MjksMTUuODgyIEw5LjU4OCw5LjUyOSBDOS41ODgsOS41MjkgOC41MjksNy40MTIgNS4zNTMsNy40MTIgeiIgZmlsbD0iIzcxNzE3MSIvPgogICAgPHBhdGggZD0iTTE1Ljk0MSw3LjQxMiBMMTUuODkyLDcuMzYzIEMxNy43MDksNy4xMjUgMTkuMTE4LDUuNTg3IDE5LjExOCwzLjcwNiBDMTkuMTE4LDEuNjU5IDE3LjQ1OCwwIDE1LjQxMiwwIEMxMy4zNjUsMCAxMS43MDYsMS42NTkgMTEuNzA2LDMuNzA2IEMxMS43MDYsNS41NzIgMTMuMDksNy4wOTkgMTQuODgyLDcuMzU4IEwxNC44ODIsNy40MTIgQzExLjcwNiw3LjQxMiAxMC42NDcsOS41MjkgMTAuNjQ3LDkuNTI5IEwxMS43MDYsMTUuODgyIEMxMS43MDYsMTYuOTM4IDEzLjA2MywxNy44MDYgMTQuODMzLDE3Ljk2NyBMMTQuODgyLDE4IEwxNS45NDEsMTggTDE1Ljk5MSwxNy45NjcgQzE3Ljc2LDE3LjgwNiAxOS4xMTgsMTYuOTM4IDE5LjExOCwxNS44ODIgTDIwLjE3Niw5LjUyOSBDMjAuMTc2LDkuNTI5IDE5LjExOCw3LjQxMiAxNS45NDEsNy40MTIgeiIgZmlsbD0iIzcxNzE3MSIvPgogICAgPHBhdGggZD0iTTI2LjUyOSw3LjQxMiBMMjYuNDgxLDcuMzYzIEMyOC4yOTgsNy4xMjUgMjkuNzA2LDUuNTg3IDI5LjcwNiwzLjcwNiBDMjkuNzA2LDEuNjU5IDI4LjA0NywwIDI2LDAgQzIzLjk1MywwIDIyLjI5NCwxLjY1OSAyMi4yOTQsMy43MDYgQzIyLjI5NCw1LjU3MiAyMy42NzgsNy4wOTkgMjUuNDcxLDcuMzU4IEwyNS40NzEsNy40MTIgQzIyLjI5NCw3LjQxMiAyMS4yMzUsOS41MjkgMjEuMjM1LDkuNTI5IEwyMi4yOTQsMTUuODgyIEMyMi4yOTQsMTYuOTM4IDIzLjY1MiwxNy44MDYgMjUuNDIxLDE3Ljk2NyBMMjUuNDcxLDE4IEwyNi41MjksMTggTDI2LjU3OSwxNy45NjcgQzI4LjM0OCwxNy44MDYgMjkuNzA2LDE2LjkzOCAyOS43MDYsMTUuODgyIEwzMC43NjUsOS41MjkgQzMwLjc2NSw5LjUyOSAyOS43MDYsNy40MTIgMjYuNTI5LDcuNDEyIHoiIGZpbGw9IiM3MTcxNzEiLz4KICAgIDxwYXRoIGQ9Ik0zNy4xMTgsNy40MTIgTDM3LjA2OSw3LjM2MyBDMzguODg2LDcuMTI1IDQwLjI5NCw1LjU4NyA0MC4yOTQsMy43MDYgQzQwLjI5NCwxLjY1OSAzOC42MzUsMCAzNi41ODgsMCBDMzQuNTQyLDAgMzIuODgyLDEuNjU5IDMyLjg4MiwzLjcwNiBDMzIuODgyLDUuNTcyIDM0LjI2Niw3LjA5OSAzNi4wNTksNy4zNTggTDM2LjA1OSw3LjQxMiBDMzIuODgyLDcuNDEyIDMxLjgyNCw5LjUyOSAzMS44MjQsOS41MjkgTDMyLjg4MiwxNS44ODIgQzMyLjg4MiwxNi45MzggMzQuMjQsMTcuODA2IDM2LjAwOSwxNy45NjcgTDM2LjA1OSwxOCBMMzcuMTE4LDE4IEwzNy4xNjcsMTcuOTY3IEMzOC45MzcsMTcuODA2IDQwLjI5NCwxNi45MzggNDAuMjk0LDE1Ljg4MiBMNDEuMzUzLDkuNTI5IEM0MS4zNTMsOS41MjkgNDAuMjk0LDcuNDEyIDM3LjExOCw3LjQxMiB6IiBmaWxsPSIjNzE3MTcxIi8+CiAgICA8cGF0aCBkPSJNNDcuNzA2LDcuNDEyIEw0Ny42NTcsNy4zNjMgQzQ5LjQ3NCw3LjEyNSA1MC44ODIsNS41ODcgNTAuODgyLDMuNzA2IEM1MC44ODIsMS42NTkgNDkuMjIzLDAgNDcuMTc2LDAgQzQ1LjEzLDAgNDMuNDcxLDEuNjU5IDQzLjQ3MSwzLjcwNiBDNDMuNDcxLDUuNTcyIDQ0Ljg1NCw3LjA5OSA0Ni42NDcsNy4zNTggTDQ2LjY0Nyw3LjQxMiBDNDMuNDcxLDcuNDEyIDQyLjQxMiw5LjUyOSA0Mi40MTIsOS41MjkgTDQzLjQ3MSwxNS44ODIgQzQzLjQ3MSwxNi45MzggNDQuODI4LDE3LjgwNiA0Ni41OTcsMTcuOTY3IEw0Ni42NDcsMTggTDQ3LjcwNiwxOCBMNDcuNzU2LDE3Ljk2NyBDNDkuNTI1LDE3LjgwNiA1MC44ODIsMTYuOTM4IDUwLjg4MiwxNS44ODIgTDUxLjk0MSw5LjUyOSBDNTEuOTQxLDkuNTI5IDUwLjg4Miw3LjQxMiA0Ny43MDYsNy40MTIgeiIgZmlsbD0iI0Q2RDZENiIvPgo8L3N2Zz4K"; + +/***/ }, + +/***/ 5811 +(module) { + +"use strict"; +module.exports = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDUyIDE4Ij4KICAgIDxwYXRoIGQ9Ik01LjM1Myw3LjQxMiBMNS4zMDQsNy4zNjMgQzcuMTIxLDcuMTI1IDguNTI5LDUuNTg3IDguNTI5LDMuNzA2IEM4LjUyOSwxLjY1OSA2Ljg3LDAgNC44MjQsMCBDMi43NzcsMCAxLjExOCwxLjY1OSAxLjExOCwzLjcwNiBDMS4xMTgsNS41NzIgMi41MDIsNy4wOTkgNC4yOTQsNy4zNTggTDQuMjk0LDcuNDEyIEMxLjExOCw3LjQxMiAwLjA1OSw5LjUyOSAwLjA1OSw5LjUyOSBMMS4xMTgsMTUuODgyIEMxLjExOCwxNi45MzggMi40NzUsMTcuODA2IDQuMjQ0LDE3Ljk2NyBMNC4yOTQsMTggTDUuMzUzLDE4IEw1LjQwMywxNy45NjcgQzcuMTcyLDE3LjgwNiA4LjUyOSwxNi45MzggOC41MjksMTUuODgyIEw5LjU4OCw5LjUyOSBDOS41ODgsOS41MjkgOC41MjksNy40MTIgNS4zNTMsNy40MTIgeiIgZmlsbD0iIzcxNzE3MSIvPgogICAgPHBhdGggZD0iTTE1Ljk0MSw3LjQxMiBMMTUuODkyLDcuMzYzIEMxNy43MDksNy4xMjUgMTkuMTE4LDUuNTg3IDE5LjExOCwzLjcwNiBDMTkuMTE4LDEuNjU5IDE3LjQ1OCwwIDE1LjQxMiwwIEMxMy4zNjUsMCAxMS43MDYsMS42NTkgMTEuNzA2LDMuNzA2IEMxMS43MDYsNS41NzIgMTMuMDksNy4wOTkgMTQuODgyLDcuMzU4IEwxNC44ODIsNy40MTIgQzExLjcwNiw3LjQxMiAxMC42NDcsOS41MjkgMTAuNjQ3LDkuNTI5IEwxMS43MDYsMTUuODgyIEMxMS43MDYsMTYuOTM4IDEzLjA2MywxNy44MDYgMTQuODMzLDE3Ljk2NyBMMTQuODgyLDE4IEwxNS45NDEsMTggTDE1Ljk5MSwxNy45NjcgQzE3Ljc2LDE3LjgwNiAxOS4xMTgsMTYuOTM4IDE5LjExOCwxNS44ODIgTDIwLjE3Niw5LjUyOSBDMjAuMTc2LDkuNTI5IDE5LjExOCw3LjQxMiAxNS45NDEsNy40MTIgeiIgZmlsbD0iIzcxNzE3MSIvPgogICAgPHBhdGggZD0iTTI2LjUyOSw3LjQxMiBMMjYuNDgxLDcuMzYzIEMyOC4yOTgsNy4xMjUgMjkuNzA2LDUuNTg3IDI5LjcwNiwzLjcwNiBDMjkuNzA2LDEuNjU5IDI4LjA0NywwIDI2LDAgQzIzLjk1MywwIDIyLjI5NCwxLjY1OSAyMi4yOTQsMy43MDYgQzIyLjI5NCw1LjU3MiAyMy42NzgsNy4wOTkgMjUuNDcxLDcuMzU4IEwyNS40NzEsNy40MTIgQzIyLjI5NCw3LjQxMiAyMS4yMzUsOS41MjkgMjEuMjM1LDkuNTI5IEwyMi4yOTQsMTUuODgyIEMyMi4yOTQsMTYuOTM4IDIzLjY1MiwxNy44MDYgMjUuNDIxLDE3Ljk2NyBMMjUuNDcxLDE4IEwyNi41MjksMTggTDI2LjU3OSwxNy45NjcgQzI4LjM0OCwxNy44MDYgMjkuNzA2LDE2LjkzOCAyOS43MDYsMTUuODgyIEwzMC43NjUsOS41MjkgQzMwLjc2NSw5LjUyOSAyOS43MDYsNy40MTIgMjYuNTI5LDcuNDEyIHoiIGZpbGw9IiM3MTcxNzEiLz4KICAgIDxwYXRoIGQ9Ik0zNy4xMTgsNy40MTIgTDM3LjA2OSw3LjM2MyBDMzguODg2LDcuMTI1IDQwLjI5NCw1LjU4NyA0MC4yOTQsMy43MDYgQzQwLjI5NCwxLjY1OSAzOC42MzUsMCAzNi41ODgsMCBDMzQuNTQyLDAgMzIuODgyLDEuNjU5IDMyLjg4MiwzLjcwNiBDMzIuODgyLDUuNTcyIDM0LjI2Niw3LjA5OSAzNi4wNTksNy4zNTggTDM2LjA1OSw3LjQxMiBDMzIuODgyLDcuNDEyIDMxLjgyNCw5LjUyOSAzMS44MjQsOS41MjkgTDMyLjg4MiwxNS44ODIgQzMyLjg4MiwxNi45MzggMzQuMjQsMTcuODA2IDM2LjAwOSwxNy45NjcgTDM2LjA1OSwxOCBMMzcuMTE4LDE4IEwzNy4xNjcsMTcuOTY3IEMzOC45MzcsMTcuODA2IDQwLjI5NCwxNi45MzggNDAuMjk0LDE1Ljg4MiBMNDEuMzUzLDkuNTI5IEM0MS4zNTMsOS41MjkgNDAuMjk0LDcuNDEyIDM3LjExOCw3LjQxMiB6IiBmaWxsPSIjNzE3MTcxIi8+CiAgICA8cGF0aCBkPSJNNDcuNzA2LDcuNDEyIEw0Ny42NTcsNy4zNjMgQzQ5LjQ3NCw3LjEyNSA1MC44ODIsNS41ODcgNTAuODgyLDMuNzA2IEM1MC44ODIsMS42NTkgNDkuMjIzLDAgNDcuMTc2LDAgQzQ1LjEzLDAgNDMuNDcxLDEuNjU5IDQzLjQ3MSwzLjcwNiBDNDMuNDcxLDUuNTcyIDQ0Ljg1NCw3LjA5OSA0Ni42NDcsNy4zNTggTDQ2LjY0Nyw3LjQxMiBDNDMuNDcxLDcuNDEyIDQyLjQxMiw5LjUyOSA0Mi40MTIsOS41MjkgTDQzLjQ3MSwxNS44ODIgQzQzLjQ3MSwxNi45MzggNDQuODI4LDE3LjgwNiA0Ni41OTcsMTcuOTY3IEw0Ni42NDcsMTggTDQ3LjcwNiwxOCBMNDcuNzU2LDE3Ljk2NyBDNDkuNTI1LDE3LjgwNiA1MC44ODIsMTYuOTM4IDUwLjg4MiwxNS44ODIgTDUxLjk0MSw5LjUyOSBDNTEuOTQxLDkuNTI5IDUwLjg4Miw3LjQxMiA0Ny43MDYsNy40MTIgeiIgZmlsbD0iIzcxNzE3MSIvPgo8L3N2Zz4K"; + +/***/ }, + +/***/ 2540 +(module) { + +"use strict"; +module.exports = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDM4IDE1Ij4KICAgIDxwYXRoIGQ9Ik0yMS45MSwxLjA4MyBDMTguMDA4LDEuMDgzIDE0Ljg0Niw0LjA3IDE0Ljg0Niw3Ljc1OCBDMTQuODQ2LDExLjQ0NSAxOC4wMDgsMTQuNDMyIDIxLjkxLDE0LjQzMiBDMjUuODEzLDE0LjQzMiAyOC45NzcsMTEuNDQ1IDI4Ljk3Nyw3Ljc1OCBDMjguOTc4LDQuMDcgMjUuODEzLDEuMDgzIDIxLjkxLDEuMDgzIHogTTIxLjc3MSwxMS45IEMxOS41LDExLjkgMTcuNjU3LDEwLjA1NiAxNy42NTcsNy43ODMgQzE3LjY1Nyw1LjUwOCAxOS41MDEsMy42NjQgMjEuNzcxLDMuNjY0IEMyNC4wNDUsMy42NjQgMjUuODg2LDUuNTA4IDI1Ljg4Niw3Ljc4MyBDMjUuODg2LDEwLjA1NyAyNC4wNDUsMTEuOSAyMS43NzEsMTEuOSB6IiBmaWxsPSIjNzRCMDNFIi8+CiAgICA8cGF0aCBkPSJNMTYuNzUxLDAuNjQyIEwxNy4wMzEsMCBMMTQuMDYzLDAgTDExLjI3LDggTDguNjQ4LDAgTDguMjcyLDAgTDUuNjUsOCBMMywwIEwwLjAzMSwwIEw0LjksMTMuNDg2IEM0LjksMTMuNDg2IDUuMDc4LDEzLjg2IDUuMjc1LDEzLjg2IEM1LjQ1MSwxMy44NiA1LjY0OSwxMy40ODYgNS42NDksMTMuNDg2IEw4LjQ0NSw2LjQwNiBMMTEuMjY5LDEzLjQ4NiBDMTEuMjY5LDEzLjQ4NiAxMS40NTUsMTMuODYgMTEuNjQzLDEzLjg2IEMxMS44MjksMTMuODYgMTIuMDE4LDEzLjQ4NiAxMi4wMTgsMTMuNDg2IEwxMy42MTQsOS4wNjcgQzEzLjQ0NSw4LjQzMyAxMy4zNDUsNy43NzMgMTMuMzQ1LDcuMDg5IEMxMy4zNDYsNC40NTMgMTQuNjg2LDIuMTE4IDE2Ljc1MSwwLjY0MiB6IiBmaWxsPSIjRUUzNDI4Ii8+CiAgICA8cGF0aCBkPSJNMjcuMDMxLDAgTDI3LjAzMSwwLjYxMyBDMjcuOTQ0LDEuMjU4IDI4LjcxNSwyLjA2NyAyOS4yOTUsMyBMMzEuMDMxLDMgTDMxLjAzMSwxNCBMMzQuMDMxLDE0IEwzNC4wMzEsMyBMMzguMDMxLDMgTDM4LjAzMSwwIEwyNy4wMzEsMCB6IiBmaWxsPSIjRjA4NjE1Ii8+Cjwvc3ZnPgo="; + +/***/ }, + +/***/ 7133 +(module) { + +"use strict"; +module.exports = "data:application/font-woff2;base64,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"; + +/***/ }, + +/***/ 9010 +(module) { + +"use strict"; +module.exports = "data:application/font-woff2;base64,d09GMgABAAAAAQHUABIAAAACvnAAAQFqAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP0ZGVE0cGn4bgcskHKxMBmAAiS4ISAmDPBEMCofFHIbgRQuUHgABNgIkA6g4BCAFiH0H5HkMgilbvYCSDJYy1l4yniBMJ+KiqtsQTnXVqWl5eA4X2HRwZ7103iivoo0Cr4Zt07hgvZkCMirtn5P9////////vy9ZxJrO7sHsfXwCoiKSGrVG0zStATUD4UNMOSFFhKqOiAkBTRtD12z6nNANY9dvE6aw22EvhpYDvdy3vpBNiQ7qXO+OyymLXL6cZ47Cc6hHjHVay0P3jEx1QDLRUOWbylblL9dzQiKIk2mLvTdv/hIiccWCJgQsCDVCgN2WLmKTmJG76NWELlEJRKK0rC1Uz1RJ7Wg3v1E8frvMWrw22IhT0GvNYK4E9bv+sWJ9bPH8bE+cj/2fzr1yNHGateFrliYHHFaxdrIXPKgrdVOprqB2wNlh/3cxp6xXDtSzNjlMjotYv+X7WuhdD+6ruvt3xqM6fiOW+AbPVlzcG53FtfIsuuET+ZNOWW/1ujB/RhTsTTOC/CLsZMKDLluqUzAlHvM2pGhuq8tT659l8XzC5EQxy9uu3JPe479GqqQYmsFikNWL3stGe2RE7sQ/P72iHKn8gNoHLrY/mojR3F/qV0GToE5JKmRBdUBHWZnoBMPmyFcKwte+naOI8Og9qjA2woIZW8JjY/DEIaz1Hh3Fj/jxz7RNIsYYH3EmahPUTUymGRYlnhBUP16lx91v5VW/q2dTf1hYwgnf6kUZ4TXi3TQrfj+sYy/m57RJ19ggFXZxp8NOZaUFnMsTCuhV25o2GktnuqlkWV4C4rh1IUrE0lrbjitGPOP797bPz3MRum8Dvu4HPCIYaWF21wAsRUZVjYJsf5DNN2Uuzw8ybehM3xASpGMHkV35Vs0gzpmkTdeuXdcps49OsSEHH/I7onf87shFOT+7GRdx2ymiNaIiu3p29wjVPYJjssAsXxFqBPXGATm2JF8hzABsUzAWqT2dhblQJ9oYiEhESYaU0ViYsfomVi3StYvO/+7Viw/QOu9D5au6xzZZLzomKjbVLzJfVA+PhQXGMNuYja0neDd9HBN8PMHYMR2Ph1njf4XdZbKPV0KM7hqu0btxZ1aHWecanS7UCko8Jdj2K8ufIC8ixCau2eFYsUgQEXHDD/w2e18QV86c7s7MRVm1cpVgwdZ4Z8UqxEalykx0l4sIKwrk/09u1qe8MUmFTodKKE87SS1oNYQEs9CQYFKx1GGcoQqrdjVLb2t60uvOHi57ErvpMKflfenLkP0v1+pEDG+wYcO2EeUUS/AF0uIfMjjYbT8MAkksAAjIA0mjo1C3a95rUBOOBdXBNqsz8ZeI2Nxvb1+u3Vlz0hupUyoOEyR4IBDIiPo29f/7Mz42EkgC4whO96XcbVNtXYekrkmXwLbBxJR8JtQLG+F6wnX4Qk64vpcfAPffXP3fAIa6VdCMP4WwjYmgYrd2UlsnO28EagP2TnoWmx9DRHgh/7P/YPH3kElmCY7sGEtYECjU/vPDua8JUDEfiNeuau1hhXpGTLQ6L25Ab+/dV/c3Mk8K0BZgnv93v+DdeZObfGJyxFhg+1XLxlQ4NrqrFjTB5KCcuObHKQQG5mbOU1Oo50/HQs74pUUT9sU5jdNH4QfUdgxJRlgAAvc6s5eGoIAQWpgdWNiMQ54fQip/XV7R2UV3Ljq76G5ezzVdxVj85MWawprCm+Zmc+EDETaTwAvBcmMWguqQM7RqyJWnf+JGbyaRLJGAOQ0COcAj+jvilpnSOmO3d50cfTHuXVYRrSscXINNVaVihDSEEEIIIfAi0vPm1f8RlU0JR1DVqO2GJ4eqlkqoCBSAy4CKPzLCR4hNTcfOKMR1PIe0Na1wpV4HQvfeA//+AK3S+d+sjCBASzLqAYA+HHDKSXAX+8K8p2vrsSlb4eFfWoMMvJ/Z8t6xBVaVQKAAQJZtjWGLvgqEqkIUru5gMzGQ6wMCL2Vff5q9t+JNfYMHSkhC034RMXBbeCR1Qm5LcYjpIfqKhW6fXQdS4iXt369JflFXJU2usjPdI4IkDxwQ+7lcqLoH7o7ZiQMNEM9nGxa2QLMQirInZNWdPqHczMsPw++Xq/+jE/E02iBEomgaqb39u5uJ3m6iikkUsan+oW5JzBs5iWmjV0okFCL/Z6llWgV0Sw0O4RGpWZvyTZ+Sb62DBMPxeQWRnSTVv6pQXVXdOLoBUWiAOgBRIxC6CHIOktoxukHOAKBmTGpmr+Pmodm3nLm156G903W2kc8zcnidmSMHmdN8Y6eJgyAzz///3vqf3XO80VBHorB93Cv3Sjiw7vZ91by7KEIXuX+R0qFJTb7k/o+QFAq+UyESo8MIFEJIvMII/n819WvvHRCkSQpfAmQf+Xfr8pe/6B5mKJnaGLrflNQdQHc4DxjKExxI0YE0nYK8KfDdB1CDh6HMgeT45Z9TtSGFKnVFCtVvit2m/7tVautt6maJiptoa5fgu3X2TUABhhFCN9DX2QFhs2mPUf6XqWU63a8/TQ9Yxx6sw5HnDHlGCkLeSj5CKEXZbKN7h8Dvv6hFA2swNGc85R0ghzM2YilSKcqciVRKYoWif2Jx072NPwmtGZe4hkIF/4/7qU1f0fYLV7glo96pi3TlAVsgDaiA4hbZebf54fSn4SdVsKVJ77Dq5d3PX4wxlGjKasNYVgKfS6nerwSeC9Zwg1gqEE0jGp2D6PN3w7DFsrh7ur/7i4gnEiRIEBHpPul5Xzn470zadE/HPayqqIgYI74vnoFyJesksAPFPoocPoKevvSdX0XOk3Zz9uRqhmJpTGMaYxwjjDBCCGNM5fjLV5b9lK+BCGq1g+lEEKJv7/u6y5/mz7rdHQdJB1eqMEgd4VYhyZv/txofsWk9LamfvfR61RAFAoRlxWbF2v8/1FlPZu8OtlTM41JIvMGJZNU2o2l/SgNCbQuI1mL0gn2ljsEMAChx+K9vveADAPAPf8yupsdryK8hhAfg5wD4NYgUrBVY6xSIOq5EcEWtaMSKmRJwSqcIMWVTBs2gsYEzfBKgqThIAEQCgAFAEAAWgAGCap0cwI9YsTCINDBBiikCAdAKlSCf/kx/DAyvK99YBv839SkvQfTbW2+tQn0kAHAfSn/6njJ63bs314B/2xs2VkGdvhwgXmYUHlSwskQAeHH1PvihXAqzSwH9RpNS09DyoaNnYGRSg4OTH38BAgVxCRYiVJiawkWIFCVajFhx3OIlSJSkA4FUtTGU2Lj4hMSkZGpKahqNzmCy2BwuTyAUpWdkZr3pS2VyhWKpUmu0OhJUNN20XY+EERsaGZ80MogijiTSyKGAMm06dOqi1KOPipqGjsE1uCEjCCYWNuMmTCGRaCyeqFCpNVqd3mgyW6w2u8Ppcnu8Pr4AIkwoE0RJVlRNN0zLdlyP+yQyhUqjM5gsDCfYHC6PLxCKxBKpTK5QqtQarQ5IMxKKJVKZQqnR6g1Gk8Vqs/tXHCs1bu8fMzMB02S4IxzJsRgzAD7hs0AC6M8zvqQDE2kirWQFPHiL7y2NnTiSvkyX6SvXvR8uLc3kcqhX8aNhXFgdToqVq5bN8lMNskhZEt/PomPsN36PGuQb4+FEFuoKvj81tyHTge5760TIsITIjeDEj7NyP8k00kVAZYE8BZlB5CYHceN+Rxr8FJ2ySFWgL//wSDwRdsVsbCY62dJyD/hxIwz53W1htVgF/zQB/JaORpp5qTA3kZ4EgDHI5ff7jSGuGuYhePzeqAt5mDGxqt6+m7FXXharfNgUIphrSmytvgVDFhttAcbYKXmi75P3OfN1cpZ7BPp633Eryw3u/K0PNwr79ZlUHZ7no5Esv5919uR7JAKy7BRwR+EZezPjw/446rovL391PbA87uSD3I+ftZ/RPzeuGSKLFArDseEhmQoiaTlvXRhD//bnJRBXLT9uv+BkckXuDHeU+2skB5+8rMg90RPGJfObHxKPZAZFYE37TdiTKZr+hupyXCYU2EBUuGcsspmiGVE0NdhBaIhvOcnsDZCSDwD4Qmb8sPoKViueI1GWDcBIZLybIjekEVH7YZo0xbuyaoeE7T89/XlNYm4iMZGcGGQcxMC5V6wY7cYhTMgSvdpFEDMZe0TlEgBSZgkwhm1xI96qgQysIHVH8ULOoeLIk83OSXa1VLNJJfyjguh8Ka/gAVbs2SuUYAgZdQ23OGKKvzn0HwQqwNJxU4vnlEhrIW0xnMU58ehpVI3dWk7q5d9b0q7W/RTnKicvq2frAvK/IFDBW9PmN93/830eCSeIHsSbBNlNBEIUaDjfHLp5SlblG7G0+oiZ1KdVVjshxG8leatkf5Xi7VJJ5aPJrU8pm8bKUOmVKkyMgfpu2GoYuOKjAVtMa6RUHh7kg94XmSmwiqMedJKchmxRhYJZ289TaPBK/Db522kvzH/zYlHTQAcDAijgsBMI8Pmzl+1TDir3hQfCQ+GR8Fh4IlA6v47WMbqArk7HAgc8CCBCAzRCEzRDC7SzDtbJuli30qv0Cf26AUHSDQpDuhEYgwmQQQEVNNDBABMssMEBF77PJaJklIpANC21M1I7l5vPLeQWc0u55dxqFYQQDhMd0ttRqmdFYaJI0S1RMsrhclG+qlJVjUhEIZrjOB4JXH2ptprrKNVeUW2p2noe+oA+o68q92njzIU78G82DfyQH3DECZxwSDQx4cT5YdG9ZfZgeQoUqSBQTfi6i9+ilUw7XdL6kjeQsqGmNpK6sbRNpO+vjP2TuamszWRvLmcLuVtiYGRiZmFls0s9r0DQRE7URE/SiZv4SQhlqLM267Ihm7I5i9la2Stn5V8lfet+G36Tv3XZSoBJgVmAowBHBY4GHB04BnBM4FjAXQaOB9wV4ARuvSoDV8M9EfcecU7CPSn30PzWyTo9614CNwicAcAz+vZlsX1NgkqmlwIlp6WkpoEgEiVpjj7FNjmnodV27eyINnRIuWPSIRaUrK98KIV8KvlQuZ4hEzAnZszMwo0o+ZXaNgE6sXBmERIi4slfwyozFEmpd4yLHu9/ipwgVAhFBFUMXQkhSQgUBv0vbBhJKkkENI1kNslCkjJQNegwGAmKDMUBiwGLI5VAig/2B9xLuB54AaQFkQaRBpMmCThpwFniRwkYNWC0gNEDxggYM2Cs+F2OHy9+V+KHgqeFTgfdc/heBmwwYIYA3iNUHooedAWEBCG8MN4wglSCCN40gtkECwnK8KrxDuMj8SLz4uCLwRdHKIEQH78AwoIIgwiDCYfiT8s7HY+TuNoLD0eUEqk+ZIiPqXIHq6zhiYXm2Gapn630g0KzFflOsQ02+NlGP9nkR/W6nQyfOch5C1z0pf/6VasN7vlJuw06ph7k5PguVwy5vn6K6JcOebtj2rH81kdmdNFPITYWYUHJfizFrFJ9WD6j//kghempJHrqhzThi/qvZ+gEtk9s+8y244EPfrBTwKOSkOoEWhNrzayFBz7gYcfB45IQX4DMF7LxT46qFbyN8h+RbWDaSLeJrz5C5thaNUL0tckqpaiXWtq7ZvJ8qgynjr7ZJr15D29VVv+JgEXYKTnLgadJBIeEVKRayz0F8i2gSZIngDkEf+RYqt+yfFLBtlJdIUuRHYrZNsjZqG2T1D5VmUBuYrmZFXAnim6OM6iFuWsPXw7rE5aq1fhFbW00DzjkiGNOOFX/byPWvs11PIBnrALtzxBR2DFRiCmi4ulQIVTEHBdnF7d6vGNwe41x3n4TGx3gQhQgWMCs3VYSzsIlJKFwxCxPVjuc8ASiEWMmyBQqjc5gsticclsgaPhKNIPkgkTxsL5WtpYzF+4OOOKESNHyFCgi0KKVTLslBkYmZhbWsrV5wwEQOi3w6JhY2CTACt+6SrXZ4h9K52HdrAm2hACFI7A4PIFoxJgJMoVKozOYLDan3BYIkiEXieKBZK1sLWcu3B1wxAmRouUpUESgRSuZdksMjEzMLKxla/OGAxShXQ1JSR/J8J4uvErNtpdTIwo6JgwJ3PkxxT2X3MXgl02DlEYtV7gCCqFX9Jqcx2yTD9J2O+ysXU0QgZ9a0jK3IBWq7Za9DcOZK3eewH+WTrcXnSqUNLIWYlt0OopxPT+7OhSRzyKcf6KknRwlaqX+VuCvOaowDMMwDMMwDMMwDMNrIyLq/CtWPf+8VeRgHW6ElbLwuo0/bayZY3nlOsfAAAsRT6iuxG2BgpGQOw0dHRML29k6d991ik7/P33C4PmZAnNJXciQxVRtNTR5mT0eMMfnljrSSocodJsiByr2rg2OtNERNjlMvTeczC1zdjvvPhcny7+O1epd9xyh3bs6pog5OQ7MFXO0vo6I6OgO7UXHrInl+D5yYxcdEeL9ItxXssNKcUupC5sP9L+RFC5L5ZWeOiRNbkVd2jO3GoxrFVjBDtgFiWCBDQ644EGAT/iCb/iBDnShB32Uo4IqatiAWezBcg7DOZEHL/KKlLIrUC6FKEzhylOBZtIsmkP76I/+6f8NMoJhJmEMY5mMyZnCkRzmJBzNLeR2gVslVrJDdkliWGGHE254EeRTvuRbfqQjXelJX8mVolSlqQaVVT2qvIapSpT+f6sCo0B/DR0jINh+Bx121HFXRSlXqYrajr1ytDlx4caDFywf+PJt58qNB0/CavuFhAKJoFmGboXMShay5ciVF2FPS1fPbxmmIpWcjSSRNKS7lQySvY5cZQs9qqh27OnSMsat3oQKjxGnUkImUUknD7tkkuJKM9GRPgwYMmLMhL/8Y8qMuVrYWoDKgkAFX51gX0EG9G6UdIcFMmXJliNXHi1dPW+elSTdLRm7ItQOhd70UCadPgOGjBgz4S//mDJjrha2xnD3PvJZhV+dgF+AU6oCaCucyGmcca5zJEHG5+pwnctaXyURSSFGXULkMalmv0Y2iXwahSiptPWnJNTaaTpKoaO/INKtV79Bo8b96W+Tps2ar8UtPRxJvWDhOqgugd+uP9GDJA876riT/jMoFD87OZ2i6CWSfp8fKj/1o5Rh+b5bwbWSbc3NLwJrFfHatG6S+hximo/ePHMD3kZVm3R8vEYaafZYkPQVMZDlZGSyEvM5q4oFa2Odoo1sYtvOYucYJruzQ8wlbsU9OAUgeHZBSpB6cELIgVOOpBOhkfPg4vVIYtGJn+TrNd/K/Z5HrEBRfiZljAr1BKTaEU5TF8RpJBJI00JaIdOert0SAyNTzLCwsp3vqmdvw3Dmyp1n93aIwwECEoKHH2n+8qa3vet9H/ZAyoKRivxZVykp0q6c37drPWz6uNkKrzR2aSb950Vix40i3rPYDhsQKByxu9fGPq8Ohg0cPgLE3m6jQ6eu3u1Vb0bCmInIUKg0OoPJYnPKbYF9rk3zLbTYUsvHaq9BBKnu81yGnOQ6+f26xLLyEqzUqOHILpSG30X0ZPascI6Q3TOCfW13nahNkDMX7h0kBgvpBwQdcUKk6MR38hQoIuhCYnURkxa0kqUdSwyMTMwsrGVr84YDIHQ/ZP7e9LZ3ve/DHkhcMBJyp2mPjomFTWKs8GfYlcambTbr8Jz3e93SDrhEOJI77B8ChSOwODyBaMSYCTKFSqMzmCw2p9wWCJIhd55MSIUSD9fnWtlazly4O+CIEyJFy1OgiECLVjLtlhgYmZhZWMvW5g0HQOiMcPeRzyp8azXMk5T0rk2+do1TwDPEfUj7A/fDOI/M2dW50+eca0TGEpOPdcrIz1GIkkpbR8PS8X3xzQFyJMAv/ryHEtY/X8nlp31UmWaNey1H4aWTPrSFSGN205ht7anXYx11DYYtxAkmIflYZ/35+Fhv7RWcBKmOCPvUJfH30mU/q11OdtownLly53nHcwOuCCMw7AULCbnTwh0dEwvbWef6j/lc6eeXB1wFdswY1byJPSS4Pa5ISespMkWp9KE/A28MZYK1mT8L7iiJioaOgYnV2bw757wLLro0uMl2WXiuJGLPVYkU5QuJruG75bY7/VvsMtx1b/dBwPLzWcHs9QfRUZY1qXeGnX68xF3fu/SfM1h9Mp/NMGS1izXHevy2dNpOFoBFXTdEXxEbTTomtqVdK+AGr9OuuaGkft3ciyM+r1AURdHQFyiKoij6+RQrkeKWIh+KrVIsnrLTRTKx89OaGubbsu7a2AQegyVkvj3xuvNAhGvqssTzY1cL1HHBQipyu076Z3ohok2UWbDXc4VahmIVmrGmryMZRCPEOMKALh2xJaQsPOt5KJoVPQhP8GTbpZbfi/PTKTUZGVEzUJ5dfYbLiLFfPEFxUtUlRKuM69NscG5XCnyGiPRIqsFXyBZyc4xW+Ms/n8RRDgHEve6/J56h/PNAphP++JJSUiZdubEnoxQrGbW8hPOIrE49cR6R5rNfT3LVY8hzKZlpvBkq4wE9kLGgBBuEBEYeNNnRExML29k69wsOVT6t6nUyTkfpV6RHCcDyh4U6F4opaAYkuhqOMsiFG+E6D5JHvAQL1yFzhXuY1VKDqPMA02SPXIGFTsks5REZ4wmmOgbKseuUntWwEWPrCbqTki5MY0jLjExWrLIMq4Kbsm1nsdPCcIMDwHeSVOTQGOGCznvNMTdEPm6FJzEjzuoSMonn8HXzJb0kTrmGpe/jNtbXs3ybyehy3ykmP5MyRi0nUarPo5PGSCBN82TI8Sm1bsPSmBe6RltLl24twOoFJQjcacDomFjYzta5ratUPgXVg6i5p5U63Q63olwP9g8LdR4U+6BJSXQFHEWQC3eOVYR7yY56iBcsXIfME+5hVkgNUp1nvWnJZuSiFpKSWcoVGVEzUNiuPsNlxNg+Wjf/u6AYrxic5YgRJitWWU5W/bHLprKddsrewnCDA8B3kr7IoXEKR2OY8+xyzAsB4oYXiVlHnBUlkMTJPo6vmHc50alzY0JRkaI4ocTPykYtnCjVHx7ZiqLiRJpn+5j+4kJKVhrzQ/XXpXhdr1iQQOBOs350TCxsZ+vc1lUqnoLqQdS80+o73TPyebHugUMBuXAPkck4EVlBq2Ojx1EvYOE6ZI9wKH0QpYT8RMpJjSMj6jQ8JmVc6GLAMiOTFassN1bQ9elQKBTKBDc4APwaRCLygp0QxjFutC7nWXPsCQHjVngkZj3ET2V7Tynsvs63ct/PyroQqY44jYoE0v2Z+JnkuigLRBYMUpG3rpJyCqqB2nOO9u+LxLsk+7ney/z8+zg+cu320kN/8Rbm5CjnS+4QPhapj6hdJBdBLpldqnb/s7unYDuupr5kFygaMAWcAiCiOpU02ftwKYicrZytERwA4HUAAKiecYgHRM/qxLxxguXAnHFgrTVwxqlfvKjq7a6SKZJqoJl2/0W6UvEUGGw4gBNO9VAflF06d6KQzECyZMuRK68XsChVplyFSlURvqGl8zx/KC+lR58pM+ZqoYnni2hfh8jCPQyUmk8ZZxNy0UG6JJXUpPVJJ7fwdTLIAye7S2FENotCnkRd6dDQ55cepz8ypAyzz+JJfTFiXtfWJuxbSqiFXFhwSHvImf3kIA476ng4nauiElMjDixB4TPnaa5bkmSp43ZC78R85e7eHwY2c53PrpxVpVTNWZqG01oOpjRQ2zlqoln7MzRtOpNOnwFDRoyZ8Jd/TJkxZ6HvsNorR5sTF248eMHygefbA8AFgQreOleHdW48eA5B4IRoGyj5tJTuN3CKd6TEGuI2lth3BSxkS0go3MMEUoNE0pxs9qI6KbJ9r0NC0VksPETf9aQwkjhyCg9nTQw9TlDCLJzha5bMWVFSrFErSpTq08yQoynZq8fk0t5agGBBAhX8FxwqPK34dGK65gCfcGU0gEnJ3JMVsuXIlRdhT0tXz7894RiTcnaHJCmkJd25pWSQ7HXkBqSQOe3e/SQg8T4QNh2nro+Yrnf3BKTfJmwLuKf/Y1NiFyPkdfhYmW6xtDPDYvB9MzuJEfk94fEJ9kYzuRhlvD0+tU5619tkyXORJul9bufpTnLhy90uDyuZ8a7igNiEvUD93NJwSnM35IyU8Z62gMS6NtMqnW+iC30GDBkxZsJf/jFlxlwtvPUCdH8CVPBHThA+4cqY2IGCuxzYpw91PhQz0E0gvLaEzBdOWIVKEDoPZ1qyURjZHjWzxGXYRj5/guGkXsVe29UiyUSOE8d8bU5MjDiJEhR+jS8ZJTFLVTJ0V5gu1i5XSnmjsTBUjCQkJCRwOBwOh/vTuEPNP63M6WTwzqQerXp4qG6jUxLzwW+73YJnL3GMUDVo6tChZ8otIZpwwgiVIHVIQx2IPhHZnidE7TXKVk+1a01PGDaSMcZrTtjcDafHoRXT46ASkij8pDu3lTsTxaOWnQj1aV7TRjRT2nUnZwHQggAV/JyH0ggmVBVa59QJyCG3Syp0plIg6EydKovqr7lhD+EFKupEEgM/6c5tcuek+Ek6hCZoq/MPPpTKm4TqQjdioUiIK5w9TCQ1SEmTnUIiC+plmBZHTI8TlbDwY7OA44IAFXx1aKwIg4OAgHsTLWCr4E7wgoVTotzCfGZcliZNg2VGJitWWWI927Bp207Zj2GCGxwA/kQUFxJCq8NpY5wcROGCl2t7bmS+xrfuH0pMEJklFUE66VcBMkspgvwsIRj5MQzDzhiGiSeXfRN4jJhgIRDxhOqIC20LFIyE/F2gP/aLGCiL3u0Qn1NwniDCLVnTgxcsnBLlFsZifjE8WYaRyYpVlmHluYkt29lhd5egnR+GGxwAHs35gfDiEh65XkkmX5NvyV3c93PKSMOqkYQUWl3Hq4SiVA/gjbsMdiOvjYaOiYXtbJ376ZQgzqmJFOQ8Fm+yrY8iKam0fV/gZoBSEuDX/QV+psgPS208wphIy6uYbe1J8eUESaHLUx7iwsvddqqQaqn29xJcju3OF3u2YThz5c7zDsYEXBGGgLtqDTF7jx0Z+k2UuR3bOeddcNElEa6KFOULia7hu+W2OzPWvFoklb49q2KtrR0Ds4sAIHZ3owEmCDQYwd13+kK8Dh1CTeJPNEbgULcEREQ/VsWkRxiRfpEMZWSWsTRBplBpdAaTxeaUe7fktIC6hImnU7iRL8AMNuXOOHF59a9qPVBXjPvrr+xpd53njbeyD3s+1x4paEqhIt4T+z+h4jW/TlrzymOT+6K4lmRfODCDRS7Pb+4Z68GiEZEv+lFfeEE0ZW8stuZ0xuiXSwpyFJmi0ugMJovNObhLS0RERD+5imATROTrxwk/yMjIAADAfy/AZyl/NrtyLsldbZbN5r8/AHJI2Bmzic7l1Df+LKhuBweBxQYlXv+tM2s/53Vdzs06MFv09cMGV2QHW0MSCkdgcXgC0YgxE2QKlUZnMFlsTrktECRDLhI1e0Y897dhHchat9K02TrftU37rZwdfi7iPrAYoAfIEQ4nNtqrdhR5L5p23erOOXcreShIUdwTTLsWrWTaob0zoEsMjDGJmYV1sXGcd8IBitCuhqSkDxnoGhADtDqaFD+pGVa/uh6nLf48FpD7IuoEv6WQsF9oIO4pnnGdX3K624VAdcRpWH+xIo+qxKF+WSCwYJCK3K6z9H8kXrF6X7v+iFod0wlxxpafXjYB+p6nsbEVdCKIkJVgquoiIn+11yKuglWCwV/KEbGVGTB5q94RSVuUrmC9SLcsvqIKYVD7IwCANVbVNAp99CLHFzst+Mt/Ouyf25eeEB+vzQmdzjh8dc6Xm8kShnhnEJ8P+MWiJfD44aeR5Qzz37npMHnnj7ljKaWUUkq5TseCNYig8LHThPDNbrMKIF7TNE0zmUymiYx0GUsTZAqVRmcwWWxOuVslmlKlHo11pJsp4A8RKDif7Tgpcn5QaifqUk+k5VXMtrbYOOYcXLh/3MNxUlC/6UDriBMiRScPBYpScSZItbWkFTLtlhhihImZhZUtu/PFnm0Yzly58+zejhnDAQJGCHGe6aSr2TqRT08SqT6hcRJOW2QF8X7k7+fPulS4cnStotSXgX4Z8ua47R6MPOzyKwWh36SZrMeyrYcGiehCLpvNZtPZdLaQTqfT6ewndJEE8zkKeYz9KTPeexmEEdg7+x0hvJ3aCuWu1tyWCPZTYUQMfvSl/M49YCySdOLfhVo0CAoNa1Nb296OdrYrX3va1/4OdLDDv4u/Mvz3qCYqf3RMgeri4hMSq6+hxppqrqXueuqtr/4Gkhps6Df1parUlLrSUJqd8aLz9/RHIqIEJZKxwkKupOC9KVOlTpch0wS/m593awlX4urJGDFhJVNUUfzMZJVbfkUVV1plVVVXW131NdRYUy211lHv7+/D7+6vBAUK7I5fds0213wLLfaqpf7NmLnpZptrvoUWkyRNFtqwEIEwohCLOCSkSp0u5wcffpSrSIVA8C8AJHHN6RGro339myleH46n5/c3GApH4olkKpPNTU1X641mq93pzs4tLa9cXl3f/PWA/4/w/BD1+oPhaDyZzuaL5Wq92e5CTPvD8XS+XG/3x/P1DmkUs8GhkbHxicmpTeK8jMwklZUjl1wFCBQkGIQERhaCho6Jxc7L5xmVBKrVEpJ4TKpdj/Mu+OBzNwDr8fpY2YwZN2HSlGkkH7+AoJAZnLiUFatEa9Zt21FRkyaRKVQ6k8WRlZNXVFZRVdfU1tHV0zcwNBZQqDQ6g4VzBTK12epRVVgPvX7gCuZ8EP9AAuIy3XwX7SGufRGBWwuTTNJPz4hJ7uOZ1a/2PC2d7LU99ijvbx+zdQne7wkvfow6vzf/yOt67+sLZRhLu8Bovd6X4oI6sNE+nnkQzGoSZW/4vCsoWcFW2O6Yy8fXOrfrLeVH1ti4mM/v4gOC+MS6f7+rSQqrMsL1NOnuPCXJiCJhK0dYMsLuiLcRz4/nXoNuFadEbzd1AeMpYOgl/IJivmaYfFH5xasm97TXfK6o9d5/yZd7+C3AF4KrX//rPXkyn5qNrwyBk/OICMPevXsLhF1+6uXnw2rYUVn+UH6glz7udb1n3/a3FkwUoN1v0+stQ6gxjJ8dvtwn8+efPyugu74A4EeAi16YaRFbiHARYAJhie7Aeoy2E20soYdPbNG07uq7ALD5GPe5N6B0b5fyAb958SXiu15LzMNirXRaeWvS4oLV1ftHesv7op+oXpgCDzcTcxu/lhRiCPhVPvk+tPwJ7t6GtXwPD5SjUi3v4v31rHfF9wqisv93jGDm4Xctflvf7vUuD0cNX5/gqbf0F3U9/idY8oTRyVtlFwx/w5q5sqm+p/dqDz4zKbjZchRbn83n00st73gZt9Nq+iPV7D9dfuht/h20MnRrNk1bFz8uvlH4DcZ1/n5zmy3u7+jL1+dHNP8lyk0UbSzdNo40heNOY3jMU293frXefj+/K94rAK8BIvEA44P3d+PZ9z74/tnp39WOdD+EGfPnBh42HXELvXVkM/jObHo7sfby3c9+a99u7lr6unVvifVl/4ezXzTVSde9/Xw6Rw9Xhvo6ix5LT3gsJK+Fg04gTiZ+VPxBAbAQUqFYYXQiQJG0YvHiSLnVEM8ogVIiThKFBigNSSTzkYqW8ZAfo2/SqxCakmhOIx+jkFoRRvEUjDQG4pkqY02ATf2g6Wat/1wLSC1kcpZYibJ6+lhjPdrWSdpmF8JBjEMkDmMcgRxFOQY5jnICchLlFJXTfJyhcpaPc1TO83GBykU+LoGugK7BrqPdgN1EuwW7jXYHdhftHuw+2kukH6R+Yf2l4z10gQJBNCVQAsgYyGAht3ICYEIQKTqUKalSUadeHaHJ0GbKtA6Cz68IKGCDCGnBRWihalZTRBGiitoYjIOxOLjcMMXDlYCiRISSOqlVrdQuO3WCrR7A0kClQ9UYvubo6wyqK7gewHrC1QdUX0z1w1p/UCXgSlFUDmwgbINADQM2Am0V8I2CazTKxsI1AbKpMM0smVflFgDRIiStvYjuxYEfsLb7kvYwDvEBtoM4OgzqKKaOYe0EuJMoOwvbRWCX0XYFVVfhu4ajGyi7i9h9xB5D9QxDL6B7ibqPEH1G0hd8+gbTdyT9QN1ffPPi2//rsg/yAtoPA4P+ge8SGmapEZcG3xaGDuyAOBkfovw74cq12uDqcK9EVS5Th6zBqE3I7Ep2Lo0KK4DBhsUWa4m0glsjbcnOjN6gT7cEnRYHeAR8JLgCPho2BlkF8iDHIceTZ1EUg6ohcyHzEQvY1qAWdVLXzpJOGrpbAasWug66TvIuigXQcaiTkKcwrnVl43FbgA4QSqltDGgD+pAxYo5ZE/aUM+POeQv+UrASrkUb8VaykwZZlCfFXnlQHbcm1MTSFt1VfzPcjQ/TE17mwBJaqS2yxw7mHNw32dDxnw37W9GdPGbC7OTpIkNmIqGUyjJyWHLZlYzYlWl7Mu1AZh3MlEPFYcGOgBxFcgzsOHIg5wT+UAfs2FoGs7ZkYvfIR6iZz7i27IoV17qnfA+kx6Y+HtujcGynZGzR52NTX4wt+tr+dXCPC8tXfNjz/1HZ6ecwA1X/zAdQF8lcGMe23bs2eUnSVmm2WTNSuPmkvlXPvHsU2d1TREa02IhFpKfKoD3nvjDUngveC4F7EcRegmavwLRXItmrgHsNcK+H3Btg9ybYvQXd3g65d0LuXcC9G+3eg2TvQ7MPwu/DSPcRauyjMPtYJ8e3fifAuE+h2KcR9hnk+wKyfbnsJpj3PWz7ZdlrkO9PyPa37vplbCDqxZ2kw/NDHd9n6bM7uGWM77fWdh//WhFLqgYtxW6BMd0haHSqgfbhHoJAkon+5QwDQHkdV84Ip9K8+YpnEZYwPedSyDneDJxAO7hFAgKfPcQAnqNIvi0CPYDQHrVDpc6+CWtbBHIi3WkSXPBDfJWHsyyA8B1r+D21AFjMORV5AglWamQkQFowTIqARfkSZJzmDOQ6KZ7NPKP1M215INHscVpJg5CDiTSHLPtMw3OFXKeibOEMoN4zuEJu6Zl7bY5nzXph5s9L4AlNWKBGk6uBsWpSrZXjLMHCmWbu5JHzDWOrN4DHSMranfEsqQbmmRixAi4Zs5DbLrfmU9XI3AKbD1gbpTXI3u7M0vCRlrFJUoQk9ZzoL644BwCpB+hKJ7fFPNNmDK6VYiBvuYrfc2N/TfyRPomPDt9pAMiYVFEoMEnZuzWAUv0Z5aKYHiGAYtOg5ErXTHobkcz/QJffaO/pmomde3I6ZpQOOZnrTZeqTO026HsP+MPaYGsIoci1uijlJ5Q1Duwbmw++pi+r7rSWZszgKwc+nilYofhX050vpiQb0zmEdj4ltkeusuQ7t3sXaB98KUEKvK1t6aa5rQU2Q86WljxmdCVJS5luWi7hER0T3Q7s2cDGtxIobYckmMcjdIc1wmSpjJdCeOGK+cgEc1zjxqzWm6fdPOvmeW/ERX1Df2j5mAXt1puJbtZyABvmOBIkJNxIghvZyEYIk2GNFPUopEBIWB53ZlsYzKChDH8mGchI0I7F8H8TfLgd1WgGMvIk3c/5AJoOZvynMZRR7dA1L1RyPMv3bf869FK8kqWl3q0avSnUkpGtl8vw5ITeVVIdpfI16/krhpA85aUMCuQ/LRpbZ54Ztd9d+YT8d2997dxjj5+LA3PmRH06n1K9bUasZb/zoVy3qxtHz+n92DE/MumH6vO68KC2MO4rrqzBlLu8MAez76q4Agv/jXwRln9U87Bx2X7nrm6vwP4Vi8tw9CR5Wl78Vt+A6+9y+HffrTZ//L6xuAYv3yeHhcD74zQIg69EwG+iEBCDFHHI7fgLElD5/j8+JFuzoUXdItJJ6UaEZ6Z3VDQmKmggAQYFPZRQAYIFBxl4yCFA4d8W/i+iJWkoVyud9FJmmDEmqbbQShvtdNBJF9300Esf/QzgVYx0+z7vo1z+Mr/qc7XtavbKcA3hGrf1pWtykCp1WU9v8oL0bt7XuwPSvT3+fKHr/CD4qE/6rM/5hl/2+91yXy/13RHR/psoHBeFWx8Il+qnA9Rvv+8Cy9qaI1UKqmRJEiWIF2c6DIhHy5UjW5ZMGdKJCAnw8XBxsLEwMdDRFChsY9t6cffGjuJAYzi5uHlYeZtb8kZhEVGsGKLVHew8QUJSikVaRlZOXkFRSdkskznzFixa8r9tjG5HbNi0xdwixzei6robbrrltjvuAYTUwRAoDI5AotAYrPCFc4/f1wSbw6PM4wuEvSp4iCV9vGV9fRX9/Pt7eBF1k3oDA+ppA7mjjvXR9EOddtYHA21pK6sLwxwj3K6M8oy1q918k3FI14XRouIY0L8GJc2aM2/BoiXLVqz6JWe9+23kj8z2g9DPRpXs2IW1Z7/fGp73R6u/t6+QVPmrV147PCKdf9hVh+73IVjXNc65GK4/qOhxOuQr8HM9+6BxrSAga9fXbSEA6hpXzxpvSD9SiaUMwouk6zBTlmw5H7BEmmnVQq68sfhaiy3+2BR4le78BhttstmWj1Bu99hrn/0OfJgCMTnupNMFAqJy2dWAgMR3130PPfbUc0bna2+999FnX33302///G8ySEAMJZCBLOShkDJ12u/9Y07Mmj1n/gXmKqSwwossuthLSCZC8pHgIkSKEq3W0GWVXW555VdQ4VC7LPFMWeVVDLf312jdrN/yttrrqLOusfT7M7ScsdeZWsnc1AehjiH16lLLg+reisZpUj8aSaNCNGKQFLGIQzLEIyFFSzibk+lssdxsR4appMv6WNr93+h4uXn3kJR7J/CgsRQQb3vGIR2oiR6YeczicjLY58ci68fg88/Fon8spBP/luh8/9QWt3lbtnX7HjIAUUXc/LxWIen4qye8CBetj6XW2+m0v62HutKSVVlno90tQPdeCStrNa+KNbjeLcsYT8jETtqUj31ypmz6Z3OmtzeZsBtu1a7ZBXtxj2/LoX2EHLFH3QN/MA/b0XZgD/uFOQpPzUDk5Nqzodqv21Dt1k2oDiqh2qqAamMkVGsQuVfYWxDpFG6PULi9BprSPQm7qyWUmKs+tm3X98T4lscBxoZwnmGMnpEMorzTOiLMV/9WHdbfjDSbBJg4J9D+k73JI+/d1uLXPVOqt2Rec/VvAryNki8axxjXzWzteweJ2lK1bklukZunxT2SEHz+rUBhovcuRG2TbAdP/pIuPnE1YMZ4uphq97DN/eNSAi3T3htJDXXb56d9G+Z6v438+QXyQZumLudDh/WIHW87nmUbMW91biZGxxx2n22i8glp9NXJuuy3INBk/CBPBK0OywNyry7kh1OcYSzJKoZMOe8IhWdoQsN6/bil9A6eRsenakMlrnCJc3SM2ylVMTs+qi7lWpHQX03iutfCMR8FfpUS+vH/4F8MXn0ZwygFAfDQv4Q7avkfa/zhYQ8eVOsDbzdWQJhAPRieS4cpGB5kwQyMl7DgxrIBDajAi4mD41h87jyWsX71VTzCA3AAeXAaqzdkc3QbovO4rreu+/b6gqvq1gX6o2HgCpi372bCDvbROfKBjoKyvOiFjASDXN3jwoEN5eoLbjixo47X4pREWi7If6/gEADAWTAsVCRatHh8L/quWoP7h7XSZTLKZmj+dAvY7waq+jqXOS7YKhdijwv19ZPDahBazTZmUdvUT4aCUJas29hPHRJMYwZL36KNqL6z7yu/sq9s0bZW/zo4EWcmEJ2/v8zPAIQ0mVMMOb+YNAx0OVOynvPPAxE4WiKInOHQxz+qkcilET5w3qKc+HbmTaQ/25Wbm2zD1mG09kqheTPGryKhso3+d2Nqzbiu5hB//hlNOrff9t8BO3AHbVcwtzPw1SARot6iSvob0v93hEPs4B2yQ0CEVOl7PSTEiV3s4rAYzSbVarcxMDwCBPprNOzscdhyQyPAEU/T/PiZ4Q+sCcnw//0/+0OqNDR0Jv7FtBYKefYaHtftPGQRbO92xMDz1c6ivuvb77MuHBftUYo+08rAbgLDj3qK7FFYpH71C/ZDk3vQGTtrVHqas9Gg9JRyV3O4fz8ZwbBfQM6TLO8oHsnUhCpnSDhWIcpFlN041SSYWDX/3IARkz0kgHx4ksG5P/NIiIF0Kiep+Zu/mamZnpmZnbmZDyL3V/OfQforma+DdiAjEUmc/P5k713jMMC+cIgA6B73n05+psP6OYD3+h/ofAjxZTg/DT/+rJDr+bOjcz/AC/z+5bYFiOBXAQD62GOjDxB8Q6kBGOFvJUrr/1vJNQaAvzYMxQwAJjOkqjrKqzZM16GbcsWsvHV8La0/1j9rbRCCIBhCTtjGM5lTO5szOKM750DcHZqfZB7V+3PjiUTiLaJGNItW0U8MEyNEt5gg1heDxRixAe1Ae9BRdEKFY7nNorVYLU5LiKXYCrVeWG+y3mo1WM3WIGuK1d7q4lj9jGzfk1DZObXPFNzOihaGNXXftbw24iKOLwFW3JM19bP9K2HIj98dMD/RPKy35vphgHizqBJ9xL+bDs6Fi3FhPdr0bUfQcb9AvQWdESLC//8/hwWe/wh62idzg0ud4XMaKPkCOkgNTZoHAi2z1JR4tzo1JbmBOm2o8gPo3x7th2jRLqEruqQLmulEGxqoo5Yq1VDLajeKyCKFJO7HIPrR3hXRjF453YqQhASwEAYa9LCCKLFsawrmDlyF7YqpBsE2X1IAhEgldyHofHALXf6fHqhXbu3+2w+u3zHzHSP5wlvZ2I+x/8e+ltrqqKue+n2Fn9hSK621AXZyf+9xppllgaWWWGaF5Tu1Z9das7PRhl5DuNX2cIdd0XT23YBfESnrq70OugxCucV66zZSpbqOSZU5+eo35rHopGzUox1NjvHT3eCarLLHCO30HH25Y6xAD0MGpa2RKlUPddqJnbh9Oxgp/WztLtjhqJM93MEPYYqnZHINmKypOxijjFdhgrG70XriTnQVwF8i0VfNr+HL0yduvPgGJkwQW6BXlvLK0iqwta4EvhrOgE0G4nVOPcoBTRDOdQdoBw2XhYH2ooMObwKkpgEYHeAMRAC7XWLC/DGUpQjvwv+l6J5jJSdlcAlhKMos0BLM4RLGJDSgwiWCoU6J0DijvFpAm3PzJ0tN0YnO50sSqZknsqOblJt5Q6gELL/Q3TLGq6QrQTlvLwvCGC7ROpIkKSSsjC6unVy0cb9/8WKY75ERbZiP8NIwWild0YJSpUIZ6WBYkA6KW6gEAZe4fLav3V64IikSBT6ArqzssMKpjSdAaHpWjqlV0hfiRmVzLQQTfP0U30Uwvh55TCI0jAxq4UynZpRySHoiC4JSbUjjksJ8LM/QShU/H5c0Jq0Yjgxef94sdryXpaLNX+bfqw1YxXdpODr8e6A/z9cEpbRmeUk8+pvL8BU0POYw6ep6axQS/LENaCW4LVI79E3r/XuCQENn3DTEbrT0XX/tyAeAF58F8Is/AqvvAKi+D4D//SnAw6IE0bCD4oZX0+geUZ+gfyAxaMqJlQV8tFaIiBd+TFSpQAQuyOO90Rmdsa0wQeclP9pWdudbQtjnQX28CW0zJg0iG8jRrT7Mxabiyc5ANoMpOxAM1pDyNrN8irsvh3OWD/uzMSMRauRmomdCnu0ScDEm1Id9OSYz8SDDu6zLnA26Q3lI3QvrELGl4A5XQ0Yo0kndGaGXwYhaUBkCiNzMykQoX10u5wYwmExb1UU02toODBBtRhsQfcR70qwsWPzSJGZ9HdTlFlOicf1v4lRrYchrZrW6MjxFCX7oZoSUEI5klcKhAeAaRHt5K+K6En7voF8RNQBFxduXj24w2sZSAiTShSeebcDsTJcDfWcyYeh5QFjNauNZqtkWtBbpYTS30nL1wizEpjAxJhKDBGyRl9GqyPI70d1f+WOrWZC7nCCI56WB0LY7vk1NcHBoc47iIVBz9S3gtqhbJMzqAFf8b0JNJDrEi78T9NpF35vwZJFfqXcq7AnkgCskOaKfadpDj6BecWaT5GOw58nrRaz3BesMvr/taQG+xYfN4u67aDMjeMH6hCF4c2qFU5NMVmaj9/dAh0BkIkp+ab5DssXvTzSiQE3GbZVTKB23m850FlukFl2IWb34tALeAxEIgA8dGvTmAJDOzpWnxU8jn/JyJXOk9WuKchclD5XP9eHiMuXtei088izKsZvffd+vzJIlKQdw4Gs1parRURe7+cVrUqGDtuABIaAyFkiG6yhG9+fCAxc59oEzP95LI+3YjG1tSnNrruaNn7l3Lql852kY08fI7wMftFNdRxq6Tg0BkluL1BFf0jF6MlvmCaRjHHmV9UUexHlK6zIcVCl9Ppxp33NWrnwLby/39w/3x3l31fIOMLNnltFkNqiac0ivO9BcfAOaxuxha9u2XmWlzQSFoeaVZrcpKbikOM/T2AHgGcsLXk0tdozUgYxAVDAxO378fUgLs8zBu1G2gJfiTDyLck8v0U0mnM3HTg1y+c+zdGiRjS2WQO7a9bHuhYfWEHeNrZB7f0biYzJlq/0UHzSlNW80Uc3OvTxAzC/8FLCP3g2eJg+Il0/RXhZSDUF8jUTUsGGE+76ARTeSwuLxKD7bpK7WgMPpiNkX0ftoLoUthTUk6UMKC5VwslpqlFfmEePS7Nd7Onp7f9dkN+H5orMcuQu5dGaQUVJGkDu1jX/2tg+2OfyQXoHVi0HShMb0DakAZ3BgYuAifveJ5SB9RyON2EWARay2DvIIgNZxEiBzDgXb6NLbwusyAhbkjgKCJZTEA9P0IV3aeOpyyEF814YDFG+akz9o0GwowJDYVq0ozfQ57Obszzn6p6dFpf9CjYs8N0GVDMQmZb/OMlnnSUJhk0/leSbRLk2Zj6LDoekfB5OBP+yHTAqfSCNyBlnQaIlfuR2OdCPGTLbzGdjwJmmXZhN9ns+n4yOGASkNH8R42J3Ia6a3J2eN1w0hr3qYTlwxoMxKlNBU04XaVu+PHgsFbAQo1E7IlJD9kvHYE06filMQ4mwstItqOvXVC1hArIeK7r0LZJHXZrR1T0Fe5jY2QXZkj5k5c9hpWL1XIkaYW7wgWLAVljIUf6OUxaZZ6su3/2/SHHoWCTbdcEVlkhXvSc/SC9ZXdSoSPaPb7wUYJo/KO75qPOOk8EvnzcS2SpRVokrFNHm+we8dVU24yX1duC0SursdLjYK/ubURZVN78trqJXp3nw//oGlN3L6yJTibTowvueOIeu0UKRwVY6MeeYBV0140SCkb7SMtc0MYZ87vyxTEHlS+1krAeUXsqNcscee8GQuWzhRVSsFmVD5yXdKZf4LRchoE84iy7WJPJG6ZQ/RsuHaV3nt0YxupXhcf0icajBLjxPI9nfqjFlLJ6cdXZMnrAiWU9jWDDFnaSG7pbZBeDSqxIL0l5UC/+h3Vfw1+ERcMVRNnwnMiAgYulZJvdSRhxxTJ3yXQ7wC7GAXZY9beRNuO2lTq9Vtpu0VU4IZ8SPcvpuUDc9ofobTE1wuomh52EIbZ45dcUmS4hzBkBqBIp3i0ZHiSoD7sDRnkO5Jj2FK7jfuIRAg1UGGo06pHYurbMmTCFt6Qh7xpS8+aoER9GDKPim8FJst/SGqOEP2J/nCYTi8pMibBtuUSpUgW7GUUmecTUSEOu8oFM5u3f0Gldu/dUSyjnUbpGGew+z/AOeBMAJa3dQi6rBpINGVllyUP2x1qbONvjO20B4e4HqGsEvTbjhrqI64OSzy98FR7A45Rq8hHdyqnpwhcamgb3pItiNv/3fDwi43IhYf9HjeFrQc5M1cF7wxQh75NkccVhMFfDrTJkU9N+IM3D90SHcvPL/CQB5FRUQZuCw54Xtyt5EyAqz8iC5fFGzRxcQGafS1rd8qNln5fGNTB1djOkLjMTgYwbftj806Hhr24UG/Ajmt15b+WUNP97knlyg9cePRQBZKloZc/KCi+a1oB2LHp8AmYO26qVFihYTbiJ0WWxB3L+XxwUUA4ejprMyMTYqMcph9Rj5MramMJJje6xQA9T1BTmT9Zk2DIUgTzkM9IMGDPeyHETQKE0ZYI1b5ao1AkOX9wULAilS1Mc0jJVQr7SxJojQLGrSp1Uab+P0Bjjx5UeHxAqpKlEPLICY7kO+UUm/mYR2IBzhLNpleJjWCU3Mx4q0PRMWD4nGRVWpbJL+k5Xyd7xcnXCxN7fnIHYyJdQfiToHK+aj5Y3gUoXKQW9CO9MaH9dsuW5sVtEnDL/pz9FN0M8AnKNINJzVPgB3pQgh6pZetK8w4krKoSYCvjbRorR05+6/a+ZbLAEWBuCMR52K1+zSgjo5bmQpdOyXAdKKltWT0VworZii69g9vQGhI6Rhl9JBgxTOO9cNybAuiNdi+PDZN/7whwzWJ3TvriHJo0JqC2IwdNtE/F7kZbbXs3hD7SmaLAQkcuBkdGMbosXVTZQyqSqA9bhnPptHpLDg59acnegIIC4EKfsADMq1BkvMSk40rhczHcoKV2anIGVDIp60RcVIIu4iahJxfy68YsqI6gZ7FGKVbiRPG/lHR2+mGyxREpPYr4tw3Fz+IrLhsFrG9Z9wyUUAliqp5AfjQYegZAZBXiXxJ9m6aXb0LXpj8YudG7vyMm2tyXv4AZpYVMvq8iBGibCKrZlNYhPKrwZUaGhFOUt+Ja2om7pCeidZZAY5qDB2looPp0q9b3kjCJDKUAo3YAeUcuHEpMo2Da4XkLW4ANOoO/HC7PTiuRslzcBiEruGblNE4lRUoGyijpescCd/oabN9Gdn0pmzhlU61USr6vifhSVa3dDSK1qu8V5kfriZEeh7wz8mkNG2DGRaxC81AN4MqxSRopwoWKou5KHsClVEkSvzToUywhOqY5lZ+ov9vaLPevRCmyiAPpYNCBbTGdPW637kCHn2vPrP28K+1vtMOsCwnTDm0XYLk/J3PBxohQWYTBXEwW7qxYojvn4AyPhfuTzd4AOTXyTEKfNEcR5KXIgt4gVF/qRYOX4rCo9ypMNPoctl2OUe2GUr3TBa/I2z8vtIbnMIDCwh9kDPDkREnMJVGKXiGIbncI/deexua/IrofE5XZy4PZ5OqmfBs/L8gToThieg/MQs354amD4dd7cT5gfKXsji4/VkGU8pyQRY6D24kvJVY96I3YEiX9VVIffgnP5HHvVs2/NlwOsgeU5oduxmjpEMgHXBiei6OPLHHrnCy3z52Wwh7fKLPt1gupCecU96VrbcXJFDWlZg4VRtJt/iHynbl9hWxWI23jUdN6m6qSKGuu4kmtTunTdeaaXRCBDdPWTjS1PQgy7WTkwEIL7V2urwx+JPayouqPOvc8JqcbwAXmw+Q31w5nSi8X9VlziKTOkjTmEcthTojTNU4ELJVlUehxu9QyB15XL1PW0iCaeEO4noScHXECJDJmpyAhhUnFbBzP3b054SNfFZCed5mIkdyIGmmOtitsxYznEWzHU9QyOp0SuT8JCMese2WbS45ferurebxwfeI+PLDEXL4nYvqLWFj65FAjS4cfvg7Oim4eLm3eSL4sNczg8tF2MI2yB7LSqoRXoWF7aLfx1GTwFN1CSy5PCFZoBJnKLCALm45rHMTdtR4mtKnAdvVUXp8u9RjPaHdYNM0zLnyaBcUuSFa3SyzSRRaa1+qcNl4nBac/qPlIKb5YMfPfb3/ueeqOpawjzyslR82tvW/4AIOCPSjBOVsMOS7aRwqeNPRI7Orqbo5e274e4Rr7xiDStIcmCmnWEVXcws0VYN1LK8Wv21Lc4V6Uc85Q+S6HbR3mcKA5Hkte9VpRyWJ0xZVo23KM1Uo76C9AXYis74nmtRIoLy/fZxOPmfvS+h0cXR34gjk2xs/HXuWot4z7Nqk9iiR44Z76QZPDe7ZWKEe1xzquF1KDewKO2qXHneEvVstvncp6j2FB6bJzdjrmEtuG/t3a6E/XXPkBZ0ZmyyzpHmK7NvJesIEY4KkUW2BU2ixjJnK5dZLSvxKheHntVujWDa0w6YJBUr5BfVpYySdsCb0zTtlE9nTMSN5qVO256QhmpSB0GZzh7r0z1Sa8Qvf0V4fcq1pf20X78rxR2adr5Y0CbS7s4WsoaSlrWHTG0Nqs/B5UYAavCO+aeggXgYrD52Ll3VQ1MZNs4k5mitrGnDWm7ovN9oPwl2S33sBsZ9Md0ks+kNh7h+S0APUxBZ23YNXYmKvZSzUjkKbyAb/bhto0+BStg+MJmVi29pb41E4EEzYdlnE23TQnmOXLBCVjGc62Ib+gvrh608X8HKfChxYTaOHGldF0rNqj+riveAEDHymjdIbi8+ZjzWpvxp+IMhmPlGo/6QjKNlt+5z1eV1Os40uH7TDY8eoRW0Ny1vY8wCGLkgh1MQb4PJoJ+u+6BYtoC7noZs5hW28wT/55RrgF6JXTdbmLW4TfABQyXOIEyTibACv9kQ01LaS+74zsao7S+LGgl0OvgzA3uNAtgvgFAbtsuaRSRvPGi0xuBHyY0wtSfPtHEc9d4mPZYBoNo+6I0BsgHMBzU2BJshF+J3MW2xVjrYwkIZ32cejDIL/+DS80UmRgMtW/cVRf8+iSdH6SdPI1N65ei5VjbroJrzG5jmCAm6Filmfx6BAgz/1WRc0XL1un5ow9Jf07A3XhTGq9S9Gw5kZVxrmCvYNeRdJ2Wodi5TUWyC0oKlXLPhWjDtjIFAC18Hd/QqUjTfT3vUYXF0YlA+OR1tl3kGTY3TlPmUexy13T7rJKPQyOVFVKAPCXPwCfJlhv47FsQOzshKC9Ln9Rm59XSjwT/GgQC/t6+mQPIF8Wcd7ZtUtO0DvnFzHPdG/hOIrncxiiOTCAoTHdwTRODfzWh+25ONyZmuqePHLhy/ftrCHsC8LMn17F8jzXrXuq5StXw30oi+NYe+NfVDU6uR+KX3jnu0lcwGAv0eR44W66LXYOlBcVtb0BArRj4Waog5LCLJg560ivt7ci0bk7iPjxPasC2oS0SohTqAkUe+SafkLqMGOu+VzRjOTXoD0ZXNIdvvcFHWdofbD51rAIFXlmkbG9cKk236jzerQP+pDfBQd/lM0/fU2mQgjNwxEVo6zrrYf+UoYlXW/XxqvHMk1QiMy/2sIxVU3Bp92vNk9sLF/vh5dF1XM4X0nB1x//59tJo/tQ5w9Ljb9G48/FEfJY47kIT/+OJgkT5iExwfPG0aD9LEDfygpYH2H2hYxAwg4tsJKxd/8tkRR+WIY8WbNcrzA6lWPZWhB2ERVV5M2nSZNa4tc2RZ+YFYsuEQa7QoUxpjy24GqLqrwVr8vBMsq81EsmNrF5JR3h0Bm3IvL8xQXIEDCgzZtlBlzuBfWcM3alEaY+NUJSQ/Wv1qqWzhpxxrX0uABA8QredZ2zCfbKF0NrdwBe52EDcnChdcS+KvwoLk1SHqzRIiFaW8IioE4wEjZIkFH3l4H8TMEDgXO7YjH0c/yKGUCujUQv2Mkj72wdinOD03zuuQAcBalwTNLmhueZwiM1ykxHPhegy3wdwuQrgBL+StmjBltVGPiHJ4dob2p6B7q7733EpDafNsfvqjJMFk/BMvJWqUeEFWHAma4yWuunnRP5DGRx3FlEW/adrL9IuqoiW93AeAIMVDT2f6FIKghH5pRitNonWEnukwWq17yalBseeyR6RE/DQ9rJJyXwZFecALFl9/sQuqKzvk1pzN1moCQs/t+QxrE1Hc0l84huoTlfe24aPfD+b02mjomGpgwZXuWqoSONpfG50knpzPDVt3UYLTohy3/AFdLDg/VcCw1Fmg0/MhrtPQRFh87coCaXE5y1YDu8lUlpX0FEBgeCdes3so8BsUSQ6ohw4Ew5jTEvn34z/652Pdu77vlAR136CsgYvr6NhicQWYJUG8AAyxxjskARPsqPPFDE5lAza9M5PjDUNV7Jbjo+bI/sseCYktz7d6fhSbBYmI3JLT1IQ5qnRo6ZXzEO4qgMTcLgTiu6oigr6uHVmtlaEQHsQgpdcABlxFSw4aN0X/lcVhcoGzqCPmTKN/n+InDfQCiZeqlfzz7bUugRWOF4bE7wt6wmvl66I8OVb0eszyLRhpyEMAwcB0cvkpkQuLUlwOYhgPlKVbiYXSKeXdGLdC3sKDN+MSkF35a98SXg9rjQG2ocHo2WS/tYTolLpNZTk49hRsSfDcNqAqSD9WyZMcsnySrlWG8igBfj47wAHplPAnC/biJ4AqXc0cw4BJGogIkdZjaVCAABsWZqggZ5dO0uuhkSGC7ApmEFyNKwZ1cWtgerHKHcVzAU59gmlWh4ifltjyifwieoqDSApMEUMXWH2gRmtJgRLVg5LGI0UAwXUr9PTSJSPhLVeON5F07NojniIV25QxamacqxIi855yd7j+GgqYNq9mCgj+HQwgOyZ72a3hWXNN2ZVuJrCKlZd3soxONpQ4wj44qSLqtcjumZWJPUqiwfR+GCmwziI0FU1cglMS7u1miwmah2FP352VbUq5mQckCmlStdzf6TpsUYhya7136BSi/E+9DdvQV93juiUtyfVv2hHPGe9JbsUngoA8/d2RSvjvkbxZer+qyvZFUhR+PogtK1C3T3Iu1XZ1fplJ6TZi/nX/rdcPBXkpsOxzWdL3bt8Sa+2DHDyOQFKF0o8B3C3HGzc/msJj1B/EYtDnVuYDpWbEAlz+5+F65QEO8yeP2p7wsxfyCwXQkAA+Hq9VoN97CAL73csOdIqg0sCOh8vempKb4zMbfDhkVHYV650QbYQRLI43KNAmYT5MCmfhY7GtZOP/0ppc06jp9VkFCurLF+/jy5mmSpcU/b86XOkbms9cQXdmcKgcBCDMyAjJ+IcdG9GFqhLSMkQ/QGtgavR3E+cpsN68kA1GQsOzihDyWMOQ48+xpEcaNKrtu0rdvhdAihCW8IMhbJRNpE+RPUbfCkai4cK1zmk068v5yazdBMZaNFB+sgMv32KzskPXnoTzvh6Ow9hDkI28tGbsCN+pfXHtJ52hfwWfPkb7boXTCNd0y+gXLnbuEuK5XPAUBr5xNnHnddbFd7hZDT+rogmfE0ZwMGK8U/3OD+pTXEOdwsDKh4YPR1OqZzy4ecq1iuKpNrZVn68HJ3qrksKO4gfuIex1oY144Nr76qcDFmRcVXCEvyvtedhzLaOufkLs7OwYuO8sOqEhiSZquB9R7uLC8Vtou4trbQRkK7J53o0sr33hxo9hqmVrhQ4jODSI/IM0tq3cTeW61Rh9GvpQAO72GnnAErUovxTx0e3BwDQtQNT/0KtmsbUQcLmNiLvWSEpNRgVI+qaofEDv2zNLeJab+s54xovjZSmZBU7Uoe9YzvD3phZmTtue+zbC37g/An00TaHhQhvwqwOIqrFjXvqirhHGbGgdoh20I8PILFGEsBTLEggEeGGTLCb7wJGU/GSlEKy4JdqYe/LzwcJb7lZFKV1JRchstZh4OhBHHVr1yOhFXKCmEa7rrTz3Cjjiu2vUSQlxFeaFvGNF8Yhb5osanB0g10UxMK/H8cLwepxbK9JYVVGAbsnGqXoA4eZHIka2zRviH7RV5y5DmS3dmvJXMolXD+i5ddSQGeA3BSjloR9W2ws6TMftN39x/RFiBWbK8Jn+wx1EB7TwNwu/wVvDAWKBhiEBv3ShmxV2GEPrJsxDnGaCW+ehFFwhbHiSczFmS5c3/xguKBKHGTwE98znVbdLwrHntcLG5/w5mV1FKKhEZtc211ABhYOWMeXFHYvefmKVLCVoKSMQben6URJDqIsj6bwYlZ20ggU8VpvS11wSGNOjLZ11EhEaHqXzttso6YJoqAI27bubm6t1GCMyoWctYREKbBfh3ela0Fa6MwODDYTgzJ0Y+IY5JoP9X7RiI0X7o6trT1ylOobCm+tu37m6zZw5LlO66B1ZMB1PYblSoLeQXdHlp8oegu2absMG4Vkdv0pqWqz0nmoBfJoGOoaOhRaEaqCiH6CpdprnyJcgvvG8EOOxKpXvwG4zI09VZpuRvUCI+GR7AcKC8SKHAHDPah+kG1YmaefxYNBKNWyzwH5IdnSgP4Tr8AiQPkmOEqYVO9HItQevWXbRWsxqSbLJ8h8GRKWfWkq4i4tUbRea63Wi/MkvXTzH4NLSUkY8asbywX+vIBJB9IMo7XF5IYKtjGBof2BxC+Bj2ga9vcmwmMDTXNwbhH8/lkJTfe0aDF7Wz+9eZPySTpe763GIX1nV0FE8Shk1rPomkdkcxOL9XSWkHWYVT/lrgsGPT9UpaGHlp6eaeYxSRUnshYqT57KhyjjneicrESZ5sdubxafaw/UUENAFApk8WA6hOFPldCuRnD66J2TCwW/7vDx4Zo9EZWy1eJHVarjrpTKRO49AVjrlx2k0iOxTxT7rszvTTBpy0YFS9U0N57RoV8Ju89ncfXSH6Dz8BFtqWX65fGPNkvGlMvZhsKzFwWjJ+A8DrwUUdktgkd1g1EeRctjRLcjCkxm+OpoYGYBE22Ubur+XJAL+K5pOzTPWEN2DSf7q62yIeUOxKb5J1fb/8xE3qPQHOD3+oknokfMPflizOj7z+6k+PYaoiv6dUcLYmFTEOVjL8ZgaKuWlAiRkyGT7nCAQuDSaKW88VbjKCgKFBtir+TwoI/72GDMF4r53EoGWT0yTxBgV4UotAKLhLWScdRnVEQ1kbu8FD2assH3+0RPBoHYvj0d30YmVdA+Ifz7IPNUD5QstItgsVE1MmAnGYvuB3wv7W8eB0JOy2t3n/9v/1evyzAQAntTCIbSrEFmZQMHkNtX0SZRqyNdkMeI4mwqDTq7NgZrg1hkZtq+NcVUl74IRXhHHpjHrpkIjrpAMiZDzvwtOoHrxAs9CQk1ddv4SM7zr+5ZStEKfFb19mq4QcYqhc0WPDSgOjKqvNcfLgoJdiv+YFhm7p2xwY7lhIo3L4VDyL99PjUhO1JqXRemp3d4RyqXpxnfrd3QYY5l+pYcv5ZtdvJcmdTejszga0RkNnPTqrqyFzCkemvoYRhsnCysA0ISnKGrDgWoGU7obMrK66bA17e0N2Tmdj2hRMIlk3uTRFJwOuYYSjocBvmdrR1sBW7Qa1BhfjdJF7NhOzxXhqHztY/2wmt6s70Y/8H7s7KPOOaUT3iz8aWgyHx+3nsOMLuLtNWpC2HhunZBl0QER/bZYJHz/Kq+6MwUCytPSt7kk+TD1DD7G0UfrvIyo/yaXLSpTneg3P8bMK1C7k+6VsSZG5FI3Kh70it5d8E1d7K++RlihBew5PQMEonrql3ICULSmoa7GKcughObXxrJQF6oD4EwR/HuHEX4o6JG+xTVDlf5C9j77KK2Sjk4Aax6MEUeLp6pmCYBzx7tcLy1YqAYa/+wacAHx9XrPW/BJ5JUL5FK3KZyBRfAYil0dHo3j0sMtPDsBkvgOEciA39l/5T59/SyEOTuiv9N3fkohDpB9wHPFQiL6BNjnus5/x0ghGIW0aIJCVheaj1QErSvNscf+7vQd/h7pYbOBJjHbf0Propx+e5B/9OFjw9nuZUqDFN/PW9Fhs81XreWyVmE/L52JA5sgDhy5JH3AOZ50jxh2jS3mKu8PPMFxcvKQ6nQCNIpVcpVXHfXJdmitdx9F40SgNSpsSD3DeTnE8EMlUcmJLQ68ZnwjeKLOnuopbn32EnKNDX7yOLE488oyfgUWxLLHylrEl6ta4JyW1/so/R3xSkqY+M81BPy/QdgcV7J18S/YmK/L9u5isMwZ5IvdPvZ7EC4fAxXO1APS0RVfAkJvA3B1SZOmyy/VexR5FKmRTWcRewkXqJPJ5egzbxKmFy3ojzuC9WyQ4momI2u8O5guq6j2P3h/uYX+8JBdRfaw3Cfh6o0igNYnyNPrAp6aWCiqFI2WzOOoRC7VNMFDNaNg88wH/KPvJT28TM3PeZketBNZ56dQD2ivVgBtzGfngpJoM1R3W4zdox8rfGV6k22K/CNfCI+0Sndi2z5XYtg+dj4LjQvRVdGX0D9EPj3vnXqERD/D5KB7g6+tjNZmpPNpfI+0sOVmhxeYC9ZHAya8HO9iL9TFTXL8dj4zHoZc5yAQIK1sx262Y8Bw2o9uCIdJT1yz772JzZk8wwblOLbV51d8Rpyga4oGltOAOZ9iCsCKBnjhNhh/1AKeT3AZVKHaab67Tfdk5mYN0jbTxAIciS0Tp0qagB34QdrCKiJVFPBlI/Xz/u/N+X7Z8XNCyBOVGHTDLNIDM9cibyxJ9Nlq6mpfUiQcKnmJokNQYeZDFe5BNPR7AwfwjUJye9/IZcojIZ7S1Rt0hOriHMBFpEM9QGefSJpTyyptjWI+TmVl+p0i/65T8UpIE0CmEYzh38uUp2wb/iMhov/BKM5Ojm4sK9iFHvldZL8oyUqOXJqrXADiY6Wn+jla5NeW1JmmBzkmAIHhiPRczcgrZ030z9L5HWu44TMHecPMMwMFs3tZZZ7Oz3hgr0KIBGNN/mxqeTSOHzBmIojT9E0wNZVKQXaeXeXJULaMw9u8MbzgQT1KDirdWnwLHtqedFy2t6qhPFPdkg4ziAC5/TWM0AGN49TSJ0YSZ54Fl5t3D8F5nRN57G4T+ALk84PeylIuZ8gJ9HEZ9e3PNdhQFCf2BLwLgyaAyl1xn9vrpTWvDAHGxNWJondl8VdiaARwMXxZzF12B7CZdogxzZ9YhLi2pIQAXR8Lk5PH9xpE/Pc2jY/Rm6KBY2X/30ABjZ7kSYFvjoEzNf5e3Am4AHggAz+o/lRTXXwLH6m/rv5cV114BxxqdAOTY4zeSDT/Ckg7R+xx3MOorcemTfJW2otYXiMg2OjO0nsAbbPXrxGSL2A8NqVZ1K6i+UK/uY8xQ2mc7hbGL8SiUEakSmzP+14Aos1xpLSj51UmCEs0o4qbIrOL+TjoJTRz+4VZeceufvJHA6/zUYDaU8PGo9sfNXP91Lk7aJpj3v7YgInP20Hw3bF3DmAr8yMTkBO/E8G2dgC4OZuoLNzXs/xwf6MdV3pns1PiILzBmRbbc3WtEnRh8ECPFWojRTSVBGohViHnUYhh+0t1NJcI/5ZGH2ISQDE74z/7R/lHy75bN272vbWm/tMK2HszpWBpH1bLxZ2sEvq0hFyLvRqYm+NT1mxtTDB+cZOtWpUMttH4qC8AVmfAWA+DdYDgAjHn4AJfPHwFcr/og8zY78wFr4kMmeF3n8hn3/g73/ulDKeBx9nE2A7vJ6ieEmDTNsXiau3Wi+tlQZse/oWtglJy2DoeGoSIyQXZBA7tWicuXy4N7QCmXHoXHsoJX6sCo92OSQkBcW7UE/gYBf41cwrjbiQPhAAVYHjoFDy++Q+KzkQ1u/W7NIv7togEZmTxpVIqucfcMnFhADTKge8ihdecn3xE9IBG/CQJern07g0yRQYydVFS5oruRpdmlSxcW/uWYZ6HKtWBdKEABmCTQy942dcbLdlfiMehiF/dvF/NP2nay9/yJm/2WaclTwFl6wZt/tDC0h8QjM0Y3blvcVqXAe+5KmBDO1FhWeeXRQh47qQpPug5ia20OPVselzFDOL2VFK0vNX+IPXB1yQ3/90pgpdexZLkLLs2E2O0Ln8qw13ZS2JjdXsXbgqpKTRCp//DcteBfNjo/ZMytTtJxScoxzr1wMoEufz4wrcvepWQA7LQlsQVVqWIICCjAolWDRCGFaRXNaDgsiwbLYdO6LWhQfypUSN/EYp823O295MOEjDCfrYr9ZrUN3N89bkrswR/3jSVQVLnW9tmWUDzCgQQowMpM+x6FHx7YOr+t2xAwsotpX9/sQ/baoOi8GqEo4AzsscPQOGXJ8r+gO5y2F4X/JKhzrqN5BbI8BvbbkKiC0gzlb9Btohg5GPXpPK3sFRUR2SlE8ye1C0vDA2WTlAUNeasLHD3FIaNeGsuIKvwO4tcx70yDs+krCPBLYgIP94rJ5dcP4Wy42HPYtVHYbUzUM3XLXzHy/2PdYpdrHaX/PwC/RP518h+aOeVh+1nuPehUL+4xJeaS6Kwf9In+nWcFX4Ow7zyIosCLNestE6xQn+MWc5ex0FYb/J3zeXpm826mHJTTN2BgSLCEOCvUQ25NhnfGWwV/B1dSd+zDJhw9nHU8KBwaPUvA1KeybAQ7wiSzqyiIfGVCzxV0FU6uwlYRmtz5eFZPdA0uQaYXwLHWsnxxl39IN7kJzH75OT8NFkVFg0XxSyrOpKExtBQqqN/WW9Zbbijqo3wzuxe6t+0J7waUkhIoFB4mTxtPGadkP4ynEDeGlizViDOKHofb330rr0D5FGNEBqtBNu0BWQmV0XOKi3jMn+rPl07tahilUqa7uNu71QVbxI70nfQJS9RoryWkQyJ3jnut9lm/xcIvikT4rEm6AdzJbgS4UCwG+4g9HjQ/ZP7tNuy8WFKipleo7xgYOoAtdm31br/As30sicEb+x0d+ZCvVZk6WqUGQTkRH0BG+4+K9KrSh8qU07Ee+ITJ6F+hqo8iqgFOZWtGqzXDrmXl4yncNu+RA3Omd8qYLpcvRpl3WY9pXm6D46zvlo/qmIZfQ+rIIaZOCopC3gtUgy2unSYJUJz0qEw0+ob9k426+yC8vO6qDPd49e5iC3vzbprV1IxDyWGKRUuOxa6Cld20VdFX1iqf2hIys5NTnbYvrHvXZOfNcaBzygJPz5YFd+SLOPKLPHeuzjiUp2fCw1oyMKpQe2UyON9wMlh7JTRMe2kiKN94Ikh7SRrp9OSliJTiystutiC2XWw0vDTCXcJBwru/Ka1IB8SsZCQZT8Lv4LrUmaPBWgu7y9FuysWvEPO1NTYgLyavymjBQmGxhjrZnA+3z/NArU2D65F2uu0v92SPVkDzSI3WUETIxRgwJvEZH9st24Fa66WqVGxZ1HMlw1iBHFevIMpOK2YqRtDIzNLWVOGw5XjsbRFxAw1Iup5mUuLbvxWCEDsmJV21Csex/QG7JrFV9R0NhRX2PCqbL7MD/lEFcrsNh0OWjCY2FTJRtNVXk9eXs5qUsZI3KXhMFrMako+vjlpiL8RqXRi1vLI+YYU+PzWjsTRm2Wc9X+aOp5QX1kSqDePhs64JVcEwdHxcB4l7V2xqSnl2kowDPflx9SNjjolUTxzAVBps4Z/hHroMj2pXXst43mGdKW5Xh/DPxUsrw81Gfps7U6ONxswbgr4NuMpF5OUzNTqwHMKOpFStPGiimhqED6DzxBrxept76fHeYwIHa331O2vOqip8dMMVZPhi9dWSElW0NSicCo0CbzDu0vhVw/uLt/6v+uZfKI/B7T/aKx4o825mAXoJ0mjpj+NnBTaD2ypTCmpiw5Aoi5bZEyjkuXsFGBWxw5qEuLuYN1xbImtz20K1RXahwkfZHoeie7PaEwNvIJUFE2VU2PkRAJt8yiZAmkrsYxrDPMovmlwo7ZNw/w26SXCULdiNrqjoORDALw3T8Q3O8P/u7xH8O+MGMIYnY1iVx2i3YTTb0pFoLtOPjdtayJDneyhmDLfJn7IhhwULZ5kgSFa2zjH+qCqk2BOG5+zgmJwVn5pp0hgYm62smpir74I72ujJRK4WYG8g5utJRL5OkeRWGp8kW1+VL6nOhOHdUabL5QANQODUzf7O3sfV8eqSEnt+QKQDxIIdzIsjiem5FMEQB+cAcSQ6k006NHAE5seVGanj3dUVWZonAWgp4SsVhfjZRjXx/UP9YeZjAspxr3Jze0cuX6rUpgWJr5wJ9tNWCI5PfeK1NguIC4pb7ItdQTEBMUljIzMs0YZ4VXrneNbN/Ky7FGQq6GB3uiGm7FjSce+CMcom3SHoP/lNQ0ZrPC2Y4fBiTvehD6r8guK6K+DYFLEUoWJwwRCd1QKffWOuJa9S3X6Bf2W1ABjDdtv/NiQu5Fx0WD7QsgXUPbz/dDx1ttjurZnVjcjQMyf0JxX0nM4fGFayhom9cxAp0aehobEqZhRYX1i/vf6APpJNzR2AY60IZmXm131HdZ+eJ6+yrvv06F5PbeV9+1dgpZSOAYNAzUMmhlAWwsef7Qb5VORfhGBvcF9WVhAGpUcUEGpYzXjx4xopD+RF/bFCQbySiQY7gK9xZqqBEji+wUpnXuEdHZBnJn9BgKgZRIya/h8OGK01k0jxqSg/5zQ69l3qh++E51O9cHGbg40nIwimzfYWVM8Dq7efBHoS2rzxpumXykY9AebeOP+idkdlyYEqq6WD3eFUhNPhZ/B6VhUrGhrFpyLgHCoWx6ItvJUU6NpJ5kIPQGTVut5ZKlD7l9p1+djAD5Vf63p3M5dNKv6RLgyRyOMZNDJZHBhO+X/uxSOPEIe7pyeCQPmrBkbhZPyCBJIaJLuT/9DiW048Nqp2XifmMiXmnrzliqHBFBnAIKkxJpj1JIMkmBLoLVOFxka+c6VB0pBgIQpxf9YU0Ppc70NsYW/g+PHmXghxrdVa6+dvAoqO9Q20QB0OuFTr4LHWH7NVsyadBLGhtzwLf4b+pCBTqkTnPECecPaLRmqcuxRCyVgMqyyMNCeqa5oUjLtlrQITgbt0rTgLvkcJZ3nAaixGTvWGieLNhILBMaGx6KXIrkh/t2pnifEP6Ar4ju9c85xXwkgPM6epXyebfvvH+HN6cGxoLA1Mexv6EpBr42YQBTJ7Hbqs0A6Zp2Jzv36fsiWZgkH2np7kTLcx+7JNis/505vW+CTOJr6pvLZMCVlo/iZe52BqAk+T2g6oPQPojXAwAM7q/Nr+kCHMbeWnV2IRXVQcQVgsn3MGhhG4u2tN24siLvafnu/oegUcjM+uPOvTy3ZbebYmHtGJ8SZImDZl5grQ7dTRo4GGOEQBENqEiOhC5JUQQltkO4vIqQoxUWOI4Ntaa+hH+eR6TVFgntuKKz8Si6L6YaBDDNM0VmQUORjx34f0sg8ZBUlF+5D975C3VVlk/vFPlIx6NkNe4qhG2mOFsO8zCtIKdqi4YWyScv8hb43J0VsaNOypNg2jMA26YtNqTz9/sY24C8WYOeodGaVPw594Px0MHdAP39bdTtIP65l4VuXYIeyqmedMYJHgj8WhxXJTTy6BgO7Wn5iYmCYTBzPTmHEShjJLIfkXvVVob2ce5bcJlywG82vKaJo91nyRs9moFIb4eScZUjS0uTSlIPTyfTMiVlCaJzKO4NJwIWwfxB3bWJxeH5QTvPsrC+uvZNTCm6dqhVk7uuBJrX0UNSmsJc2Vdht6XG8CiMLx6ZUOvWy3Ve/HosFE7c212FpnYO+zuXH5x1S+b0ulcousbgYb1djQO9dg2jt7Qy7aPSk7+JzFiY7eCGRHAM/uzbedfGTdk08XqaWfMsoOWcPN9pBj9CGlldSRBM5Syt9RUxN+ZGOH+iVpLIOYoqAx753RjuCKea+FYyQT7pswcz36Yhlf1ppdaWbG1q2DWV0lZBwCHshOYKzyKvGipxpPD3mMTAh8xn6oPGBq8Vm/brbbyvdj4hEY07gQuP4J84PvzAvCv77JyAKe30JfV2WR+cU/VbY6bzpBOBYPFQlEyqnjTkFkLVGlWM+Jz0pzSnOOyR8iWqSYvwfmZt0TBeuG+BgI7jmlQs/ukibrxSdrUzbktVRyYJhcaBR54wdVPXwxEYfIJeGKyXjfxSF8zLhQAb8mmM2osgjFFQVmavRO5528/F2Ou7gLKGFGm3njzJDs8i0goeRxpMMt5RkjO4R/BYFffPnjIGJY2lN6djZ+pYej/wkC3tuNvP/fY1gFzVSKm7zdTUwha4XdXlKXDrZWhZKQ0EiFKS7ab1b2IiTDxOIKyFCLXTLxvr8lHaXhrMAUopqFmzw+6cZLp2jBlypwBWPff2EnYEkmuPhGoIv5cSFjqYtCcwgZ6Rb63eYkPw9xRdw6ixk61sEDWKl2r0dSoo5WOQ6rwmGyMnU1VIlJeprpEAON5HWEMR7K2An0RPhjf3CEl7MQI8G+h7HuBIqu0VTGznGpRo+rvotpyPbVjDwfLjrCC45owNKHkWRpxKiC865f3LzAE2l6e3GLs0W1/7bIh5oN4JtQ7/MnnBopkZ0D29PAG4KZg+qHpIpvbptZPJCTpsZrw4VkZ/yrq864h49rxm3gbWiF42Rm3Fc3oP+TOS3wVl6F4/T8vFhcy3i83EoxQXRGVnU8nkUcXnZ+WKpHZIi3ubt2i/85lLCsKgN9RZ/Mm/QLYZcG6B3ercpYTJBPIq/tm/tOreWpQO5QzFyQyTY8ZP7aAf8xxz/A1wlvhzIfwHTLvbn0eOXNjbgleZTQduftT3209o++/SgmICBAKBWCIR+hISqrgmgf0WkPKI85jA6MHOESvCfGOxGab7Tvo4qrkeLdCBMXLom7h0i10zFREfPP/2yNOksHreJKuWqGEjY+vX9WFYm7AQK45mnFlbcBUgNGEimFoTdK/zaUsrsWmbk6XbFGfFevDSeU1GT5PT9NP283OExTwM4vSQw/Kj1snXThrYEjXhTwm2sz4mMMZPN3mp3uV93SuT5cMCB/EM3v/Z2C5ByzH2EqjZj2UBZNd/pVHLb3UkVOueSB59aUzMLE4egeaPO7lf8jIijiLEs1FMOSEy1luWMzU3NArIS3FoevQySByghGnr2l6U2SScI0us4E15keD6SimI9llVzD6J40XP2sg0q3n1DmrCTHZ+TQzPE39RWVPvHo7lz9gnuuSduLIkwM3TJtgpfoHsqDNtfG5PIXg24TFbMo5ova1cV/WRcOgt+rfPUBkIQ9EO8LRZzXx4gFpqr2CfY6z7geJ+btznAOBbyQOVHkLXqlSy8WchEVuCjOCBdV6hic2X8DkwW9riFPklXzWx3XG9uwh0WStN/A5AahA4E8nH1VaprUCMbKl0Ys3NcdD+29yr7JUP2v+0ZyKrs23Zg8tEyvcdZWsc8vT4LMsQbv9gqZlAu2y2z3by+byOHf1x3rg66/tInxojAJ9aSCaSLpo0oD+BVDJOgqHEVlCwp6XvfaRbzTe/dfCE/y45hxut6l2BW8+Y3EAkXMEtZJzur+tjrPGUeObKTKMixRb+3L6Qy5mZWCLNNtB8pYnwTYKXV8MlKtIWr6jQuWcv0BAjFQVUPt+4PswS30NFdt+H/HKTLqJwb/utAv3pPQPTyn4YKTfKFk/ywt1PuoInDQS6IZ7Mny2uaksmzWg941cl4mPV1IgI35lQmroqi1Begh0jnf1qZPRBU9i7avvFYI++hA6xVwwkYJk/z07OANZLNW1oGIiM0XBSsLW+RufL5UTkXlIOSx6DLphLiulvjy2/jcfyXfOQKJmC6CbBNxdOjmLEh6yKhLQqI7EUeaT58b2Gr/ZKOZ0+31eBOvs/qqW0D3flHIHO4rrIiTL5fPOVpnoQ2Ct6fwBcZku+K80KPRSLqgcskkY6FYd4oVsS9ICJGxJEyXwB04q/IRFPYT+Z7vB6q5QfA5VAwJ7vdOowNaDtBciAU6dMhHm3HvY4mopp2wcbzm3Pdt8NqkFFTWe+kfvn7AzlZwYk2AYLTzFP8niUzekcFfPychfvGJEvicElHjRuOV53OucH8jJgaRw3sHFnOHkClcFwTym7llvVmwPyRKX9TgK/g6sC8Ylx+gxaDXRJwlqgQh2QbO+c+Zq5nV1OqQZ1p0iIA2zxiLspqmqwT31HHuczwL6vABa4Q17T6W2/sPkXVC+cE33MkBXWGwXOF6VbADVtChfVBtNzgtOA12q+EOBnqisRMvbBNZfGF0bw8c1XZrZ3VHLjoBDlwTosoKDD5WvhOev/sHeJJ63pOfiZNDqesEOMl12suXo2wb/CvMxxH27uLTM4vGiGanvk4RTGbOF6ZkxBIkW4SnZyZq2Ombut/hqa8y9vkJIdT7EmkhpDAX7rPprYDeDVUvUvsz4oe68mdHb74EpSZ7yWsSfJ3CGJ211BXR/3xd/DM09XkG9hHOLdSZp8758TIkIXy5ex2YFu+haIwNHlTvndjliaHgUAfdwJ5s8s7FRei7LavcHbwTlr9bPF6KUOGZYnin1E/xARjT4R6rWtRUrptIZ7iE8P7cxXIDP5zsAGNG0v5NfwlKfaqR1gSagHY21a7eCl95wGpTXzZGFOS2yxU3OtUG4TkbQFfJbLOlvzHsNIym9MgYhAZISbrrQuDYPu1oXJ60VvB4LeMtaWmmGJy1SZydVlSZh48uTBz/5pH7h/nGokPwqBe4iKuqLeac8Nm/6r/e8eNPY4kp7priZi+auUxStP/jyD40UO4gBkYLL1ViS5MlWFFFUDn3vPcN2uZc/eH/dLdK8L2eR3r+5y7cYdDrIHGoDs82DjvWP0jrqWT28VO2UxWVUvfg6mkHHgVHEZ3UBSUknd3FCIqyFgjTflBksLBtrL2mdbCMbBKcpMpvGa5pbpwo1/oLf2oJoU8nlGZiC0PQfZTKVIjqOJ5u8i0DT0L1PYWB9SJ1//uYqQKabM7UiFU8HYANrLnG5vI0QpXYzvm2FabAQsw4yQI0ajueNUZ11bADY0L9FgGyHr8O9R5E1KxD+f9OVfRjeOtl0+TQ93xLnJkRWZ+PniWcXL9dI5otGs9MTYklzOKl/iyIALZTtuXLYR8rZRevcRIXyM/sguINXpfN+DkNZJTbmpV7XAUT6/DnK/ioGjCDJgmKSPaV33A5FXHduyicfdqLXxBiJC9/9c8jQ/VFNze2Pjs9qv337B7xjvQSQX9xSSWIKwi9v1bcig1lxIiDLytbKg+4Y+h7CulT0pISL9yCm8rTAzq91aY2II0uKbjZrAY1//pjeZ62pDAv2EJdF2u3+bjy+YfplxelXvouyJeZvmKIvTRViFGfIgYzmDYAIUe8T88d3BBXYaN4DkyUCn5QNU41KrbXWvIaEofPVaQBzE3IBXPj9nNs6UlkmOu7fM9esMD7db4r8bO5jDS+6ZdUmhxCnQ1JBvNvhya3P9cXazCLiWFzCkcL/2GwC3+HKkAJB2USgYGCoAwzqJXjzcmwRIF+FIgCKzy2I1HIclVPn6xgR5PI7eP1VGKnePE4C9g5FAo0+I9cIF/WfdsJdYReCuviqLfjbyJW9QVBpgzvPFGgEmjx7N9MNIhys/QLrXFzgCiw120f0oQp1MCTDIJ0SqVw5mN5eYSRNTWUavrdjrAylStWZEzz+Bb47LX2OFaY8fsey4ju0xaweVR79y4OwYnSM/k6hxnLgEUJA+xtJBDBg9w8Qw+cE3AZ8h5PxOF+Q1kMPSmhtDrEQxJF/oz/INdgldr3+wuQJVtQANhaki1ootsnMJneBdWIi4LUrkGItT0ApUl3753Io4OFDg5Ws3kApQOlcpvJ3szctfXfFTz959nLSwMxBip2w8yahEByqGzx8J8Nph9RSLX5ea1JbZZze2nzPTefJKTgHmcij4lxMwQfXHWJfE/GjRALw/45Ti1Zvj2dJje20ZBY6tLl4ci9SKZLv+ayCtYVwvO1ZAz+5S7xLcPF0l4Xhex76KTBWlxUZtSh5U1QELbQoa0Qzo9N9tGqUscdX5fXYPCfi5TjukKylYeTeq4Lbvx35JMgOJhZ2u7Xc72I2iUVl+z8E0ktqxiqaAAb/qUj+BeTmxzQI/Qg9wcSTpKK+tXqd2xs4KA4TvpLaJMAUbCjvkYx9N3i0Y+V5pbfq68+GnynyCRf0nHbDneH0NG2eCBHvWFmjYdl8TSYFR3FbkNIs907gXHbA6LAVNnNbbGNy6SH+JMHpZRNWUNZJWAJMbKkkOdwhKi5gZRqEGRA0p7XRwS4H07DasMGz04JcU4O+bDAnI2n1faWf//forX7cNA7OLugRkD2L7+tANAVj2yfjo2ly1vo1WRkOuxVdiv0bTISDX9eng97meGw3kXxuEqMLWOd9qH2Yf7h4yM1WXYSOHPnogD23V3I/Z7j9+fPoL9Q84YqHyEfAf9l14a5FYuAZrJowGCGHpvdJGMVdLj5LeUBaLx6BojHOy+78Layp3LTU58sTebNJnDxH5DNI+FeFyjjXEYXRTRQv4D9xM46loumk720F6pDah4/DhvI2EB1MkjLv3dTe3i/EHeS55AoZIUkWG8//KvetLFOmo0aI8n6HSP9LfBh97T5K2JdkikSVZsVD/UFKC7t6KHv8qbGNnOMsGl+MoDgQZPbUTat7lAikya9vDp4/QjSelgv+yBv8unA0p+rgEd+DYck7dpJ5lF74gESpBtJ5V8vDLGad1nv8T4ewvedeFmAv7uoBGjNE83jFe8tAfibRzOAU+CYBBKUbeAAEh2OeRWXQ2vs56kH9qYGwAnA15xnagRTadxMBACfcXASMju5MUdJfvCAcv4pzu+QWaNEbgfe1OF0y0yygAwDBxCS01MvB9P0jnkVD1UMxD60Yu4EUSA2gnT3AfmLawLkUABdaK0Lu18kXa3lrr9KH6jQ4X25Ra43UCBdGPx0YpPAldH29ALp2bVkN4iNY6eUIaYU2ToFyc3sK2mBaLkBIpypz2gzbqpdgX62i/MlAxBXCzs0/wjc/bdLdgX5XoZu7dZ6pthWeNf5DCI3EGLjZJM0qEnhqZ6GhD0dT68Tc4iEp9Vfl/ZXTuGJEHlZd0TBukF+esL7ZuPQsom0PKjba3YJVkIJV+p28XcvF+43CRdDCBfrNpPCPI1e0vDCiYI7L1D/QqxNFSv8B0iC/Us47db6wtUB/cS+fiXG4mZKK0rm5kvJ4Z6mVHvgb8bmyAKqEf2UIBeMnPpRBcKDUm0j2eRo7IhTpPi+QzwYW7v4SqWZR/Gr0/gYIw/PxQj/OFxNHTEf9QlJG8WVzkkd+YnDa87jhs0cKRSLNx383ptNMee4qx2TdtTnnRuHYN7BC2Q+mzKHRb48e7jE4NnsdZbhjOMD2fE55xKdd5PPeYYTjjN90Q7Jv6T91LYpBYibndokiL6monybrCgRe06ICS5OTwgJTl+HF4X3H54SEpx+OCUmOLm19CiuvUjwKOZwvLZdYF6sU+WzNR9Bd3NjG35OpjJKA5d1hmlcPVYnIQ/Ppbw4ivlLkBjgYbACZaOq1Q0sDNvVqnxA+879d3B9/uD8fmHMqcelZ2Th9BZ6cf3g/v7Kha61oehMuI4e2nddRlUTSc7PheJ9is+E2RjwV38k01kUPypCsXO7u7vVc/pHqfQ0/8IQAOjbdtgxMmqNI5vzISkYmOhZdTCmRFzNQuL2N8mSOEmGVQdiGkWPPHj52+Cd7JcHG9IpIUWNOAzEPW9VQGVNZMtEx4OG9OlwYEFbkOIDEg8x74FH1D9Igp6t3JxNkxvbqgmW6oMKdTCkxJ5na1evCp3sl+t+h2ZrU6sKn1pxA6c0qpFtw6ozJwUcbdqVwZMIvgW2aAwAeEigKwY4pKRdpP58iEwld/fc6OH9aItUFISr0trkd0NXc7Wgs/EwewKoQXkZwlew9WegKEO0QM1ENjF/5K1JoPJkkJJujI0U5OcQfE1lEqQUCK0KhgkM54/mEFS/Mw1WCIRbQWBmExkrinuHvZPmj2FRMIxHA6bCI8Zw9dxe8OAl5hLXPhSTVkymdGcEVYQQOTfUTURQhiSFAT+t6URJOEj0Hum/jqOkne5ilS9RhodfFNwNJIeWqORGXOQ+geSrZuee5xaHMX8qUIEhz3JLIRDao9KfwBP4Z6urkdUAOSx+FUxYOVSWm2lRBbUu3Nr8yJSpF5aVyllRu51TxEpvI9NduCT4HQQktMi5SMUSW5kJxlKNGUO63M/uxmZr16D9c+kXiQnRE3wAxjSGgBIkjA2+MwAh59Igb3XhdRFvUfVQtdORW7T/L9qx8zcL4ELrUOvk0eU09kY7pFjwiBF2GWG6aLVXGvodlf9BFR3b0w3xURi1CDXOfHaJdw2mhwRIucFzSN4GvFkibNqeRxUDcIzueVKVOAuijnSM/8REbWVQprER6om/a35vqB8LwBh+XUOnZiinV8cW74KyQ8RiAhuzBNpK2vSN2DlF/2TJJF95kYOROmscjV0fWu/m7Z4bmjtKc0Ia5jFf/rmGAqas58Hh10Ovc8HciaEJhOH3Aj3qTxFahNLMGuMZ45gLLy/x1HfNyM0paTA7qAPUz/zYWez6g4EMxaXi5v/WUZO4/dJvMZfO7ePMFLd9IQvGBmC46a5G8JyOqSt1moU9HXvBumtNvVP/XfTMa9BWyeS41THS4v64VIjjAJC+j1uKXpG8GVbern16Ra6zT2oa25ZA86Wi6K+tzxmg+OXs9mVH7/qywGSF75fZ9Cj7TmGw50wLdeOiIZmdOyDIfN5EpTbpbLZJu8ukFU6Sqh/iv1QgGinQ/ks25s4qxffZbGjkr8WKZTKZPaM1wPlx7GBZ/+RlceUifAu9nJyuvtLkR0SalUhJ7su1STFwbZBwMm+UPYZuQIXQxJCr/U6Tt4M/W8N+F2qeAmD3OsCOhaF0ypNw/pvvl9/zD6mVOPu8W9S5nLnU2LNRl0Umj7zH4Nnl3OWim6FeAAL9KGYu0CZfswy5HHTFNyErQugIfqRKGkJw3nT2g/TnLbyxbEAeamJO72sqHaeaXYJ1OoPksBg7f6cm4t0Xf5A5yW6vGddFB6XSinaDb2kuz81kLlBP/4XW/dhwY2QJfdPb/qWm8BjAqlJqqsoGgJiro+62x94Hx0d7lppkBe+UwTfcRNidlOpRSKkIa3FKldufiBfspMR7aOb8reqByuCYoFWCL0tv/9CBEgyJR0YeGfSMJj+cUTh3oKo8PUWCJF+D37i/96cjvqW1AKdRsR1dEA+pz3okjELTSY62iuLuWNYLtRy3QLLXAOy7duBWPgHY3wp2SABCnzKmrnXFeKG0MQC8vLyBHdSHR/TMxMM73VGZoLq5dFiU44VNoED6hKvet0uGd49ToKhPMmpDPliY1wnR5rRM1YqytXcCiahW6XF85CJu2I1AzYgOm1wmHH4fAZac44fYli9n5sCLu9xLt9jJeF6jUDlXU+3BbEpMzE0a94x9a+CyMARMurSNsK5czM6xnt/mXLjFnIhHmkSqBbp6H3ZLcmJu2rBl7C4JGi0+bdJstn9tVtEi8I48Dltr1By3P5/CluBKIkv+9VkkyVZGFQA0fkNen3rFe5QOKiV97g2VJYdNX0sgWeaGINWskJme/PJvRN3N5uF1UEq8m7o22R9oVN7wKzzlJfq5IO6vT9d8+5XpQKdUnCcQHZIXPEGc/gZcXyFpsNNfpHfgMdeHN4GHLEh+QFNLr0VHwguFj61QULUunJEkg3g0wXJhowoPGRldHl2AuECan/59kpRDALMdcT84PXfE9qscX6aJn0wzPcSzES7DwtWMuWJ4N5MARDgoJ76b3DlAIBRXVj8x2pNDcL8b4hdz2kDs6+CZnS2aD+gduC9DXCEtcfcfEgvMFlMWygs9LBIFWAyF2KkhgDrJ0FBYiXwjA28SbQw+bO38ZrwfOuC/NF5DZfkCuTNZCPGJGfmPL+jXoIFGZtrWsnrN47zwNqdqBcD5vw/wWbdovSnO9UL1K0x2vPLm3PWrGkLxodj+oDPV7NfbSBFV4DzexcDGPb+/cKyPAaz8sbCAp2XY6JIBfHgf+J//H7Uqq0zH5WHj2CMmyHqclAHm+b4ZiDV0yuuEOsq7jLqt+UQCnXlOZjZCLW6oepI+PiGh13f0iqjLMcV4HjtheRMt+nDjNEX//T45Z2NnedFF0Fn3FYVWUGHUE81oanKyCIBxLiQa1i+/xEBjJLAHGg4pC3i7+TRhZ28JmHKhvMeIaMnRREQQlzoYIiUYWodjXOSm4NHMfK5s7JfLi5eytvKX1sApJArZGDgKzmhrsm5MEOMcaNVd8hv0C/ASDDtLtB4zRtXPWlFDB6wn6q5iBKsG3qZYZL5KUR7MHXrWAqkf3MnzB4YGOrlAc0UXOB80I8wh5rA9jh9KjveVIUUM/pR5DGsTAC1Y89vByWve0J8s1XH3nzJKRx/DYt46SjV5VEyhkSkpbWoB90a77mLvmuQ15GiiZwFBDQblX3FSGVNT9D/vF6Z52NYSwZoGzbDBuoWMS6UXmpqsTALExMfJEZYhX8DAHUhfAoOt/bo5tQzbmSNa0y8sNx9zrw/Y6kaOrsqaIXCrolD7sBCT0hbLFSBga3S6IPqCpPSnW/ZkeAw+/bHWVmBPPYs//3EpI8exOFsAYUzcTxoEgkaU+I8IQVSo9uYN7ifS4PXFCSMFa7JLs311vh5SnCFT9BgN0Izm0yI71T2QmP3TOk47NLv1rNxKehtcEcRhQahwyh/4DDQCFo7XEZT7QD2gxmETNknRoyBlt23KiJ+pZOWZ6qFVz/EXAXvbJ/81GBejB5p7MPusQh47P2ZVDMKIMSCMza82oaBCBzxUXIOssfreyo27YBUaWuiw4OAmrrT/dU94qtLZooDOPMr4Jxp1XZTWV+afw6TicExqzm/UfvEzLnHdbZn5Biqyqju9tylT3dbRllVwKd2VFU0jkc/4SW1zaxK6uyVdrca4yUhqbUmjvT39mo7t5bBlKXXtpC/wyKSmVK28oCWO0Et5Fye290JaSROSqqiZhWmUNVPThsyzd+ku/5I1SpuEoE0aJSfvK18Jj4UWX7LJ27zb3edLEfLvXayRWvZ8GPwhxi7DOp+IwokP74MmJKKTseSkRZjLy1pXXQnzKa0ugGUVYhLBGem6ZCGrGWE+tA5L51cbNRt12vgnX8QPRGXya7VmtQ5G0B4fE5Znj5dehNatbiW6ttdxUB+FXYo75SpVzDFJzysJRb4yoecU0N5jXSInCQbXAR+4IMCYkhdksyy99stA6bBWl7S7t8WqVVr1as2YnEryHBcXjxRXVk0XXcJSzVnqjKDPDIPXjFDazOuaSbqExppkKS4eLq4Fbi7Yim6gR22JcIK/e23hLhV4raL4Hdu58juxBtRizyB0WxWZbKVBlQOCDUAQBixqCzzz9sQRgGYdyHpgUP4triuYcgzXh+fl5Zd70IPCbqKY6vCEDXi/W0tan0B/t5P/ltHiesSzsH+1ZeUx+rPpluiXk3p+AZBP0VrTKneZN0CpEYJiVOpuTTdA3F2zIx4Lz5r7ekj+V877917LoTlAWdJeykxs9r+fPn+xzadOYrciulBIUzDV3YfsxyHVPhEHNnwa4S/4JLLQJxjeCCF3f+2MQOV8UseWKgfsHsopRASMyuyhWPgtHjPP2JzCHkDhEHZ8fi2B1HwATrQLRfscXgjB/SCkGLAbaHF7Yi0gBWXWm1SvO1vBloHgsGdT+WzPQXtx26zcLO/s2u2aDj/nGxdvuA9JfZn5nOMnDtaRy5SD/XntEWPzB5Am8KhwWaoKU5LrGzPU7bVNxLVFIfO8LXwCEhryOKlkbeHoYh7k3FfRiq3+MNb8geonwUvgBYUFqcOYA9ttDLYxf9FZMjpZ/bDsrcSwfUqlsyn/LlVB6hKrYDGLbrdtMXjQtMe0mr1makl0erFZrmp8qaJycrm+C8fJxkgmcU1KqMTWRCQITAqPXpMsf6e+PnYAY+QYggYGkA3yiV99H6MNIrGNpSo4vyK/jyX2qieuO6s71XuzLywkbzDgWO5tRTKQn50Nva9KTDpOT/gKnSgHpITqt823R/g6c8+MKPEOYAn0l7sFMpOzmxA3BpqD9mPWot3RfjC66M3SQHALGc9qaKbcwhOh71pKz6nYfpE8Baj+nnsF9NSk+XV5qa2znb4/B6iyiL/8tQK8ggfgFSRAdWqvgwirHXqQXpQXS61LzRSHL5y/sJOAIk0e//CYEsHpxZH+gcEFczdCeHyVKBuzQ1kZ/+cyoxBsl2iXAE+ZxH8QzY75eplViL4qMtlsuvWyIOuIVYz+JjOlzbfFvldIlxzFnC1dYyQUJaYGJrWbzadnJLYFdTvv4zUIDnTXtusJx+YaGlp99/BPLy3068DdV5/85hwOy94d3pqfyg/q39elEvml8rjGeTcJEkrmQBPOJmVKBDtGVvGji0cRm7IEIT4LopquenFIJNZoCTR90KJCDGOmbCxeOYyVEhQ/PVEQp20IOgiVpZaOX0l7zDdecQRiQ+XIhTNXCp7n2qVISOi+Ye79n/vtm/T3L1vWWjaaV5sl/2TWd9RLtV8y5p0tyNJDm52i3e6p21LPswx8tWLECEPW7g6PUqZRXJ8dmLTkWat9vHvYPdcUJAqZJKrKxiDQmm/W/MKFKHLPjWgCHPuwii02Cgbg78jiT2eIy1ojTZ4trgNHu95ZQb4FIFHImUNcUACTl6u7OZad2gGYrRmBdq/IUfg7RQyxjrHhQwJVRUDbEGFFmUq+yrMSPuK4owlNoNOCA0RU+bY/81dHYAiwbC2DMDKqnGz0vJo+qM8vJar4VLaOTBPwVOsZvNI5CemA1fkAIxsQsLTqJ10iHswsFjzfajffGpwc6NeKUtaajFbSqGJn4j4tq4+1Mdjb2hDsZWUbWw6gMTUGeJsaArxMRHPztqHk9TtkbAV/5ev9JyDa9F/Ax4CfAYEhlX6f/SCD//w++v30+08r2o3Sf9+qp7+5LYXrG/ctCc0HvGQtW1NRYU51OiR6jTKfRypGVGiTzlWI5elctlptW9Xqg8PhQGAVHA63oOst902/S30qZ8NH67QDRGmnUE0xofxU27WkXwTI5yk8VYlVY6v3L70KSvNA1yw1ND2b8xPP6T3954o9zrqOUKk6psbvt8fAFVdTbMeWW9K5fDKGQkam+zmwSOmNWl/kCJLwCZDdiLGuR7Srnv2kdvzFx+VZ45HTgTxySbfc7f+YJveIldU05RdWN0LyOsvrW3Pz6ttL1/CLPKXOyQsm4tnCcmiaxuScvX7V3MrqSKDlzJZfLPbLr/e68nA5HBR8XpzHb+LW8NpVGOYtZbOwGI6WRmJwlelnjVsajDjrFJkOO697d3e+9lU6Klsto8ZMR4uPexcWTzDwLHkrBSyakw3NslTrtUCuBQWlKSDSDarwHDgcXivbd8lyeynECquPXGhDCTvXfcLOx9OgXWUDnYvb/d3/ThaOfv94oikuNyO9jlbkgvPEz/drC6VYEo+Yp0kkmr/8cMtywechc3Z93v37u80JnFlYAYjrV13Xrc/Ly+NP6umTu16kX6Z/Ab/gkI1TvQNZ+v5pMbIC9sVb0bGZaabyBFVWYjRYcDswu/8dU2mhruSHPpXZKScYPdj8NdOIlPRQI9B52Kz2KSA54R16rjGGicOUR6ZrqWHJXD4udPffo3nsp4kO78ojw3lDuVRmp6Akv/KRSD+Tomz11unHn88PPn6HPLw9u/qzv/f5J+QRiHfZUAl/Theia2XSCAZAkMbBD3rnqyUc9US6l/OFahE7Pn9Gld0VIevyLiWFkMrU18P05LBqLebzp/tP9fKxchiOBne3EijT+5Bj0Ww9b7resJG/R9MSKDMvV2b+ai8ObaonnzMQ9G9ASzIkogWElOHor0uQk7NTnJPFWyTE6ZtzcOYo/xCve1sfOYysD1ogE3gtiXJQ/ShRI+dmCjbq9f+cWTjAn20FFVwZLIIQrpBmWZi+E17uK6343r+Xe2EbPRsWKgikWIhcqE6qayAPiT57cz/Y/EThCIpfvEMsOSHy3EBh/sS4Peo3gQW+P9prns3rKydcT+K+5Y0hebg2Cec+q7bqLiMVDqxigzcl9YSXV/c08Tcm94UX2vtaNOqiq0LbbrJeOYceCZnFWX+3cr5l44yDE2QCNmBHX/2NQHsSzg90VfWPjBQosFK0KwiEE2EbT33CQJTV2Ay6urcvhzdybf8AVGVxQVOKUFAiKGLQ7FfMToj9BqcR9bqBoit2tH3dB8S5GBrJBeuNLk8u7v8zhwQ6B89Bwo44M3yEFY2EDV8ejewcL48hK/JjIW2CJXdrzEHghY3FYXy92XgDOqruQSsjXUwbfnHa4UAWPmvYt7P/K4oVWhITR4a2uKYRqFOZTqvPjG5qercB8xJ/vXhxrA0UFli+Xeih33HTzlg32Yuaw54+honcRUg5e7Wzi+yo5miB8v1q7e34LhF/fegOybaRbLkYuSBM406EOtU2V0DMcLDHnxbXjp8vgkMZyoh8F0+YmV/hnaXKeYEzlt7WX/hGtpnoJfjSHjfkWQm0Dp+yCAahauvZ65Fo1YSmdIZEtGSubF3jlOMWWaGjpZDLkMfVs68aEbuphY8HDA1oQfI5/bpGSXua72kM/gRfBhvcobmkcX0SOrxXj0TTKzTr/+Sq/f14iciUSGVx7eWD90qqKfdof5HW+LSxw/LnJ98V1P4i9f2xt8V4848vAf1VYed/qT8/IYwMAwN6vLqj/nyn6S1m+u1DIa0FOgWRDwEJTOwDLTlIdk1LiMuQFh5gjt2eIN9O0Lb6s9OjvGZIjmx2fHFUSXVhAW+x4x7XqJ8PPk5sl1PQpCS//xFfeSVC/44mxuuBi/bZj89NaWn1pgs7l9YzMawVJ3/2Fyb+jF8eutnhCGIjw6wxBHxC9lB17yCapHp7fEvjD4Mr4TDE3ByTHSEWQYKpV2sMP7QudIhjfYrz9QaWi11+4OvsHqLXp9f1nERc7L017lCYA4JCV42qy5R0QUP4vRSX9iE3TwmfT5Kp7dl65WGQKgYbGJnYNfMG2SSGOVJ2cYbs1vHYVu2+pS8Pj9HRWICyQSZe/PX6JmTfCIn1VQjLxvegLHySzwnlpKKRDXsNSAOZ/Q1qk1ufoMs9vfDNy69od1/PhpWy7K0tLofo7x67oK7hzOB2eY5UiIO6B7pgMqZjlA+6SiRapGSas5sDhx1uDDlmcJjjDVbnLObBefOVOQOWDbIOjg5eJ4lMOwUWipUUgyy57117c9dUaKlssYhSIrVouwH4wMkuMFaHpLFVYAqlaHjbHDR/prIJViOmgkaikS83X/xnovN9KGCumQXnfa7ndAySLaZiHvIPNBpZz0nEyf2xhvWH74TKoas5XUJVzbAdeA0ImL6l+Cm3CP1coqCt894RIoyeE+Q8SDJe9WEXY9BjSK76/MUuQoxEd+3M+1dNFbQ9LEiC+2sX+twZyfFTCktVpoDlYLLzHsAuFiiAFJF/hA0C7EGRLR0NGpZmQOyphSwUL4fShekimR+qOeTCNgGyDw+j2ojaDrfzZekN+uIVsdrfazH8s+YZLHKxAz2Xyd+++8oQQyjI0obeH1G9JZrMcY0XdvmufsH+m/lO4zISjTyspz1iJ3j7nTueCKQuihFlwhMuOKtBixMQzlrPN/yZeLGORpZPbZZBT6iVzYnsPWwYwzyC9NyzjW3k9vrQOo7KJZJxw8hwn+O5iJdiX3SxW0NLaq3stemxz+l+5MVfC+LOp25Z4WXzSxHcgLSpxEbzhsI2HWfhweEi/PqwhdJ57xuADeckkUZAXvlxUKxIFiPjpxCUWhv37yKt6NYtbAKSJ9y9OTlfUwP5I/jygnZ5+zMB5MzibUGz4iKngJkY2rABuN/T5ZlUlkaTMZ5dm5KkElv1neNzsS+6TWrxvqdm/3KBRYgR667VWyyMXyqP7jWAdqqg7apuD3ebnx2Sbu/A5tyRLAcUH73id/MfRVxF8uVgDq7oeGRFWJAE/24HhnUHJRB3d16RrCBwKTJZ/hY5kSZA+74ff+H62dFj7QL8MiJ00bsfUfn/mNVw2AQ//Q/hxYWiqi8JDnkIT7ZDM1KIIkmo+qZEKUNl7aAm71KH6pyfUE/FfyMR538vTiSurjpHSKuVJkdsB6OTiaJIqPolR4qjLPVkl57ABJK1mKp3JKMNd/J4FxhrApldZdmWQjRi+3biko/eyxOLkWdZNXnEZ4qI6GqnF85PqylCrxRwiSf82ghq8fQLcG/J9gbqhWTLqJVzWmpJ6Ba0lBFfs62Pg7U3wTfiDsFSD4IbXkAt8PM9CWLRbROvMI+UtOTodLaWMo8RbG+H+IR4nzgzqroeNDhO+uD1pyIcR6oFqiVPiiaHxaeGKmSKJobEp4fKu+DmljIamSUGGquz+FISkS/hed/V1cXx9ormJLIkgonHz44V9X7ZI/hz6G5bO2Tz9VtFlkDyE3MnDhopZbDfFJPvfR7yg2C1G4I9bjGwUW21PNn5p03fzTrsnpZZedLm+zoDL/ulamJaQmTZZElGXF8ixHkTpuqiMiXMyApzrwSyD3O25MWarrJUydYW1mVFWGcqUkvb66AFss9uL8/LR/TjIqOCY2CyYCf3vbVag8+1fSeaYhIG5AN9U2zSsd5D4V05TeG66niUv5TRfUfYsqqQI2OGGiVlXaugQCallyaLgSGwGJ2H/Eoi5KiW+ITwvU0JOQ1NQIn088PnFxT1noLAJAXjb+RxdEPU0RBVCW1wYk3a2NAYC9P+DA7RZn/csV6wjkE3a0mEfDWLbdLk4yLBOjcPAm50hPDi4tOjv+IvLdCWCxJ7R7aKv9c8TWd6+ezE2d7UU16djnwQ+265D7JQkW3d2fbHubLgSPVJFZEkr7aMnNcOtOAkcbo6Z59R2OqOla6nni+c50ZTukxFWdSjlSrO/QhwTSooGBS8kpbrleNMHXKmIhyiCi1+xw9mPhAQnBDhXIis7/iM07b878psZvz/K2+PlXcnQarSohyvIRupdtp/t6QUL4AxCn/i3d0KiHCkiX9WwcE3ndOQDBCdhE94PV3Hwb+5ez/rEqLROTnZxDCRJJiUevSSxOQHK4ACLNZxSz367sSkXeKPex4bvP62xusw464XL8VRLp0lSKTXtONuVIlFk7ZlNeBlFPyBzJOozgNws5pwb+vH/HqTiyB1Ms2JZWiohtp28R5XLq3PdyD65qXFQNo2e/GzodKCW2cSJKZTZtjMfqo5WXv/d93EOielqgR2PNvbHYmkQ1gD/SL2b+YMXyOZsGhyZio0x1IPZ16aujuTplc3uwAYDyQdZQJOentphL73epyI2VExEa05JW4ghdUmpScmja1FjBabub9P0MlTIdIalNYHGHAWgVhbLWJjv+K6tf4ctc+3+2YrqxhwduqZTp8XPe1/+lDEoejDMVmzfrLX2UFRdH/0I6az+hDh+BHpma2419VWVVJ10hbtadeI64qAHXeGjAgc/9xcM0JcjtIYrv3GEfV04OlN1ndVfVhFfW5abJw8O90KszMTTJeXuj5JlpPuDXPjo5B5EDQKU+UQEfqOcT8eJzMW6zFiJt+JtS7HVvFJGLejMYN1+uukcl5IT4qoRU6N/8nMe6o53dFFZeJ6tLXpo2KwKBSeWAuEJzmCnB5hpPie5lYI446ydVWrAHdl9qu1QftHcMXkNJ/5VHkZT+ylA7C3gse9QBUEpA2MRId/BOih/Hsku+eleroVndYU96q1ow6PQgT/0j/nJA/KeVKxYxr3hP/5Hk63c8E65v3/19jjRAAHs7CjOdireolrrV8JtW8TIJifWE/aOvt2/GD/8G4DomF+Zm6jWTf2+OgA/1CXwe1Hay16sSdGRvnHW/WvckN2lkhrKpeI3iKxi+Q11Ysk7zTMz6xNp0hEOHw/P9kC/tAkJ47zjbQY3aXbbTKMOR6+ca5FF7jFjf92nqi+Zh7/AvF6jkxtluS9Bj4Yae750fKAVQS1OvCzUSk13V4KZoOkspUSYqg1/NihW+abzwM19vzhaMOaHx5ZP/CsJ7gMa9I2TtG/vMPUlX6hjxmZW3GVfFZmPl422JAcWxk9AXFMt8kEvGq4bOBD8oUQDz683ed8xF5v75dr3PLEpZ5M+pMBR6whdytk9wNwUZLy9efIlvOxMNbdNzXC+plllUmx4V2+JalUe3jYR3ZT+lCk8/bCxd2DmgsYr5OxopOxXidF9SVwmqSUxDRyaixizxu5fqtiZID9ComUgeJBStd3wJIqmXJSVV+9LIxSvDj6K177GeUA/voQgXMwA5Rem5MJ5YQyR9YvyT7kPf3pXVJGxXVS0n/YOvwpy2x5f09upazYQRjv+f1CA8a+nNABH3HRaHh10BazCQg3nFjc7PvsXDxn7RLhHayPyMkRCoglmJ6c5Pd/ebYGOZeYD1UbH+x82abX/eaQ8QrYf/l8L/FlgFPZa6JChsbahA7saneqe5pY/Y0cDSjz/d6WSEs0Ekf4Lbuu5jYzkZhtaU3cQGiBrQdSIl8XPxBmsXVBKjWg90nBZaRIy/xi4+WCiCrS/f4z32qvZytl+K//4+UNY+sjFy6bpDR42Ncu4TYh5Z7sVeBwhd0zcGc7q5O7tkDfTV3QP4JQfaMO+bj24wxnihxm7KaiqY3fAKWsUrrKEUM+n1dTE6pdrFEggAL+EMu8Wzvm7oTFm6ywGc9qGY8JaZdYr+JpV3jkf7euEwMuNnLv36ffKKQ/h9K1Ym7ESQalxqZVOZlHZu8ExW+5EVPuNdIuC5IOCZ4lEwnSD6oS/tyMLb96IABwNfG/rj2VX9iF/rLRhfHNfobqtmZ0XLe/obpTFeHhUeX9eTk9Pmdm4SQg8nKvmlr5/Ahyz4bzoyY8aiXs16QcEtxLp/zhEf/dBJ/p8KhD+P8G8Evkb2dfx/yd4F82SU7ktHs1ym5HyjbWs3Tax+z5j7D/Neuip19P0wrf/qX4F9tDHlgZWoX65kG1+LKywBVxQli4mc66yjOfwdFRavr/U8QXpvdAvLxFUPe9iarRN6JFtGmxKZlULoFD06c84M9SjyFnu4Rvn7hnkqvakUBBuXzbleFHpp/0R5KpWVXapefrK5sXGlOLeoOpNzZFjP3/fhWTv7Qo1Vase+TUWs336avxUpS4kUwAGnxrmv7qO6dtW0jc0rmj+ZtahOd3YqQBbGMBIY+Ryd/UzLnVF2OEEIYXgvjvHN1eSXIkohfO8fF252UciD5TvEgFkqOk4ekL3P2uXij2JZB4iAT/Sz+0UlCxaCWdDrCUe/szowR2hzLikq6L0yQbJ9ALWaXQP+KckmFjDJ5kmBCqy3H3xwYvnja7cfbLmR4d6NJl7koTepJ6DLmUEJ8D8KgOW9UjkzaS2JKsEk2W1+s2cr/36zMDvKbJsoo1sUTjrrI8wqTgkpdWPUS5uCdSSTC/u0IVfBR9UI0nv+Rp0eyK8H+vwaz5l/ejN+7QRRgpwZgZIcd92lz8B+NDdMRO4vRJgFO9Eq7ipCrXM7QVQORl+bl6u+2vie7kvxZJmh10KvCW0DX+Bqr+5a8SbfEDc+LA2p/CMiai7bGT8IPTueLr66Xitw/BjvKz+a1M27NV3S+Qye/lcs+Xs4t8+bo7RLLPVH7/v4vOXbCu/2WJCbn7RGAQ36vbCIT7A+W51y2X1mRqR9zsJyE/rlsoINwJhPsTGb8rZwJdGicB8p1EgSTzoMqs3Ul8ADHqHKhCCWcXjL7lkniwfgVSIt8wn1QK/TJVrxjyHGnz3A/mPJDAfSFrzq0PJgqNCbCiXQmxSSqp+Fv+CN4zHqL3iSINGoYla8xz+zZSY+0NDt3hTTaDJkPzntUnRQZJSgIkBqEdZyDhNR+eybhQMYeAMqIGL6e+jErEoBCjQYcIVBOBL0Sglgj0J1uD0pbIhnKyoUBsjNcyWYQkYcg9MCBmbJscFitXPC4Qb8y+tWDpdhAU7qmWJRfclaeo/DZAeJxsBdkugr8wNNI3yF/aHgfPm+SwSMcf4SHIbADLJukaisrSEWFHgYBYBIbVHsPqqGF1SYRacEiAawRhXr5c5yQuigqwJhVl9UPh+Fof20ZUPwf6PDDgWTDfp2wyzO8ufo3cfAxJhoqM+V3Ywq4gZeUej8cKGk3fJ6fLgYLP57pUYXMfJf58Jay4m0cp2EOU7o37vQTI3h5USgek6ntRwOFOPAdSr4h4rCBjWJ+wtwAKSHMrAvRTJGggHDTpKw/L9uf7Wua/KbblmVEpHcEcFCRfK+3n/9/k9xBf2mqxuPrwHQGSwU7TIBOcT9lh5WtywkPyu6DPyRuxwoB9MP90T1oEm9nySjAQXdHfUcp83P59+fcU8C3t5qB4I2Q1AxZkvpG1ggF0yL2wRcIZbOoBx2RI6JBu5P9nyWaH+/8uCQsmDjGX5JDzbYyEFTnT/2dbVJ7C2GQWa/Zioje7Ljoi0vGT/hle43nzviMfk3nSviDeoklDMEmU3TEgow3c6GJIFHy6l4xaIi3UBOiXUlTEq7FjLAZ3YMPeJNaK+loiGH0kFurbMXuB1Agh6akHYhbHV/KJo6kVIzJuJY5K2mKWimjD6V+JpRm4Jn7qBvK7CB5tUFHiT4pxOc8EiMmpeRbQT1BkCVeR1SU5ZfiefQRkLVjFEcKP4VbKX2zLBOIkBKB+QGzaIsMI+kqyocUI+utiW684IMIawIDYdMdOElAt43bWaR3JbB7jydWrxFNaJT4y26xhD5nSlikJZU5+B/l9iE/7o+0PeA0KCI4I2DVBT3Vx9JUjRDSG8z5Mf7NqiiHp+fZsTA3qxT9NSV6DC4SYF3re0mLpA2cVqVjm4LIWTeI4tlhxE/NwyYsbcdOn0TZgnF/aVbDhtYeI/7sCrGF3NX5twY13Y8j7NRGCkduKjPArz7QIJbG7t7INysmn7f7FrIT8pNEUAW8/OcToyE6q/i1BCwOmgAHHEEYwCgJGWDGpJhb3pKUTttFeQq42MxnCSoA1nNIK86borv5phPMe304+7n+qBX934eoPEsKWho5Zb36Hhb15/x9hW0IqeYmbRMdM0R/eMOjyDrm4J5ZFuIpfUxeLQw7eMShDJXxp1PS5mXWTWXWuGzaxqHuJRCiDLx8U2KbwYcyI8gewDyP39YeOrP4HDHtameG5uKkdWMSQVqmlm12zv5X1tRV7XIm4CixubNd2HZw2Wrjpp2LXK0BbXuP7m963Y5F4ixTmZSrtjcvdt5ksxuzF3XJiSyvbgbRiEwvgNeqsxw6PbB66THSwZtgP6lHm7dHHqh2s8pRLg0muR3LTJ/RaXCg0dMcysaPOjORuU2NGJ7vbNIPl8ZAmipvFTqN7ob0JFXLBzVjzdqwzza4semiCMJptmeDPbFJ2e9epqexks5R35+uV//joCiy9+zapMkGvtp5wjDvtoyXy5mxLM/h6q4pkjeLbaNUTd9MYNvNOHFmBR4CCmvFOSRtb/vrO3DLEp5GirKYaM77JYBTzq23Qi2fg4rFS/9qGqdd+xS22hs/oIQkNth85Yacz05ugDj47DWOEJDvPwPKpwqW4nBm6fQlnP7RhX5JQw3Vbbdz+K5bPx5NCwMe8+ufgWzxTXiw5Yz9sIpKMR4tN/bunzYfAuEO+kjfo5sWkTogWdaQ3z0GpTr1cOGZ8Nix02Y4AnT6tqcK6eqelzaf+SMRMC0UfDiHZ8EexbrTXV4/BeVRZFBVHKFndXPwL68E3DLYR8dRfODp9v8iOl1i1ZuONvoe//dj0JWGep1OjLPugX23X1aptrXNX7rYQ1gPfWrXOTszYh3es5frGuRYIh2F6Uu2yjKx7Tp6IRGiFt9nsAu3dEaue+f5KcC5UfCWOKSUIvKoio/9KqVRX+o7ogKNLteHADHza4/P9LMy8z0LU3L7mz6xaWKe7vHDNf08s+sRJLi9e9fNwab6OXy1d852fVbiTeZsjJY6O3h4IIrSpf0Li5yROJS/5462z2YOzT0j9FP8l6TOnbmKV5msir2KVzi0xPhZ+Gb7A+zUxKOlqnRVPImnhEEhaD+DAH7qf7yeIqC5REa9KVNwdOY3xqEtjVi0YRg99KRncgZMbj76YDPXcEHnoS8ngYlyqER+gLmxGMHi5SzJ/TXfXT9cwbLu770CNibtijSF6pQsMmztv8xHCcjAiFllE4HvD6vuJwPeG1fcTgW8Nq+8lAt8bVt9PhPqyKNGjuLsReqN7Lf4VTLIvOT0B8v20a1+mTegHnBs2W0QU2Q0uENWE6fOjj6iZkvMIcNwsiC1xc4AEbBFba0b1JEGLbrf/qCiUtvI8PZ6rfD/tppdpE3jxc+vmhmZGMgzPqQ0B/MgjwhlmgTwT/Txrdt4GXaCfiiXuu35J18/DUpBvfKREKQ3/9ckIj8lJ2ebUTT3M3f34aQHy82M36YC/gP9bt9++7Aezz9ZvqnE64EWnRpJY58Mq5+bvtI4HoNU76VgxcooXhD5n4aR1ooUTyEF7MB0g5vAAfVdfrrTBel8wgbjXwj2aX0hXmuvm8G3gMMaMvv1umyP51ptV69qeHV9JrfZKMHNUgpVHOrUGhzgYfKSbPlLIU8X+seeEvoF9eY39e/tDAWnbapXh+lfFmR/zXjsP3v8xO0+MHeHkld16w1cn+0Gb3eUT0L+hj7W/HOmHYkFUUwd1Uhd1Uw963wDsWnO3VVyy61bZNVK7XnVi/OfTdnL1zMuq/tN222T1wSVdnL7Ot+GvI6LeKr8/rPGvu9DxTTebiWn8bhx6IVGcom6eNTNk2rqnj6yXLlec/HuF4F+miviOKewy/E4u3nkcY+D2t78X2P4PHZzN5K3M9hVysxnoghgagL0ZkKvYN9Z3puzycjqr7KLG+2kXwYcynlLMl4jIPZMHJlSEPfEfCRFohCtvvCrih6bQqrT7wq6GiNg4adhyL3nR+tkb9JuOX1BxBzYeMHnqemPJZAkupslG4+eyn4D4NE9bLOGzNPHSv08DTdXJqGDp/UashK4Z0PcgN+Pf4SgD6ZJbrs7GZA8mulEXI+V86/dStrabYYz0JbAxCV9DvKM2k1rOrwOync8SSFmTK41IZhentng6o4LKhZKRJfWQVLm7p1Gou7c/ISIN1T1P4S5pHr9SEe+4Em3eQS31qMdg9ILfJF2SGeE1GyvCg01FJJ6W+jThluAgc7Ml/tZo/dPjAJbwrHAaOYclMBy+DbHc2Tub2HZUj4VXFzauD1NW3/Xw7iuNCVs+GoWpMVYSXZac8/I21VcTTW2P3/sQn6ZpKHBxa3sBisjhzh9cKbqK1V7djW7bY7l997+ViC3lw7+vCIlzABg9T/u2+/EubXzR3GhsU5rYFoYX82Rwh5sdeTBl8HKTyF/shjJpiNwZ7QxbdhUysxkJB/wpNiDYCLkrblQivifk9iLRrnondvb6joNh0vPVPLmrXBBtoMwDfMKX70QF2xjYqob8nM6LN2UzIbBgbBkqcj2mJEQukf6twxLfGt5vaYTrIRFG23hUhmqhaMFo+KG5/qOZihGO3DwkxlygApnxRLjO8DGWae+8+4/MZIgV7otTxMuq+YTOwOqxPQhRhStIYnca/uOHxjBrEmUnmvFczQklsd9Mlf0zZfSlcqafdDUw2R+PKAdu6S2m7qQcR9NNlM20+Y7wII6qMfS8f0dSRW+mdvtRVPNrv5jCAGjIQTYykQ4RhBCAA7piLFuVTQwsXbwochVXq18prqrF2kFWZcUAb6JSXoaqSlkiH0U8UC7PClRBlP75mByUQ7A6OQYYoEv97d18LUppFgJSv5Revor72guMeHtD9jxrI6uye/tLUImridr5C1uBcD2oT+Rh5ivaj0XurwT2/JJv1HGTfi3eUvT7Ncp5PwVH9mW/5umZS991GLEAJPMqx2z0A9CBJrwa/R94X3B8jql3wq3NDdvvmnXM/0/+Lf014V8h+ENvLdtSdssHh/HuKdP6A8szD05978HRH9Bl87x4jegW3N+pKftPTP/wLtFNf8dJ8sAHN6x/DvttYf6SK+vk+Ifg/fIT+dujsv8aB8SPSe84323YN8P7nv+sHLHbmbmrsOqSrXZ7b8ZuZeWuXNlAPapYzEDHCiNjUJz8E6cAqHDafJk7zDV/elJxLYSk5tUNaDztv/Yooo+LfmhFTxViAalU4DW4LFw1SUp+18g6d+DmlfinDcwde9bAVpFndId9Gm8BwAdMPw24OEBaXmbUborz4tFCOd/1ePI0sAzAVlWbQgNfVTcOEmc8qczFs/DszWfWggUD5PIy1PRpUB6AdMlGas3/CshwYJ/G5d57QShIMO3Lo1u6W5amp3VlHkf4e8q1fl7ybgBkiKfrhyEfDMjMwjsThbRiphqPvtHdMqTnFnPe3GYuGg7HBwKZWAhVcMG0GYZiZOxM17xpgxat7dew/Ntg/GeNGdu0N6/prRRupdcglrBJMg1icn1ObYxXjtO8/rZ+JUr1N0yBvNxpQGf7+qvCkHuf8cpLP2VFJERULL1ufKW184vU85HsT/Fw+lAw6ky9HWRSYmJz4D1gJCfodJA7BlExU0dwcKvvSjYuJHOoxM+echyS6gCAxV0bawBbm8wqsdW4ZexRNm1rCEovYZYvj26ruGVpelqb88ldVeNCe45/nOJELAeJeBKFS9CaHik+SgRsl8wbWTcdt87R3IlPrRa2at5qCxKcTIl3DwF92/O5MM56r4rSUpFlYJ/w2SnD8dCTnoiVXRmnx7FXxiavNw8jO43zSortrF8oqA3qwRTXbaBDwb3OvCF4NiF4DJjfjXsN8iyDwZ+uH4bEvQwImtCHQlgfvGR893G8VvWROj2waaEHBNKzVmLz3nVhILtLitn+aHPNNl0zb4wW+/79P9Dvq0NOtYgB8InwMN5V/v/zdOakUA9v5y45WFvNzmQ1eiz0WK1Wrw/XVWzRsaEcjw2kNNxXn4Ga2EpMin/zA+f3uB6zLWzBTL29jBvT0VhqycYsz+E6rnINAbZSC/Eol/dEZ2gbt+APSGEJiMgWGi+YH3ky3JFCCsR4QDuguTBxzoXfsLZ+qpKP6pYLp3SUB/ocRzV+AUD+oRY+3o+mY3pdS02V60dUuu7p2HDCkvuSw3G1FGFPOJGNJqSBlw/lz1EXTBtVA+kmr2nfHOFmCmjGWnRox0vJBO8NcmuVaYNP2M41gxysRK6dYGal7GqxffNgA0w1NfoswW2PM9TC+7AOOiRB3Oqhnq7llMR79jQMNIi07OpZkqw+5KX1QYqsmLAenmR1jMwzqmo+3khVSp5Tk1ZQy7A2tlc3rrXPiat5lItLHLe+1m5amAJEtmSlbiAtWJ6W+L/a+jAGf3fgaDaYNYdpMFu6rpgWqEcLon386Ciy4n9YxHdVrh9p41AKct4rSYHTx41501FWayJNAreOK1ogVdkxkQrgBj7BPD505yPyYf9v21Lims/T3k5V17M6Qg4Yv6cA3cG764a+rwp1FA6QSRu9Whh79SStDeJS/v+UGl5QIsnwlrErl6fmGrc2MoZLfOlusDJlMC4HwR5zaH4U/2jnsnydVJNk8RbH/ETBpIzcE/mqsJYsj76ZugVpeirmfuxIYreQCY0L11vkdYr96PBcayOn4luPJ8J0MT9DvVEep1Zxy9L0JDFrk5JNrUKhIcmd2nmD/C//Y/YlZGedSoPmvkH103jdoASpeYMns7Rv92bWbKtDSrzWCSUKjigGRMnz/Qhz5XItdYfkcnbK+6V8rctxXhp4Mqy6zRqyuBp+tdQQ+l1q5v1hK5QHmMcZR+Fu68k6ww57uE9dZq4rkgd/w7He4EL98Ej81p1ps4UDynsXwdQ5wG5LASOaJN2tjLXfvTaatVHijc7Y6kfpmVDY2NiS7ch/cs82hn02uOUkrBSk7uL5zKkProdUt0r8Xp1pnwfs9EMXwwN+3DAixTfV13aq7ULvqdnojIHXOSniAsnjaGcKWr/JSs8+DXvqn7rM0BXJg7/h2G1wcX01JH7rzrTpDYB7hmN4a7+7oZQmKMmIkyir/lmdYQ0Wq+PHerWtIs8k5z1FhnXYRbzR3SRBGS+T6eF5kUSNpsb79AgxXK0asjreH0hrwt103i5jeX9Jd1d9+kpgn8xRj5IaIsfkZWufTiq4Gk4+cf3QZ8Ok5+0UBP7Eqr7SEDbu5HGG3Dm1HQ8A3p1z2di4vlIKaU5nU0N0zWuyZdNn53fmdV4VhikE23RhMhNONAeoz9HFcQeqC+kaADwxv+tt/RcjHFBR9Zf4uHuVSm4uXDnMpk9hL1G9tu7olZr2jm8XjZ5Ve3xsUOSH3ujooAZkP0quoG69NcwU3G26OjFB3Xou7GzO1QSiQ72ipOmI5K1Lj87SOQh1qnzXINCTGbu6P7lUTPLxLhJcscpcYo7g0jMiZzuteoHrKUx7Jt4fiXrrPsjGPTllfcj/7ahrPwcGvmJfpP20wEOaNYiH1RuGAZGdihTUCx3paVk3WGAwDtfX9AhbPIRsUU52kTbPQ+4dLLDfoBlFn7WinUIMVipUXIWTwtH1lTahz9BCzmuir2XA0NpX09JSsOsOLtHJFpdsrmqqWmkUMZepcaAehQGRjN1VpAeVSVNh5QlszWCqIw1r+8e0sOhrJa0RwwfjiTjerj5HLNtNr0zT3l7W0bYMfO6ggc5JHLU63nB4ZAc93Or0a2Bcq+cMGTCGT4XtlwW7epyuz4Z6MHTYy2iNDzMmUzwmIZ24rN5exopwcz1o4+BbLELTpBPT2tTyPsNTv5LRtzYdOvoMdEfRWYxn1zSLQwZnU2NEj9NL3Q2kCJBTLU9SO6RS4Oq4U72wKbVPTW5+hReexp/20RNXrLpRoww25MdNrJJR03SR1VojVjR6nNUEola1R/uoEZk9xZ3ORx0QH4O4orPRO8qeFUKwKFGh3VeSHt85WvHIDWD86tupzoDCwKW3P1WW2CMdFXLJ2IHFSv60O3mfTn/cx1p5PCvNxaT0FFDiRcIOj3rKJwvZCG7tSVCaSrt9UAst8DUq0FO8trczTsd0PzDoQ96v+Kphdz61yOl6Mp1X35zy/nS1SkxMTyhHTbHeBupOaQZ5UlQhr5XrQdo8uYdlzc/KnwWuSb51QzGsKcuvFnMGmXpCjwuMdSoXapOL1cPcuq6VrNzLrMNzuC/ayblHuJcOaQmGO5V7dFBUBEK0SzmycOXRJCxLe/Ert9IzZayIRCl4+VBG9LYnr71yjuIx1KXnVo7A4ZREVOpEfb1B8KJy2IhJF5LFCPM7Wl8dvb1lqT5LsD1jN9AMjcbmtVKtNPilXKn1uUL0SNdsUu7dmKsjWqed8r60q2JPsJx3afdLWBXz33RUvx1HY1a9344iGXO/vQQwp4qHtz9sWcJgQbiQFCibP5KFhkjK09ALbcxwW+EEv1wopE2cIFpCUjMmuwjWWG+mtPyn739f/tM9WhcAV0v7HMs5hIm9otvGEAKSZhNGp+MSTZ6nju0ui2MuLmGcxgF3qlNqZAzyTewxcqRgZEC0MSbw38g8q2GVBcowgwHKkdQFCaocAN0k1EKykfPTeY8omhUDL/GyTnzqy470PCfM/G7pSbTQbBzcZ3bzlwkb4aGKs0xnnNt+Hr76/ilLvZIaJEKv0PK8RyJ4wYtVuPnxFm/3gCTCz2rWDGqDlLVaL6utTkRJHtbqRZazWJpPmQij4fMrFcrCb+9kGax2KVwNrtoijG68FY3kY29SR81I0pj1IXxxqKQP1R5BhWWbiVnYsb2ideuOQVcnkEwmTJO0hfsjJCbAEZQHRUUb7lKCWCFno5BtI+VzMlgN23ofFOBUFYl3loSSzUAbPhLO3xQw90CqsDxlZJ3aaEIkSEg8jEa7LenLWiKrYXv2smKfCspKjB3izGycepLZmMqMmTNbe06bdYaqaaOIrASyaZUTWZVh1a33nLg9wrAYsO/3ckWoWfyJENtr5IXI91Ej4NwhrB51j6QIL/WPT62QVPDJdaWNhLoPy2uzx2ma5EBfs2og07hI+xQi5DQgBZOMxWR9JB72Kctc/o2dnta56rhEtIjQo6dRqWRb6KprENNDQ8TMsudparWdKOvpzmkbhPXF9gRqIYjghv4AYmhRKTWd5jgLskGEqAFs/AOgF13IvWtQJHTyX74bEhZYmAywx7Mb7vkrn9len31M5O4MZ0i9PWQ8nu6uv094f3oeLhTKjhC/PG8+K6oExTGYY77PyvVlP1bGkn5onjS9BuUY50MH/p4nPDeI+1iAG54WDCLZkwqtgGhDmdXpQGDIxhRDB4EDL5+oPBq1FzoHJMrTiioiHenOUo2jN398gTf+GuUdMtB4e/LguksTcvtNKu2VQRAYl3oOAjz9kKesw260HU69U0RZE09OffvCFLh2xYy8xVdUPg81f4/TuZxA1BxKaIZY/rtZJpzGAi6qlbm2ZntXIxQiZ+qunzL1JgmsHwp9ETyW69p797lJnexwylA2kwaAjAXUYUTjNuJZG+Rt2AbNhXSlfU3LnbZhP4tuf4qlwdS4kyN3c/kVmdz+zIbtm+rnSdAlUIP8gaMsuWSEpVOg/9V5qzTyQdUk/KRC51XOoqE9rWywDUmfdBpNQf1pJ7Z3EwoO3k2A6WBYPAzXOyybOghYqp8EGSNGNssQEASU7SpPVOjGLdnhMk2sx4ErBASTuAWcbRNqzpTmmB/sbIKmZTwYkT8WxBP1GAPbyBA7MdUI8oGXivqNkKKZePQ0gbEUGrFgtJ8JAoKw4Du4oPa6j+QIBIcSCz6xPECHNZuBVnvkhmYdEA/WOmcEEaJ92kxQFQkds6qmtjIpoUHiJDsbPFdzMRlHJFqrUxcRG2JgWJUQjOhabiG2iaFRlM46Xt1GfnPohuCitVgh+wMGv3ZAZssNyZH1fgT6j7PlKx53A09SgIxnJ2UOO3kgraOc0my8aWUhNCanELSimT7MYYg6IbvwNhmXO9sQyaOn7UIbdb1mJhSZ6KalM34ZEcVvS5XUHoq44A54Z2O7lfPJ5EdM5sg0q3ZV4Tq4jzKKwlshiYNjLl36vofUAHfIOrKO407kwD0hMrNIR+dMBxqzTxcbiMGm7D/LoAWMrUsTwOV9sb5pjchGaEGE88lV04syfIo3RuNQNan7O/KKDEPIadrKRBp8bm3PJUzbxRDJEujajCyiZkcSiliwm9rZFZmjMWkbdrm15EJBM6dgLq/YOkqNh6BU5DAEmwTpNA8NzI7SPmKZ1/rRIiPMsU72hQmOkttz4lKEnaWn0LGd9IOJwwDdl/KuA7edYwl47cvVUPiKk9JCxh8+FY7yxDA64yho+PPICWrFjQqFe/pJcoWb64Mr2MD7sSIdI1/k2FQbFLbiSjn99mKYjlSNDWjoDchFG51r4dkQ2YZgEShrjBDAEGM6NLKSMB0IBLklhBb0sdq81L9FeXloRPoIiF8gVIH9IBphgFGB1+xzKFhDaWDiaFBLYeizYBct71YzmmSa0qNtuVCgkAbPvaSvMGGSvBTLJh+RPTZAOAj9hlhuw7buKREQTH1wiL0TgIWCsK9YDsuMkbEvz5s45jnNBLjIoFlqwU8ss0TUc+WMmnXMrAJEW1KAZfWpoD6e4RqUF8noBV1U9FhG+oQ01odtMvuUmFOqxgLapSpvRthfVTVyFC9+hKduZOwC5OngiGceL4VTM/T+OtWDqaxiynIhzxJexkjse1Kj07TdqnPRhkW9hIflAiPT7M7OShi9iDVLiKLmVgzb45qKGMbwPHChWqjaVzE8D1zwHf0mnW24rHGNQbXicmONuTIh2L2EIyYNvSewHNqJeKArnAsVF6bC2rzH7FhsJMHs18wMznwqMtb82LtYOwN/JRdl+oGlQFIaKeh7ciYbd1RXo9lPgAX4GXg0dARR7xAxWk+f11hUC4xhmBOCHIqOaOJD1Nl/2Ih23XTna8Xcz1OupjjPctu6hEa7kveSIktapnDAaBvTedYLqxbW5XmQhk+3ix9OU10PzKKAeXmnZ5MF4vzBctHX00fuQZ2tVCIUOj/kSbyYmdPKkFLWIrik2SwBgZQhDDFRIEdOLkvvkXqcix+e7bg9XIr0wRYhDqPnxhGE55hkpGm4uyHWTB+abjzY0Yf7jvNwJ/P0VNqnI2fxhNXdluTgrH6CyHJu6H7iGF/6u0dfyX/ec42BL9IXA36un8vg0lcnsZ9tbICNI0E/DNXRwT7wsT/qvMxFSwKwl6tfVXVg2aKLaycP01+385faKwPgAG8cCi79ckilDF/5ISH/86Q6wMzp3G8vdZIO6EVRJvXbSplfS+prZ88cMcY8cSG6qHsUR0EsXNHvHZY1nT/N6KJSrQVzzkhs25ktHKelA8/2/pZnfcY67rx3t7smDD3In1H37HPStzMzArmh6S9K+BYBhpkmVYV4o5Kl0TdTC4KyRuPoO3qWZqvRjihFny2+hHAHpDmtMLNCsksacpZOSqDuFRUmRaMfzi4udzw2HNj1hLRP1I+sR0B/Iv4rYvF8hV7Ru+H5uUJa5nCfL2PX5rFuF6bxr+MQqloQ+26tKXOUzyIh7OeQXFXHYq5SJ5jQswkTqBESk/93ab28nCb9+e1Ps1Qu/+XtY2sdd4xPefXP9vP99/v/d/HQdR5a7KataX9hNJb3pFIc3mlMeQ5Xhd1/eECkZELxfp9TXlXYKDkzAzVXo3tzKaCytsTMRtbQLlI2fPkNGs90Y8ZN24MZGqYAcjA58xGS+7dWQ6yNqHdyXvsYccgCL+DUn5SrOkDzgxomaaaEq+rVZnrTYRIcnthFvDS7pXkxDKqnTy8W1BLqK+E7X83KeNZUfHC5SktIiQ2TpcO8JLnfZre87+CXIuIWRiYJpBq+B8ry0fO/Nq8p2C3VaKSVIXOANxWY0t9fNOGzzxhlT6aHW8/vTRFTs9yjZn2Bq245xIoKFJ0ZaWc2hzQLB0ReW+2vYEKRZzuQ4UPHyMFsXsywS80R14+AbfRi3kyP04Gut4kAnXUXXZ/kCyxpTkszlhI46pucoihSCNHHCG4ATyFShgKEu1EN/OQOFYyM+7dp7o45PTaKjv8eTTHQ6+taHU5dixbWsZ/w8zXjtDzhheSjHDxsHry42Hu24CWwjvDPb32sbOm/ptdyGNufsp+Gp5BYpi2J7CTPWeaN9XWqcSWFMdv9Fi7xEi7/FTJ9f/7osHeX4J78ceo62qkCmHKiYED1IRQe4QV1PS8Zi+UJZ8m1dqzYsAaZtQP6mGaWkDk82opVw0E45xhmaWxS8YNjiti32T5BGKMgHHRPOEjhl8GiWW8HE2wXGmB6JfnZqq1DmNwxuNoSfzbhCP/I24tuiKMLREagxRZAa1ehIPTod1jnQD2a8kpP7pSDJk37tU1D8zDryqJ15FIJEZO0h1dqxOKir2lO8m1xD9NCOO9g123MgmZV45ix/2CMCy20bhAy7MMVs2HYnU1SkYexppFD9oqM2Sjj2a2yv3e3VaaMJ/j+qfYRo+Ox6RiFsRnHS82+q7jPkxsXIn/ymLAZ6YBm17HVcItPbY7DeFrKYejJ3mz6Tax75Kuj0ycw3nIxAPK612NkRXxddDA5m8FpRVFiRyLPosUq1zzqDIR/dyoYRD0+lBWMn6cVRvSPZKd7lYNzXdWKHhvQYbEpN9cEAYrLLtwdZMfgesRMEE1JGSYOjCErcTFN77OnZgjzK2L7ZvoxzSFpU2iSJ7SlicpZBYKj/PEMctxmDs3YYWcWahlSaAdulwfcljTdw+M4fwpHtpPuH2qqK0cYuPkQ9MIeFm3a3N2JdOBeBDnzClyx3qk579Fhg6eu907vnoAsXuBZSNWm/UPEUrJaGau0BFFh62cKZsQ/tL8GEDZfm9kHqVm4zAjgeTVE7bCj8/hEGmbEkvVGwagEUXtrjeuoaUZtmhDnrhG0XIlIvt+oP9n0rhGoqxOgvTAs4KpGVCi6Pkq3ajZliAw8MUmJEVem7Y8oWnWVg/fhPmPvONo5TcDNssxQayuLOYdEDI5LHDVqmR5NAZWhOLNGhALoIgwkiBzU0wtyoDyi81p6co8FsreeZy1vKC3aAYVScuUHliVmLsQaQgu8GgjmH40c/VwSu/vijFmxQFUVuhh3mccgzztxUxa3Y2T4ERuvmQwNb54jmCpKaXf22LC0W3QmxdUO1uEj2IpRmnwZIUM5woD8Dm3cFi/KaoJ3FpJC0/nEJVcAtRUsY80WGw/Iv7iOHmyuv/LIySnFT1hjvU9uJ+HmVTvZY948tFM2hoYzJ2ugTZ21O+sl4FX3zSeBhthJscOaCCBrRqXr5aAXT+4Dl6bNxjHWPdpf8L09AMKVWaAZBS8bA3/OxQsOHUXs25tzsMsRIbIoZ8wwI6ri9KRCDvBxlrCqCCgmKAQQUGheWAwEmrxNWoi0jZhKhxTSWB0SM5DgLCp+T/w1wniSaf4CAAlLoVdqwHrCIdlU8cVPBnE6h2DBLu0kXrCloBCk+iGKxSaZjzjWj2IGAcEEShQx22J95JC5fcC4kzTWrF1IpibTc7XBF2O+t1l+ODhs1QFxqAl7XJjQSJI3a/ptLMKdqDotSrKW1vP3VRaHjIXejFK8OVlccDO9ZDO+WTvGjnGoDulzjJ82JAXXrZgzA27TN+LpMpqNBBTXckQCqaZFo0Gt5yufQxAfGnR9NkmmK6TaTjYzge/yfMDmp62nb46u4/h8G25M9TZmfpacSxLWW3BzqoYvl4ClUJaJ2BypPTeAgXVUds1PLVmJF2JJQ1WqEplPWvlTfFQLmNYAe/rwnvBg2OOH/sdK/8IfeLURxW/7v1Dpx6/x5+Hjn7fgNzd/gcmCflAGM/DbUpi25sI40Pvh4C8wq5TM0uIs5+BQYi0fweiKnJKNjrP07ko1+XWKq/Wd7YvFjoHMw19LsA1m05HA7IcfFoNxBCQeUZ8GfkckjcZBgBCFemNCyAWWAF1Lkv0HdcXm/+f2+LlLcgJla1sBVMynGDYQT3K4WA9ZpttPpNBTSfl2fjsTKCVj2fqoHsZRSGIGWNmYFn4Eu+l+ugoHWCqU5g31mx+9xWsVFiA+yYds2yQOChdJXBATwhEgfZYIPtIJQedS7CABsm8IfWTD/1HsGsj+a49sf20BeimXOROfirwUSoW2GkekRRGuODGtXMahX/dWl/t0mo5GcSHKsxlxCsW2zgfMbo59hHJja22F+YXhSFqEKJu/30YLWWxItMr8RJBH5opQKSBRGM90E8dPkFnPM8qQMu1KlMcl5w9tv1ngCFTsC4PyXweaNCpEzmbIgUwtgteGRJdgn9hGih3gL2MfQztINJZTNSik9CCLC0LIhIl0FoeSRwz8tYztNfOmXbXNmqlpRgwtYD3BR9Cpecna6fLiRDqiKtheQiQtoiAaWkJ+oxJQueRYBHrYyrl2VlZE3dJRwv4gDbLQ+OEEZkLTsLq1Vu98w1koypUltYXv7Xse1u6au7Va5boqgKOSUdZaKuuwbAK21faQ5wdc16zJOhr2fSik2VU6apP3V3OBaj5YEzVbRyK8GNZIrEqC8+SLamcL9iosMMk7MsLsIINOfaiQx2llFRxx2Azb/I4F7pcIhmobuj4GdwCchrtAfyPs2F7vvCN6S9wkvBcXkLlyjg0uI6XskAikSA8IRuvSBnfHTUuh/ZjCBgdhYYz22Zjs7RPrvI366zEUjiX3k5BHq3wrbvRmuJ2yx5fyc6U509AP5PShOtl16iHugwNa6u74aoCNqdO/fNF9haVHr3Twkq/nUDqH+gGoQ4S2AkVVAmrfqU4zdg1y5Hbc0knAr1fJLr9EAMmcoMEiqY2kRXYqr9boVhVSHageiJqDjneWgrLFgCot0QAjzjUMVMfYilUzia8KirnVSo0ArPnc8HiGR+dRKX8jIUy8XXWbyrUYy6qjFzSFGx9YCc8241G7NIWZJq55B7qWEUPjTBjYWWYuATKEEjQ6hgKHSgkTJN8W8lJVda7lDDfORfQkqoA27jJXIHCYyyBs5C3ucPUEHs8TPQLfcPfKjXes2F7g+yGdei+lxdNf2i7SDmczH8G8oWnQ0HBhuFIC1U7c0x311gjWGUnDb6fYF3apc16zGYrZipOiloVSTVZccMGMmxBkBV+L5Rth7s6VLNSqj5r2O9HNG8zqs0bBEUdTFvyq3Amu3mO7GUoZcICAcJlnlCYRvznMOUIpogHINYdGB+VMSXTAysxXq3wak1S0XmEGjm3LMS7DsrDSDhpBGPVLNP6SNSebljZVEhoGqNoFToDczdEASCqEqmsniwGh871GueyWo8MB7uYbYaCOmGaq1FZcIfnWbdqQrmPqGodFydx0JlPBLITFA3LZBUsYExA0xiaVEjc76uS/Va8HTF0YnNfYyhgsyhqpdLLSd4fA64GqnbHRTMRO54AX3fM3gl3uF4h9nExYczzK+UcIigli+zIJI8HBtmcOUCi6F1Ab7yiwv3h5zlOIxexFazShGFWnsGveb4FG4qbERQCAjU6Lg1fUKcY1UiddHMydRRLu0yYQUIhEHq6ofKVChKsAWHWg2vhEaR9yNNMIx5HJcI0WFcAKT3EDCDra3pg1o3vzrmwjwuyQDxE1HeKUw4+OzLvIwvUjXkmq72NKrEtHw0FhUtNLnT7g+LbGw9qvjVN0qCbXHtheH3xgNmf7gANCGw6mnsUou1xS62tGAAJCQaVxky6Q/jKiepIHGjqLYr+d0sBjAsBBel8xVl2s2BAbWuEbKsVQ87Hlakl9pi6pmj9i/Jhop3t1AmizhAlXZaeMfZa0+DRD2xCqMD9kOxSrXoE/DuszJG7SgZypjQqieT3QHFE26Do7Euf3tNJ4CQ4o9B2CEwqzS6zmPjW0al4DTqtBhIcY8NDK+ZaTzGGugUVreOzcbmNiNqy6y5h7gL4b3YSzNdNqY2LW3NYxOdPRypwIuodK/EjFvFaAO2MubM6UcbZUS4Il5lL2doGQyNoaB6+zAsHkeTkTVG5eV0kW12iIqDm9ovIEpBmw6BX04ZjuIR68dyaoIXjseHF2j71wyvTGbIg6tQPhmIdSsC+8DAeZPYOg4VB/WpnwX6vkV8rHalXAuaq02hbJcFTMrmEcG2SRmp29bN8PUfGPietPHIghr9WcAZHsh2ukMYzhBcej2QWnCSUKNWoB+3boU8j9aJ/bdb9fcPvuq6222/+6TZ7OfNyuN3OvumQ7nrfXe+1NUXaFXXOp+L64YNobH48eLsY8nFvgHUyM9tuvJ806IkpFlqHDI7ohSD3bXNplXe24RN6OF7e/lalOBTXk1fqnYCm78iKDozenwgZUrHmWs3c0BHvoCZ2qAHiz62R4xd4emBpTJAxMrBC0Y3FcUtf6wHTHByxvb+H7Hg8xF5/y7wUtqdApcknArYXGMIbnj2jLZ1M80QphCfpoNs8yTBJFt7GqB+0Msghpr3sOC87UZLKVML6zApEwDDWCdGQ8+2Ad1PqbcHI/+LTa2Li73Xgouz3lxqgQERujInUdkWWQjxxMHN99NWox31l6X2LYGYrZLNhEyF3W/hol9w7Qnv0SvcAB+leath8JdDRseDBqDdQxytUEFGJWYm3lXWA3KCRrZ9p4vUlWowHyHoHThN5IQt20sZvmhFC39PDzBDWhx1YYLQ+j2bmUx66bSqPG6QYQckX4o2OkTflIZp2OygzVWum+tvGdBO3vyJtWp/xf+y+caXPu7vMpvOJz5+LRgdKApKR4gR2szlpPE1hj57TVK0rkfTpgNICINxHaLgAtp0WkBiOuYpa0ZQZnjd3ZPmxmAC8JqBLHhV/CC+mJpMyl9tAmKcV/XAA/5yPSnzrgEh5Drt48mew7AQOIeQe3qmiZ4sPZB5mvFa4slptIcc9MXUaKOemIjA+NBCaxzKZqa242p3x8ghlEMsmwRb8jyB4ceFh42lhPgylDwnPCOTZAlm0urmwI0IV0z9uAbn6eVXOQ8aSdVMWUyBnYjTTi7J4Nau3CXE5UYG4juqoCq4aOF86+tjlZPs17vpkT1eaY1d+lu/SPp+09/Pa07fU5RpzxyXhYoCidz+aDwywg64J1tNT5qNw0+4G0LCpTU5DpSthUYKV0hLqJt4eNo0ozAH8xsn4oQUm3z6SCNHaSrfSBJEziJY2rjFvdaQR94xjeGxhBmgNMkMAieBaNhQgOyFjXpG5lL7KOpwAdWt577RVHg0awMr5dD807XdcVaqeiTY/ZfdPZiGqydpfJ2kM+VgXNW3J3ilL5XuWoVu/nlLDtiyTyQDPN1QWNK942bLZR7erm5q1FbZhIGWpQTO8ljNhACRJxzpjzlU4jqZL13CXoK8vSxfACItZevVi1pal29QuVcKoKFZ+j6YtrmPDY8JAXOs7DGXOfZwkY+Mh21aJihI8v60d9sdXizFfb1++F3ugVc0G6FJUFvOOpJ4N62MKTX/MJ2/B5cenA8engSRbayaxSNPJFNlrnd5+xBUYQTHG6aAR23zqvy9lfr5LRWuv71okzGS2Z7q0s0Fi4iHgPZ3iID8On4iza3Z/BHvaGmXefFjUBbWyrD+uDmmr4oa8f7h97FrFTNp9hf7URwIev41xMLx+eurQ4VZsmYQ+ChQgWa7mpeK1xUOnnnSIvWqdVnCnkNZTFLqG4uLOHGTnI6zm/g1HJEJVFI7iSwzQm1pF35ui1TyNI4xqdcK6VTC0GMyUz5A1wyWmLjHLqSPR0NtY74tWDUJYkok+wiIQC7xcWW66pIxvgOq4lfpH+4RiXlryQQ4we//cDPB4qOd/sx/7Vihyv6TpfR/tGkjp1EmEa14pp7JNOG6ThSX4IXt79knHxPhesZz+48KWw7tLDS/hu77tU+PHhjz8SqAf//OnHFNzKjxRyrTiiKkaZsi6M3so7wgt4AWc4q6f8vKiYCbyAK7iCH8UfTSGRPApEwQPKXCa5swX7UcjtUL+ia/CPcKYN1ednWMP6ykbgQ1kXfpCkvZmJP0Dg6msLYefCwApW3fuTOpYB1q3Z0cjl2ZXyRtCYLGg1c2LdHq34XTa6POI67P8HcJtq3nP96GUVlFvo59zJ7M8r6NVQ/4wo21gTrgWU+izZEmA9fYQf7f0y771X8NrAG9+kKs8SfhRi70fr0z9DCRCjf9lxVO+XU+pvwRbewxneq38AT3uvN/630yLBspcrMNDDTkZfsJqrqPkg2sXYdvo9L4U2Qs2vI99I8KoBBP6CZ7zXFXc0YJJrbcIxzX3W47nQz049JCzU7et4uTDAEIvmLCwDy2ylEf1TMyJVJj68PfH5linT/18FwnMrfmDjY5msW+s5kLPodO49ZOPbLMZn2J1pq9pV0maX1y5NV4c5EjgJFTnX8ko3UbxWsq6pq8j4FM5lGmdx5gziOiyKzgsmqipXkd1ititmlnWdszJ5V7zyPuOZd14PzEg9cJXnje4q52CQ25yI8nQJMB1vBVauo0aLGdqnJGaP4KyI+cqY45pxDrhKUq4XKto95RR3S7IqS5AKkmxKfPys9pxAe/pUMVCoUM0KtwiU4pSEMVecIaJRLVJXFm2oIs20Y3heyKZB8apUDhPmdF1ULE1pJWKxbJW7qJ+VHlQbPR1OznoHyDNM44TgndLOa8HCK8Y0vY3JqIbKkfNRgi9vavfoII6vZRz8duBqDIyIFOVfmIYHd5zge/oeb6YyBHyBa7m3sJu54yPTyZ9bIL6OIlm3gmgLc3Ctc6ibeBzxP8O7wgIHrrIDEOqv0pS3phnDGM4ca3hSOSYR6YrGTrLPCXHqcMidpRqsbFaH+eGN8Iy/1PZkneOIMy3CQaZJHzYAToON1lBTtPQ0RZwR6mEt44P0ilA08DUlQ9XYSjnfbOXWZP4TJ93NK1hLVVSdrS6FvPOKunwz7w7INY0AQbicVaQWVLMvjBrgMuEKOvKy6OUO4AZbiLOMbLfaNG/4FquL8OiC7aT7uZpYf+HSBRdq1EQuQas8lWKs+t56qxXFK8Z8u7z0cULXPScEr42xwWSldI1p+SvT3uwY0EOmuBDnAiMCzgtiDEW2SmLM/NN4l1jgWrugszUc6nVQHNbJ7jCs2DJTmh/BKtcODr/Crz8wV1iDrCv8WACiEz3bODHk0WkLE8M4yvmfahu0sSEufiNZ/aHeW2Qsb+uO+MLBvsDKbMvy1gqooGrldAfxacMLRFzFK7Z9mTsgg9ySyMQkKfSaZECEP010zjkXh3HwIwjWV4CivpLv07O2JmRTLOVk1w4waOj8soeYI3s2Ud5+rdArCXWZCfi48F+U2Yv9z1Ljk6FfeMSPsv1HniclgOfLWSVzJjN6oS94ksTV0O5zM/sYngd2ju1iNzGhIX5AVIs80KUiJweZCACzeL+CtR3YGAFhg7LqqDt4/S4VYrmlECm4P5nt6HSndpQtwUEPySBzSqWYse4CEGVFNmwc+/nSVbe21QRXeoU+Brc9FRzKke1K0GOsED3OPz/rleYzaJQRSVl9UcHbRPz5gPX1go2hFjBWetXV1d5jjvJGqaUe2Hv9eZ9XFHL3CDJnbhBDctKpD1qVa4kaBpexjVqPKTjNMKmkqtIxibh368OoH9IqMHZg57Zzbm57A1XAQs3urPbD2gT74OFr0vpEgZ95TNwQyQI6UsGe1e/3zbB/7bdhmj6Fj6daotDpYZc5Ojgvdtilx//tPcT2COKZfCleRF6RiZ2eicyTm8PZAfJCOK2Krg4NUORRHKjpRD0E85AgG/hYqQbOxBnLGYubKyq3uR3td1aCqrepNkkWJk5dLImXu/x6Uc73ulTFLGiYvz+y7Qf81hAup1aha2WnUfWNvNpyGwwyyxg4Sxuew7/0sbvVzhQMaQCtMdaskWUsu/eHQv5owDMprfS6zgmfSlmC7TDDuf5J0rmseZ5/bTCHby1l5w4vLXedh85vcU8NSd/s/Lq+/8N/UxpnJYtSpaw20+W2Rxa0ykhuWmbzOgidi867zqnztkMFU4fDLNGMP9FJHPTZpMLVTBZP0XmOczH+6I0JXBtZJNd13ndedd51WMLc+dhhU7v2BCDXqOZ4RYdth0OHTYd9h3WHk2NnRjPnz4Liux5emhtE3icsIufEIMNruis6dDVtbh1GHCSSBbXEUxrkSQeFqIUG9rI3GDhIwstMrZwhsNe6c9JlCEMY8eEVR072r0hbNAKnYzBNuaSgLgd9EOnWBT1iyyvADZXc1wLvoTzVvE5vlvJQLa6CUJ5GuKRFQ5la6Zd1bdyz59xcu2ECwnbhD8XHQTyj9ao8IP7/XznP6/Xu7B28F8/++L9iw+c1RpDJjkhNv4EAkeeikRFaJZz+/EWDnv2Q+U9SsAO+3rDwrd4c9380hXie/hmcWg3cwcaUttu9PVhHxJBP0q+aONvYic2ishQgdHMuDYB+Or2rVkuGjt7LH91erAXLpjXcHOJDsuZ0uO/b89h7bhONgvM92N7eer7L3Hr0I3QFPOM24JbONR+Bx1BZSGatdLlOMhT96C2ITVARxGs4yRmX1NmSnwLGomcf9GRWGVWYkULTInmVOVxjudNLKRqxGt/3kPUK3dx5g1589GZYAe9vi56tgE+ulUYCJTwoC9rzlXl4jtESLOhObIdzB9qHuZodXlNpGWcZHEfkn861LzZ4vT97R8cDqxmFQbSRhAJkIhmyCZzbkjUKpwErT14NflqHTuNxjwLW3UduYU8i7ybe5gfshAco7uC4df5FX6xsPE5KOnNmqoCa7bKVjJkKcM1IDL2Q05y65n0H9gM/5f35/63/v+/RZPCWgQ+2UctSRaMV0QhwFTcKTWeYt1rLSjFQKT1NLW9sTZG9OwYLA1i9PtceLHYg8pGySXajv3K9GL3Y2/a+eu3UnPOdS31QL+pVvfdoT8Z+9qeqRz/2wl7Ze4u2kpaEPC5aS5D48UTTQZHAPP+NUC9HNa3K6qKqK1Wzequ1/7B/2b/u3ytaJdVc1T91+O3GiqkscxI+pfGjwz2MOp+3SSg7uhhpsGuqJdIZbNzN4J9rkny85Dcq6ZdtEDkez+VWc5J3m5OqjAaGzlUmjFJ2W7uaVuPEpklfTugNvDdv7sbtQLmsx1BDRY4auiVYVzhdurTtu0sj5G1Bq5wEWBwXPY4N0esaNklL2Pm/yNxMPBVVfppXWI4FeE7MyOC49At7CCCJ1rO56m2iTRqw0O/A4AXyTudBuJtNYP2gXFo8zY51WIwVfP80BDl7x+qrgIlQtVeggGjCV3+14x8ZEqgBwrbBMZN3V9QksbGO28ZC7E32xfduoFjFaLo9gmmIlrNH80xvDffVfeVMoK5IpTXVdSg3dCm2/FZFIDKZLj4FMd1vBOHysvxo3B23kiZyo7MFiwOiddutXwhO7JDoF2RIYEUHRN0+rzjfW/3QJmwiMMK7HPBtVovgzmN2LhOgOx2KLnBvqRgpX0Fb861WhSPPoo5iTeJEQvHkTEgyMLg5xOW0hWV1hQxBGIJtw5ReNgBKBw6zC5LYrWymdhsIP+Tkm4Vt7NpDYpq4jEdbkmviFBFkZNwt9IBjB/njxK4MlNifuPRjgCwAhZyaI6Yn0ey9siOYdjb4KpwQC3tNpTkuI0TzyOP0cJos8l4gQs/Wv1NX6iQYVRyQ+dxBb6Eck+TelXav8cjYMSGH6gqadXsHq/xkqVciAGn51+IMwRXUyLugBDR7QvCiOk+fIHDuDih9zp/yEYIb+m2FqxHlkx0mxQfYAfYdwgfUvvpIpt3xq2fzOG9X1bv0IP3AmCr/lor0AjPMLNsYAoJBq7bGgNHGQ4LCoGs4x6rw6iVnDLkLCzkqTmzHEJ4sjRdIlQMhgWPZyDZMXovpPdBecV7aeTsoGQ2Ho1xLNJqFw6Vg6N2jkJdumJQUJ/dUOO4z02h1yZOW0wYcDBkyXU3FShl+2TAmu+KgGqr9iN5ojDPP5sgysxwfthwD2SGUbbiup6bjU5rBgNCdSmSwiuxTDTbt9XPZDAIDv3kW+JRexwkHMuA64BLAkOo+newR/UZPtnCdDA7IglfPTYETyPVkluAN7uAM8oACxZ6aBfu7bW5hLD5U+1aP1vf2rGqwA0dQB02tJ3NVNSzIyU2hn/bC8pDYi7SQBFGQCtGQBjGQCfEa3XgADjixuwHoGuAqKxSI2Oi5XjZWiC3qkxChu70kgFTz3mY8JtmaEFKQMKV6H5r+S8oyJ2LRpA7vHyAiZ4/lpMrEPEzsflVYdo8HtZ3E5tl4fGTSgGGV18hIfRTRID+niieg2qIayqO8pXyoVa9VJORt8V4Araoair/XyyzPa1D7biJmI/MVjPyOyhaieOWvYFAJlROE6PXvhguphYBXFb0dRWiIJ/0YnVzbNqyo6mpJE4f6nUaeNXEbZ6tlsEwL0cN6YmQuIpsECEZuQ3cL8JbR82qFd2NlCxbMJ4wLsWM8ABAUEyo5eSMmmVzKQRKhlizojNY6STLpTQc7MOyYWnTc6FpBbVfw5oD+JtaZUhfVZALI6tD+WBTQ2XKh7NZYEBqBDscIh390lysrpygZRY135+yUIXKjLOVg2fwiXrcmYNU8im14Z9fPI9/EOt/V5QN+exNlTmJwYsqdoG/yZE8gpUDi9dD9Y2uCGycH2OF5BwqWYre4NEfll49CujOYJM3jXBHrPGKdNDsdtW3niCSBqCoddQDCSk3tA+YoA8hDkszRWNWR2ugirqdfLQprSR5gnJ4cTZP91Vz06xTREwfEYg48pr/F6Bh0Ws3EqrZBGfhqe/2YsrSCMrbWWnQmCLQbWm1Ncv3YFO+VMzPp5yR42Q7Z9ley5OllKgr4NSGqRmoSTU22vOIOfiJZs/gmA4m8SkEOvnoUUJejIOWCeYONMdnKxf5VOiSxe4MyukQDxZLrJo9Th9OUAIqDlW5h1ubGUdhm00gFAaEKjf+qUohpRXvVaCDbq7gmxWNKWgWfwQ27n3EMGbYKIeuzfOPGUlkEBPvk4TlR3hAi2Gs0yb6Oui587FrJumE0HEpLttxjkfeq3swxM7RHPV51LUa2N+OzwbZbHVwL2+PDuxwa3vld3kbxcFpohiSakqMnyDmUTqrCxYVb17rdDGP50XVHd+futpG3gD4+1s9GkeRs83aswrFNODl0jy7Yzesaxwl27IcTFA9TaoHbNpG9ZzPWA7II24gw0JKPCQwSEK/sCjpCVDqjy8rZnI2Yy4AhLjaq00BRG1TgvsHF1kN+i1n7bExWNuGQDL8mQ3s7a196DG9H9AJFQuZo19f4rEWJrWW1z61dAbQhTkK5kA7Rcr4dtcj8lKWKc8+q3+YvCDFXMXgudUFgAy8DR2e/dMDxCF7Sjtr9mZas8FQY65K2ldtTsOpMuHHsm8oC6MAobuwdh6LaiaBoz+ODJN/AppaPtEqXxcRepa9Vpe3N89L4g+C9wycMzrBuUKKI+QoLYELPIgJRlHD1Cb3TM6jsMNUDSqgmrsOrX4KMl+9cbxdrtoAwbyQW0nZiyx1+ykm5SfIA2H1kClc4y/7HS2c+pHoauex+cLfYxYq/22fZVAjOa3dLtHKhRPG6I1EsKoY1R05W/UZNG8Kj3daidcnhscO5WuIny0Cyt49WkhaKdLuMkbx5KHnMyeZS6gsdMLk8aOusHWz7gFgoDg85QxbqdceMIkgSWJRVYsMeCGYGoVHcRYdHUj7nxU7Pkv3hUhbJ701ijwI24gSdyw2D8obJaUycjU5C/FXsF/FDBPg6Do0w1dO7Yyqnoh5XlJLopGAKsWVqtwcbXsys9spXqb/sx5fwpfwhtMCaiH279S94u5cP24Kih5eXPxgWtX7T/PeqWnHwayvAlvlqR85KZXMazGIg1ANRWN7dx5h6uzl6lPoqB71bFDFh3tS6Rbx+bkPaMpOiZ9nUtDkJP35sNQfNaecCmJzdcLalFGYSt/wHMnGxKb00UJE60Xdo0qxivMOVq2UKLyFs4jSFNqYNEiQijWaszY4ma8iBbpMC9H2DzMFSpyQoFJCZjb3s2zC7HOtni6AhbOaC48NTbfyMndynt9lG6lm1VMtF6qOKVM3Q/Zgqh1w12mdGRieDeVMbUTG0brtym2hsz4emBVM6JrZ8GNuPQyDQauOmVIqAQoxFEVXTjmxQ0jqtI+Stk6ukvR2K9fS4rmZxcomvTVMV7RhV6A9zN7Gb00Smme2jwE8VMQasZ2AKGpVgEe+EvnN1qu+fw6I0TXxZmRiqvVM578i5HFxMnralhcJk6zFM7pQLj7IEz19wqYkdgGhGMom2lWFKj30FKWEw5psONuVDBJ9dmoY7YnQhCDr14qZOHhS9skOW0hakVux9h8Zp9qzLckvbWoenkHgya3qnU9qhFmdjTpRej22mNVJp0oozi8GltB/BeEdajZU7mrGAiMm2dRf397dKVSNlZ6nBvKkMd21pYWozAVmc2pRKbxK8dSVHy24lwHZkM5N4487JxeIJY1krbfUl0bI2lre1sonamDAMc5PtO8qFQCvD/DUzeGtVa1/FhARj1XVolLGXoz5PDLV1VvxN50b3WmZghXw3JDc2+O4H5xN/44AgaCBsGPh+xnyy3+lj0h/TGIXnE3pDn4YmIL3/rFusAZ8xvkRRtftA6v5vIpIaCiSNQaGIUrmQa/nbS4DhJcCorHe8WwOenAjMvTba5v1q64czPb4Eiedy1c01lBChtJw3/XfzHX5sPqW3BABwbyMTjFBV+uJCLwG/swVgEBZDJGeP5vGE62BNuKvfYZWm4jYuW8ucS4AmAJkfVQ8GiY1tg1k32CrMs8ORVEqmu0rszHN+HKInGs0LUNcs8byLJHA+ihjyNHW/1reXq9emzzRX3hpUksKt+zPBb17OmfynL6X5PdvTE3m7BFCAdtYSw9a4/2LtmkM//52Q3ZF89Mz667S2STfVIX/NiPGZF9M3dYgBkIfjrC0/uxZiWL+4sk5n5MRv0fnuJIHkFJSpJvsD1RQ+YmYaZrWj2qop7E3Jfp5liEHHVoVJoHCKwi/5ywNV5Dn+VCwEp1uwg00Q51j64SIKCzoSlzst2OcuEaODsyUih2uT/DJYMx/NBr5tziTXD7H78aeLnbO1gypLCOUevF43T2RnH4TSERexOkmsROWhdJWh9TrbZBunbgL4d7vFHzHgsbB0no5CeksZ9ePhwuBn2tocnYQ6x/W4w69xcF1Wy7EpEPx3qdOv040YOTwa3/gPfsOfnNiB8ycIIDh8hv7PL4Pa7Vkg6hq+sj2I8V98vDU65bL6Eck4dWPw96/3xH+Lh7kDYj8YJ4dk/rgCo/wUHRzQm7F1x3WvXDh+Oz7g0lwZMfNPHAx++u2ncFC+a3obMKVTEEsEIsaszhBCPaJ5Eg3NglI607z6jJXFV3NMyeZfmXRfUbWL0J7KRDV+9Gyiow8VmM1uikXOBcBtuSpsDYB8du7DloEYydNbpWLpWaDBSF4DGZOFcqFcLojmfUAhGuPwcXShwm+0r/uYChiaivhveq1ZFpJ9ewo0RR/qeuhT/eaGbqOxP3NTP+8l/1KzQrHv3z9C2NjCDyOwcPkWdKCGRqGaYCgfsL3Js75e0egLOuFMZzLrPPbG6Y8EiIRl16DRvTeo6e7ynWo0nogUj8kXP2g9+kyaSXfHnbfvHRniwNJFHHF3EivLwqbd7bHnfrxobiMV1r71znfcgGjZGyUKzKKo//kMZPjrWojuYvv34LcgggwcdOXwIVXcpjAs3ELv3fvNCy89QNWrriUmNUf15Wr0CBTU+ofSJOfyLr9JDS8Cc0G8CHwI4ZA0uxMlZq0VSQshhFhNMwY27KWZxRQDhsfgzCKJJNJK/4jKUL5jTb87ILac8G9Lzab1aTWtbktzQgNZIZRH7zIDSsglwoG3X5WmdHmXii6S9T2gkgU8s3wz3HpsuQXPUna4BS+5GpUZ9Nzm+GhdYqhAVxTKjVs4akbdFVde4Gl3q1T9KsMjfW3tAcPSHVeoq/B5+RxnUaeuXQGDK1Mhjqy0X4O8SLzME8xeSL5OzBbe/E4JqtToLDAwiiun4ogEymFx3TyK7r2pgGUxVu0urNzI1vDy8qgl2mpIGvmd2F3+dgcwlnpPA9uGbDORJOHRu73m6GoeHZ5F4WAeWLLVK+5esS7tgQ5heT3ekIJJlagdLP6WB6QJgbDeyCbe/tjiyKRYWfwjvgeStdOpQdYYna2HGbOH5i0/WGlCqyxoptSnZsAMKlHYDi1zeBfc12RebLoYjSglSbvsCII4L8i8G78OT/Us8lZG4p0/V4sow+SRYfSiQTL7xvr+QuS1Z7F3TP3fhKHyeD25Bw/X/uaGm+5xFErZCNUUJXE3sNWYT41g5ZTEYeswWT3Goa5B3HU77UKcRWArvl3uV8NgrQXDqdVCv5m+cFQSCvH2ze3lzoMYFlwui+H+h9tq6IyzQWmGOJlHvYLRveeuyUXpR1GWWhygvAbzHBNnK3/OhW/OZZnGWrpiacICC35vKoUyxxJL89BjAhBNia+oPfiO9s0CQQtalwuiPZScmnag2GP8YDnG6/rmXKI0ZZD+q9q3KqDLHGrEmBAKtzitmOqteXR7FROnwZQhrRN+ytC5HekU8Txo89QAV9y2NJt5DseaA5PncWESljqeWqPIVyMTlNW9KKpLOomcYkZhTkgLuxcT6zBL6zEQXQEvKzE0w/3sttlqrYNau4u87D3zqpCA7hcyLys+prJAXkKYvX5LCQv9Mz3zpg8K8dubztM2sJXeTUK8zpYyq7A8XlYzrOqqEbEwbjvWxcWUi2KcYkubCAfBDf5Sd4qaNtJlNWoAGFvSywv7PNXUnyY9Sl4pzZHwsMtznrsCgBwUeqORAD5Z9tMALw/IOg8u7GeoZ9aS/2RjZ0FbaXq8MwZeqxz0tH0F5hK9xFcICAJrKMLKUIxrE2UKoCrADkdJDO6OvbF2B4xklvCo63wZrfYdJGUcW/9LtDEDEPW794kiGUsxN6cS7IuVFAzjQW9uMFDMIEiJIwUSktZn8AC6socQoM/FsAm/EZohQikk1axRoOkxDoTcXWs/N58iDr6/z7DrLDkD3whad3BzD+euxdFdl5ozkBk+zXY5EjS75YoOYUYfEreQAoopcTVwKRrtDtSBfLLnYS4QepmAq1ldXtzgWcK9dJ6YY8mZrpCDs/bJ3qTmy1l9ZMX3KkU1CtYx53k9Abb2aCxBk8VyOZ+e0y8Azdw1M/+yFcxm2gPrvdB0nSLq5ZEl17Fm/XKwqm22CQ8R1+JgrYkDsoNwspf2SGu5i7M8L8zE6ZTJr6OWikq/n3rHeavgMdaN0vLyoK6ZB/ziOl/Za6UpmzU3wi55Mehao+bYUovnhTNaw7AvwGB4ni2bQvYYQyfsdLSmnWcnU9zuJP8ab0vbPABie1ifvCzL3jJ4KFtbEsQgPHserLeuJ0aKa0zcvksJaU7NQneOtY8isbo5MpPDuJbjAW6AuuCj3Yxvhw30OEllhXZpRIHCZjiZEshd1XV8IR1hJ/xgmHkhZ8+yVWJ80W3nQd3ydUNYq3Yb0DU61IIavQzXyK2sJozYmYvxgtqtddwZTFkbo3RpzVAY2m92xp75L3uW82n/tgf49uy7fUT35K7C10ev98b38FslueHrehfES/mq2kkalXBMNU4tnq/kotVWoE89YrIQ7mH0RBJmtGrPPUZnrEdwZAcS5x2eY49hKpaf5ed3NKvV4bTLQV+wfHEZ0xXxblr+OprZqgOwsB31hwO9OpY7/WMV6wEwCfEzC5a3bnUHphwQREOnad5GDmB0W8QAnONBq3fZIvrtQPGYZCUbcS/WA16bRLBbQUPyNnfmSGlQVm72+yGu8SM+lGr6zKSEyN5nqfN3q3HKnVhJNJWRrLzCiWSxoGRS9l/NhYfb8RsbqswwHYFUTQl8WPDpAgWspS4ZnHaoE3vFcT0PQlTBM4QpFuHMpR5l2gY0TUrylDLQFpeK1X5F8hHDDL32iJCjUxQKam2gYFoL2cQT9qp5DkScC8Rd1kknQ3mMHLSH+0SsUTxAcYpntOuBhuEGcuhZCfVkoSY49NypMSI3+ROLqkGUYozQrsMafzlbviNr4QLu0o2qDrAg98HeyDUcOHir1a+tFnX/dNd1jzJFXikqUYSD1iAs1IQHqXwqU/ucTapG/ocA/u58wfuOyMGryegOh3mFhCWv/nAUKDPmgfzIF/6Sg0MhJA6zxU6iMKPnyqUpVtGIKcFo3g11CUXLHOgMBAH8jDJRKt3nOmWYK4rDIty466E0R0Axt92+iOFQ825Ur1coghlEaCy2pdBykIronIAyMcSimWaaGMMcIgQIE60zjAm9YgnGht7Lo/Ed6qKD0R0iQBeQtiICK4OdlkVgc5C3o15D4eZLmKY3hJIpjMWv8Q56eQDN0CNXLC0KtUEdESv+qId7ij0CNi3xn1fArvxKJr2BVP6mPYpOhNGdIegYSwu4mTzVqKGWZwq6xvKi8UJu2GL9h8ITYYYV4knwxbII/AqeoWS2Vv9Kt1VAi9uDwOvUb3untXDPg+9ir4871GwrlS960qYKYfKRemSLLvPhnjQbgA/AimBjsFKsXHt2/53ICHq9sVxwM9+a8eWnAm0x9OxEsUqQGWST7fRkHw89bHD2nsF21vg80kudmVysAK3y43ZypS949+MiduWpeRWF6WpTWfx1dvUpODFRlbC4fCxCxOiFdhgL7FNXnCiBBU6K3+WobJAmS7JorrlS5WbQyKLMISYX6SejzrnibaodfhCGI81+SVRpYif0ffZPD0MN6TT9KZQD/+cG/1krAduFThSiCGKwQTqbs0vFlHGy9Tq6pmGisIS1q2uBOSa31Cy6aNioSmkOyuGC98vwxjaPM1BVo8Kzod96xg/V4efCo0l1+qC4ROXca2KKl0qH2WWqUoQ+623tjmLgrn6jv3U5Qy2ECY4yeM61sqcmekbNEe0gCgDQrlTxuGqlaltpGqNdbeFRK25dtWRfEKhJ1NRI9jCL6Y25UylixGlRWgmWIqiwbdXRoY0hkfhc+ECdTIpSM6TAtsSqqqrpi7FqI3rNyM7u8xGEUOnEscOyXKkqQ50wD+AyXXfEEsEiUsMbWe9t94q0NKw5iFVYdbPqjY7q1ZmYNBPfexQL8i/5YKhUmpIQtI7QnA4Ot2s1bOsAJfI6BclNjHJyp5asqJ14zhGshRgOYHKKVIBui8Gct9R9CWKQMnbOSuy6lwyfk45bElGfbksNukpFC+i5I4sE9juLxJLB2fBE11IbGxWkTm/dL6TsVJUT5X3ahA914omEupuVlonMaVplkd/2kLa8UCFjL7PZg/4NTduL+aa2e2xrZ/l8xTotVU6j/42V294SIo4ubz308uIrpj5ZrkBEWZpZFWAPmBF4CcbLXldFZ2iAt2FY6Nddm8pYQ7R4hQriJrI4DiLt5uvRPpbzFGBvsCjY5Iq0XY1c9VJgLjsKFdrz4KLa44HEiDYEKxQH/+zW71FixcXEm1hhEIkQZ9mL9xGaLCJTmGxRb4ANxMVXgZgnJ7A82K4kRZvGM5cHHgQbgleoXWdv0mQJRcwoEOrwFo2HEAHPjvYlHR4iqlaijnCXMZwKdq4LHP8h64PpMetelUlLhRMnTuXq028ouViMq19X9+l1nYYGjhyw12VXSOyVLekGhJtMRHpHYIU7hJVv9yiBn7K7gB0q3sNiFl0Itd+j0D+JVbgSil29fHWujCKruSveJf66NFEHSwD4smKXFVLLCy2GWhFm+WLP/n+T19No9flYWg/PFqOVRUkjgx3m1/JVdynKS7nS1Vru5Zn2KI6yJ0shOh3Ca18f7QcZlEeZ+Nnzqach446A+MNxvN1Kmt6QMCUBngu5ZcZsPaSpLg8tXeoVUrOniWSi+PIVtEKDHT0vaRRpj3IR6lTKGQOLjppIYEvKniwV56uXu36JV6ckTIKSvCg42AjDIIllISHGsTRSqXw6hQjm8+mjQFVfeEuMXAmvZ6RdOwN6RuBT2p8PeXGJL7ukUk/SAUxuPbLWU99ZY5kFfDjuwpwbh6ojmF0ATOAhbNVPvV+9bSwcyX8uweAVfcQHJVWaE/Q5wIEoF3nJzjXaQ1K/XylAMR+nuOS0Tg4IJdihYTybJ99AzcF0ZBY4SbyDdlB3cHzQLOGl82p48FQDu6js/OJVCZSHyHGZ7iC6qP+gLCm1eRJVhdDgIBeaJf1zYY1egmgpTT+0iLMqFAdpP3GcpRyL3KT10EjlXhUztl2zn4IXZ6kRV5IDLX0kx/OfFnLqDbSFzexibdNBdV89zEWypKuJAdfi+Ga2NX0sGwabMIOdmMCuK3dktYeizaP5ShHHSOjkkb29vWMW6kK11UghIFJShSSQR1IaNBDYz0qLBmf54MFuWujeIdgD/SAPtC8kXNiEGez0iPfZDv2BIDrNMDHa98ENeMhSib8vPCWyFMafyGw20eZBvUmiUpAUyIVWMk59nMdGHMPBHHHyc1b3d2R48tNNSZmOsHM1Py6s0IjsswduYHZTaALWjvkQb+8dDZW1ZrULlz+doo7nACpr1bWV2V51IpP/BAuCNssi0A90jtBYKKFcC3ZSKLWWxH7bWIDFo1jlCEdxNJJGDwFm+Sh0Q3+ZBq5C4hRo1JZPqF8GPKY09XESwXeCwE8RgCYcILsrqJfxEcDXbWOJvduZXaLKC5tOcOJ85ScjW2epnKOJQo5krY/l1bRerkyGtXTGSHy0B4kb+SuWRWHYaWHfgtUuLn4SZ0/aLPFzNreyskVfficEbQAoBhZOtuz9EJwl2Su74sWZ+JGUpg3aNS/EmgztdcNqzpCwHvMqF+bsxeLKHEEbmB3EmSuLOTETiD/Qmkcl2Ape1ALoPDC3XO6rOUM8idbe+fbek5bmQ/zKLY4CYGhLY8698Q7taRy5t1vRyAw/KvEM1EJPmHP2CaXxO4g7I/F9WGDdQYDdCCbSyoLvFJH/0DMMPgWRXnQl3TWePdLqJYQyXxhpgwjW2RKtfhSjyi6OLUeC2HwpVOdkSHstS7Vq3Dsha6LE48BR/+5oM5z9HsCCOJOE0JaJoLW1RFZvCnP6K4q2WEnUji8G1wGx1F0Vx9k3yRQu8F95TdfXry8xnWbetGpxd3P7bS0sMemaAxtGu+qK/Emw4SEfVWiZSOYmm/dWCFmT8oZ7uQHuypjLD0+jWF2htY/Ec/JFU55tGKLYaqy0ge0320twMTPUhmu/xRTnFzm85F20GGhVzorkoHc646tz98/vDTD1bCBxqu3u6vb++V2JAc+0J1yuuuSvefNIqqXqJBVNNtJZ9tunJD6aOn8ladQ1mimyxwC1a6wJCUSJXSNjkEFBVvPUaJAXK4Iq1FpbShFyqjgXFIyxV8keA9NOHEutRSkikiZXKia1tHBloWdc47mq2s2kCSYq2UpMeXzZ1exHbgwnk+vAX9lxsNDKcfwBd7REcGM85tERm9Pb9Z08POkVHf6tXom5uR5eIOW2mYtM6Mcrt7z5t5OClTlpOkz34+QO42V5/YNbk8sAJ9jza90PaOf/tNmNAKAFCUgCQq3ZyBUs8Vkv3GeGlypN8NHNs8rSwQUet400dfAgDcYfB45xxP28PhurffPVd4utc8oJ67XR1iTtnNHeSaddMFlXXumQq3vRJRt09NFk1111TSdvvFOli8666q6bHhbqqbdep/PZ6q+fEqVeKzNAuYEGG2SnRYYaYpjh3nrvF28H0vq2Y11fk1Dr/7LkwKJSBXmNVqc3GC1MZkurNo0029ja2Ts4Ojm78MBDjzz2xNO2NSI898JLr7xmXP83UDctCgSGQGFwBBKFxmBx+MTVnSCSyBQqjc5gJjEO0UuyOVweXyAUiSVSmVyh3FXTiZ4IRV/X62eyrx/v8hfWdJM+lBqg7JasBSqwswTf37i0vu4qiFVqu2nst2lVv09Qc3rHun0vDlXLW6WMIGX/zdKkTZc+Q8ZMmbNkzRaMzJ4DmP355M6TN1/+AgULFS5StFjxEiVLRZUuU7ZceXZ2C45E5dmfDSKZSmeyuXyhWCpXqrV6o8nQ9tzqsO9rMp3NF8vVerPd7U3af9nz5Xq7P56v9+f7o9M+isZ82h7d++MLxdGx8YlJqPZbJpUr1RpWu+rNcLXP5BcWxdp/m6tr6xubW9s7u3v7B4dHxyf9wenZ+YVjW+6UB/+nnSo3vfjt/kPHfApENDHEEkc8CSRmeSrKqm7arh/GxTQLtz+S0/niwcNHj588ffb8xctXHtKn9OatebsFgSHs7SqOgG+Di/R/YywOTyCSyBQqjc5gstgcLo+/Fn05CKcwZN4bkxmwMMjs8Jz3OJfpvS1bu6nc9zQP5TY+UGu0Or3BaDJbrDa7w7miotwer88qlCn1ZZ48FZplK1BopNi4+ITEpOSU1LT0jEx0VnZObl5+QWFRcUlpWXlFZVV1TW1dfUNjU3NLK7j7gTq7ujE9vX392uR5wyOjKmXI3U9bo+2wkETgyRAS6ouWolFI7L8B3TAt23Gx55MgpFHMBoeGR0bHxidUsY1zGUBL+O4n1ex7HpH0ssFoMlusimrzz7ZOlxumuPLgsaLiWgqs/ZP+6QyGjRhFMDIxi7/jec7RiMTSnLuHZ52lsPDEBN+dGPSoKw5U+6ySUmxwqamNStszLk8GDy4LeqXKmrLhoFblyFc/4QtIinBtNp5uzTjPEAgJCUCeSRjYmiQb0Dn7VskzySWchuc28xYsEp0flITUChn0P3uHYZ5zlLP72WKOeRZYVKZcSYVKVarVWNBqpv/Fv3zXMTzfwObAkUHpBJ6Fi4LJ0/EdzK8HzTCnUwDa1xwiADoimf2op+hGNlivTXe+zb42AWt0tWhXZkcJzxiOzVejOqzPWJ9bh2RFcBoTh8xMZsAkW6NgLbsZoXMRDEaAUdMsXKstgTKbDGt3Q5WeuiWKnpRvNhUz2tnNpsW1ac1SQClMnQP+VuZIdpMbyOXGMpHB32SFvio+aJt+Rsf4l9mi6rztXSyLv0Ayx87gYkkjORhCnu/V0FkZpn5ymN24HaVmMCXwK2TuhkULYpxBcufoAnDlLDLe++JdDWNfs9hzrJopDJwUfySLfY49rnmeMCcrVkoQcc2ch9W+UeeIknMJ4nJJuVbHpplQlo2iGo9kTVfpqxLrJJRBDG0SUxskqX1G8L3lM/17vSWaXE+XObGip7f6zKz3sMgsMk4lKLVLnteocjPcfVbMYbbcbbKN90fsaY1M/E6ShGZF9YZfQF5WV57Oaxy8RtdQN1/jbcLNfxpCtMXUHfrADDONGubpadFwLW+tPnnzT7x19zvX39aSJp1Bk1O4wLZEI7ZUSMvPvYe+rSkhiQs+fotMUaTN1sE5bS+saIWoQPruS4pQrm0nF9DAZQsTxbQpAVNRGdEsMNg9HTmsNYTQUcmS64PUkUf5JJlqUCk4j1k4zyjhVMgVr2JTxmUNFZb4UTWf7ytzcFkQXJzbDisvV36u8sC5vw9VEOrIE4tDP2OdYOaSzKoDH2pTO8GSsXjWjD9IGm9PlF2dVNQI6wxTfRfbxdde6fWEYkma2CYazZwGrMzZJHHGLKkSPNknBybgZWpVu1wdAxe6FeqZD4GsvnyV+mFlajzhCk0+E0ZfZ7g/gfYMPTbs0y22W2gQrex5wE8NE+BIZ+c3RyoevaxAhAllJhdSWbZTDwEiTCgzuZDKsp16BBBhQpnJhVSW7dRjgAgTykwupLJsp54ARJhQZnIhlWU79RQgwoQykwupLNupZwARJpSZXEhl2U69CRBhQpnJhVSW7dRzgAgTyriQyrKdegEQYUKZyYVUlu3US4AIE8pMLqSybKdeAUSYUGZyIZVlO/UWQIQJZSYXUlm2U28DRJhQZnIhlWU79Q5AhAllJhdSWbZTrwEiTCgzuZDKsp1Ln3rOp5RSSimllFJKKaU0/eMBgHB8vj2yC+bXOITP7K7gcvhcsquiz+Uwu1d5J/gQYUKZyYVUlu3UK4AIE8pMLqSybKfeAogwoczkQirLduptgAgTykwupLJsp94BiDChzORCKst26jX8cBQb7eMUHhkHZ621rp99JXXDUNsRQYQJZSYXshoCZJlA77qAKfbXGt9+/eudW65xvC+T9fi9Ovzxrfs7QtYYeY3mcBk2dyBnbfaFHb/59avfDrKi8pRoXn8Y+N9fLZ1KGxOj5v4NPB+a0Z4favH7Dx9QHsm+lgvBDDPNldzXIWgaedIuGGVrXMTuOwSyBT/eonyTL77rn5sP/r++RTcbH0NleX448ShB39C2WFcWgElZSMre001abw2C/em54zRbwHvbHuqzow7MiI/T9yPGB7R5thGc0lJeTPeoX/rev9MsRHRKulgbG4Nb+wJWCLQSl82p+BQaQoa/iZLq8c+9lFet9GdlgD4AAPMAKJSgDI3CyI3MSA1iJEZsREZoBAY2fMMzXMMxbAMZG8NK/nO1+7vRzx9uZXLrFGJfFiettXpOQYOS0Q8rWBZ9QMEosEcTFBzessgItPJZfVOBD1O8CX9SmIwluKH+eAIQBBLlO0KEwDDhSF8RMQwTjkCisLBxfEdBMKRfUYL3qAAEgSP9yjbJ2gEo+/blUOb5OcMxKuXigJOWcFTKdjXsstz/MOM+CcBuGj3bdRHYDp328jjjAeRKFbwDHKY9G80Vtg/4PAzzMxpRuMbDWZfR8+ucRqBgB8MEtxoAq/3IJKi0smpW7uNwgt0GMMzYosGMjy5AKQJNgRkBAIieAQIDAAHe3jB1uLBhhW7t8CCcPB3Qzv/49VtnCx7/eWLydKzLE7OXlsmD6bNMLR6Ea6tEyMEUPAqaXvAVttD0WejHCX+xe/79Oz79O0F6t8IX7rlP74yaSsGIKT3nPLtvylQqMxEFujKY08p9LCH8i8S4a9w6Y+zaaXuU31zwztUzC2J+AFu7zKrQ1a5xwk3u/zxbfx4NTk6Rxs2OzksPdNfZgTw+tyccgtfjPPoCCB2cN5G9VNwgN+EpY6b72SxlM5Wpkn0NruJsgXsQwrcD6LywHDzWJxztwL1J9NkVEb3pft6o48aaZ0c7nKZTUhcyCmEAWXsdfteoSohEJKCpL6+ZqFk9xEWsZIgDDAhJSIpEBoF0inKbpoeVqfxCMJ/QNSlLZmffvWqEsQdsaOu0+GEgGw+xdgBJlLFlbypBsr5ri4JkzXRXKiuJG3abspT5ltrU36NIO0Sor2YnZgdsA/aPZqm+GrpMZMeobRatpAuigf/DYBkD3L/o+GReMaptQS2IvuvYpkHM/aQeT2M/0ULvHMEnicmCUZc0bo0EZKo6PKmATDZNNyeFk7JfD8UmLhRB+du+3D59aZfjPG7yjADgSRIzAgAAzy4UEBjA4wkWcH2wvuh8nDziCuLXQxPb97/Yaxsg7R524JS7J+kLVIACq6O76/qP5Gp5hUBQwCAIIRJmgdT11m2/WJvC15erL3paU1LbamulHu0odoPI5Xr91+WGgtL+enDapdjLrDlar7lvDUnN00bNV3bXD/iLHu5WPYqBqe/8lL5rkTZrsSa15C014A2SzXR9qjb371Klpdpey7SDVirn7X0mAIVL71gCQHk5vDTV36PX28ecgPSjSA6e7bMD0jeWHlBRbK1s6eEF1/kSUMohTslDURjAasQ7/nb+phkJDzuMfEDiMMFNHJZVm5KYVvnkqdNcwJZeSwTwTazsDF+BoTBMOJY/EQIIDEVgYeNkXQEyrECZVt6jJCROUkWHUju/LGdXyAZuCZT9nnWT6O6K/8wApMt+u8/MxY1dNmDhPJy2dktfAXqWPUHJBZrE2LN7+WPB/1PwwMUQ82wEeIDNECIoD9gBEfJnpSEFaJ4dUBVUNBvl7ACWHIHnhvEhYSM4ofa45MARXE5fOgqiazwl8Q0spUfwUaFIOrIzAnHXYITQWhuygX6I6PdGTSDiHdhMTITHsxH4n9Z/0StICgnqxZCbYFAE98YG/6uQXnmq7fZjsJggUAT36pufZVu3/Q+s89IWEkJmcERGd+TIb81oMdtfBoG1CO59bNm2Zf+35CnNXgGGbT9oCLBNtsdskCAAAA=="; + +/***/ }, + +/***/ 2883 +(module) { + +"use strict"; +module.exports = "data:application/font-woff2;base64,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"; + +/***/ }, + +/***/ 6873 +(module) { + +"use strict"; +module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAYAAABWdVznAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAACBSURBVHgBldFLDoMwDEXR18iq6Ii27H8lHXYd7IBPgAG/JBCCBEJAMB6fG0X24xf/B3hGa42sLZDWElEQgrxYWdxZ3OSIXm98niEECwczJqLj4AxPI+7gXXCFNwEHLwEXu8DtmYldsB7lGhtjQGm9HsWHVa8g+xLiy3xZqgqJ/ckIiPBvRSd16DkAAAAASUVORK5CYII="; + +/***/ }, + +/***/ 3417 +(module) { + +"use strict"; +module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADkAAAAOCAYAAACVZ7SQAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAKSSURBVHgB1VbbcdpAFF2B/oM7EB3I/0BEBcQVWKkgUEFEBSEVgCuIUoHXvL7lDlSCCuDhc+S7mvWODHhGfHBn7uxqdd+vXW8wGPw5Ho9jpdRitVr9xKr6/X6M5bv6HF5BO1M3Ar44SIijKJporQvP8yKcP57g08CbcnLaarVG+/3+CdkpXAI4PHXPwJOrGwKv7hAlvDCZhOPeJYJQBR0sASohc85DLPxXuP8+kRMIbeHI7rjnNfpD+cxsOg/990waYA6Hul9xErxH2WpkPAAPcbherzVk/MI+EeMM5MApZC6EP8Yyl38TyCBPUBrmeRkq7OFwOIxsOTifLZfLie0cqpAyfti2gS4BXVmFLdUMRMY4Yzy+Z2IYAzAF5tiTZi7ZdYEDsMwWP7AP4eAz5YC3ygpnCPgrh0hjOagFSZfAjvFFTjJbLtbRQdmk3W7f+b6fwahQlKXI2hARTaC0ij4iX+ckae+IEhAaGlAu+Lvgubf4R2Ibgxka/dRFxOeTkP5mpn3VDOjNZmNP27GUUSxXlOmpU/Df2r+o96wrI3e73WZw6gMDgwnZ5R6lXUj5E0wiyjlx1slLB48N7Ec4mFCJMeJKYAduXkew2+06TfVkBcyg1Y8pS5iBwjpUVwQOvDpk+zRVrjZU0UU5vZpRjswGqmGAE7ySqkcLpzpXXkOcyujlv/y+hpOFIDP6iD7hC+qb9bIinOvPiwDVsYAz5bUDHf+gK+Uk5iygDrRNDEfvGy9XZg6KzSspUO9XA6ermXjMcKAaAOrCwBnKNGbgYgkm9zn6sXyL+4jGg3IiC0YSJueUgLdbd86JiJJJzVUBOk2DcDZz+FMl95qS+/GUfktfYTmaY+n2er3IBI/PTvaieaa+AbvKm/l9DDOYAAAAAElFTkSuQmCC"; + +/***/ }, + +/***/ 6539 +(module) { + +"use strict"; +module.exports = /*#__PURE__*/JSON.parse('[{"project_id":"adguard-assistant","base_locale":"en","languages":{"en":"English","ar":"Arabic","be":"Belarusian","bg":"Bulgarian","ca":"Catalan","cs":"Czech","da":"Danish","de":"German","el":"Greek","es":"Spanish","fa":"Persian","fi":"Finnish","fr":"French","he":"Hebrew","hi":"Hindi","hr":"Croatian","hu":"Hungarian","id":"Indonesian","it":"Italian","ja":"Japanese","ko":"Korean","lt":"Lithuanian","mk":"Macedonian","no":"Norwegian","nl":"Dutch","pl":"Polish","pt-BR":"Portuguese (Brazil)","pt-PT":"Portuguese","ro":"Romanian","ru":"Russian","sk":"Slovak","sl":"Slovenian","sr":"Serbian (latin)","sv":"Swedish","th":"Thai","tr":"Turkish","uk":"Ukrainian","vi":"Vietnamese","zh-CN":"Chinese Simplified (mainland China)","zh-HK":"Chinese Traditional (Hong Kong)","zh-TW":"Chinese Traditional (Taiwan)"},"localizable_files":["locales/en/messages.json","locales/en/messages.meta.json"]}]'); + +/***/ }, + +/***/ 2066 +(module) { + +"use strict"; +module.exports = /*#__PURE__*/JSON.parse('{"settings_position_save_all":"كافة مواقع الويب","settings_position_save_this":"هذا الموقع","assistant_select_element_start":"بدء","assistant_select_element_text":"اختر عنصرا في الصفحة للحظرقم بتحديث الصفحة لالغاء وضع حظر العنصر","menu_filtration_status":{"message":"تفعيل الفلترةعلى هذا الموقع"},"menu_do_not_filter_30_sec":{"message":"عدم الفلترة لمده 30 ثانيه"},"menu_block_ad_on_site":{"message":"منع الإعلان على هذا الموقع"},"menu_report_abuse":{"message":"الإبلاغ عن هذا الموقع"},"menu_site_report":{"message":"تقرير أمن الموقع"},"menu_settings":{"message":"إعدادات المساعد"},"menu_wot_reputation_indicator":{"message":"مؤشر سمعة الموقع"},"menu_wot_reputation_confidence_level":{"message":"مستوى الثقة في السمعة"},"assistant_select_element":{"message":"حظر العنصر"},"assistant_select_element_cancel":{"message":"الغاء"},"assistant_block_element":{"message":"حظر العنصر"},"assistant_extended_settings":{"message":"إعدادات متقدمة"},"assistant_apply_rule_to_all_sites":{"message":"تطبيق القاعدة علي كافة مواقع الويب"},"assistant_block_by_reference":{"message":"حظر حسب الارتباط المرجعي"},"assistant_block_similar":{"message":"حظر عنصر مما ثل"},"assistant_another_element":{"message":"حدد عنصرًا مختلفًا"},"assistant_preview":{"message":"المعاينه"},"assistant_block":{"message":"حظر"},"assistant_settings":{"message":"إعدادات المساعد"},"assistant_preview_end":{"message":"إنهاء المعاينة"},"wot_unknown_description":{"message":"$1 لم يتم تعريف سمعه هذا الموقع من قبل"},"wot_bad_description":{"message":"$1هذا الموقع لديه سمعة سيئة للغاية \\nوفقاً لـ"},"wot_poor_description":{"message":"$1 هذا الموقع له سمعة سيئة \\nوفقا لـ"},"wot_unsatisfactory_description":{"message":"$1هذا الموقع له سمعة سيئة\\nوفقا لـ"},"wot_good_description":{"message":"$1يتمتع هذا الموقع بسمعة طيبة\\nوفقا لـ"},"wot_excellent_description":{"message":"هذا الموقع يتمتع بسمعة ممتازة\\nوفقاً لـ $1"},"settings_choose_size_and_position":{"message":"وموضعه AdGuard ضبط حجم مساعد"},"settings_icon_size":{"message":":حجم الرمز"},"settings_small":{"message":"صغير"},"settings_big":{"message":"كبير"},"settings_position":{"message":"وضع"},"settings_left_top":{"message":"اعلي اليسار"},"settings_right_top":{"message":"اعلي اليمين"},"settings_left_bottom":{"message":"أسفل لليسار"},"settings_right_bottom":{"message":"أسفل لليمين"},"settings_cancel":{"message":"الغاء"},"settings_save":{"message":"حفظ التغييرات"}}'); + +/***/ }, + +/***/ 2993 +(module) { + +"use strict"; +module.exports = /*#__PURE__*/JSON.parse('{"extension":{"assistant":{"name":"مساعد AdGuard","description":"يوفر طريقه سهله ومريحه لأداره التصفية الحقيقة من المتصفح"}}}'); + +/***/ }, + +/***/ 7500 +(module) { + +"use strict"; +module.exports = /*#__PURE__*/JSON.parse('{"settings_position_save_all":"На ўсіх","settings_position_save_this":"Толькі на гэтым","assistant_select_element_start":"Пачаць","assistant_select_element_text":"Абярыце на старонцы элемент для блакавання. Абнавіце старонку, каб скасаваць рэжым блакавання элементаў.","menu_filtration_status":{"message":"Фільтрацыя на гэтым сайце"},"menu_do_not_filter_30_sec":{"message":"Не фільтраваць 30 секундаў"},"menu_block_ad_on_site":{"message":"Заблакаваць рэкламу на сайце"},"menu_site_report":{"message":"Справаздача пра бяспеку сайта"},"menu_wot_reputation_indicator":{"message":"Індыкатар рэпутацыі сайта"},"menu_wot_reputation_confidence_level":{"message":"Узровень верагоднасці рэпутацыі"},"assistant_select_element_cancel":{"message":"Скасаваць"},"assistant_extended_settings":{"message":"Пашыраныя налады"},"assistant_apply_rule_to_all_sites":{"message":"Ужыць правіла для ўсіх сайтаў"},"assistant_block_by_reference":{"message":"Блакаваць па спасылцы"},"assistant_another_element":{"message":"Абраць іншы элемент"},"assistant_preview":{"message":"Перадпрагляд"},"assistant_block":{"message":"Заблакіраваць"},"wot_unknown_description":{"message":"Рэпутацыя не вызначана"},"wot_bad_description":{"message":"У сайта вельмі дрэнная рэпутацыя па дадзеных $1"},"wot_poor_description":{"message":"У сайта дрэнная рэпутацыя па дадзеных $1"},"wot_unsatisfactory_description":{"message":"У сайта нездавальняльная рэпутацыя па дадзеных $1"},"wot_excellent_description":{"message":"У сайта выдатная рэпутацыя па дадзеных $1"},"settings_choose_size_and_position":{"message":"Наладзьце памер і становішча памочніка AdGuard"},"settings_big":{"message":"Вялікая"},"settings_left_top":{"message":"Уверсе злева"},"settings_right_top":{"message":"Уверсе справа"},"settings_left_bottom":{"message":"Унізе злева"},"settings_right_bottom":{"message":"Унізе справа"},"settings_cancel":{"message":"Скасаваць"}}'); + +/***/ }, + +/***/ 683 +(module) { + +"use strict"; +module.exports = /*#__PURE__*/JSON.parse('{"extension":{"assistant":{"name":"Памочнік AdGuard","description":"Дазваляе лёгка і хутка кіраваць фільтрацыяй непасрэдна з браўзара"}}}'); + +/***/ }, + +/***/ 4134 +(module) { + +"use strict"; +module.exports = /*#__PURE__*/JSON.parse('{"settings_position_save":"Уебсайтове","settings_position_save_all":"Всички уебсайтове","settings_position_save_this":"Този уебсайт","assistant_select_element_start":"Старт","assistant_select_element_text":"Изберете елемент на страницата, който да блокирате. Опреснете страницата, за да отмените режима за блокиране на елементи.","menu_filtration_status":{"message":"Филтриране в този уебсайт"},"menu_do_not_filter_30_sec":{"message":"Не филтрирайте в продължение на 30 секунди"},"menu_block_ad_on_site":{"message":"Блокирай реклама на този сайт"},"menu_report_abuse":{"message":"Докладвай този уебсайт"},"menu_site_report":{"message":"Доклад за сигурността на сайта"},"menu_settings":{"message":"Настройки на Асистента"},"menu_wot_reputation_indicator":{"message":"Индикатор за репутация на сайта"},"menu_wot_reputation_confidence_level":{"message":"Ниво на доверие в репутацията"},"assistant_select_element":{"message":"Блокирай елемент"},"assistant_select_element_ext":{"message":"Кликнете върху елемент, който искате да блокирате. AdGuard ще създаде правило за него"},"assistant_select_element_cancel":{"message":"Отказ"},"assistant_block_element":{"message":"Блокирай елемент"},"assistant_block_element_explain":{"message":"Създаване на правило за блокиране на елемент"},"assistant_slider_explain":{"message":"Преместете плъзгача, за да регулирате размера на рамката"},"assistant_extended_settings":{"message":"Разширени настройки"},"assistant_apply_rule_to_all_sites":{"message":"Приложи правилото към всички сайтове"},"assistant_block_by_reference":{"message":"Блокиране по референтен линк"},"assistant_block_similar":{"message":"Блокиране на подобни"},"assistant_another_element":{"message":"Избор на различен елемент"},"assistant_preview":{"message":"Преглед"},"assistant_block":{"message":"Блокирай"},"assistant_settings":{"message":"Настройки на Асистента"},"assistant_preview_header":{"message":"Преглед на блокирания елемент"},"assistant_preview_header_info":{"message":"Проверете дали елементът е блокиран правилно"},"assistant_preview_end":{"message":"Изход от преглед"},"wot_unknown_description":{"message":"Репутацията на този уебсайт не е определена от $1"},"wot_bad_description":{"message":"Този уебсайт е с много лоша репутация\\nспоред $1"},"wot_poor_description":{"message":"Този уебсайт е с лоша репутация според $1"},"wot_unsatisfactory_description":{"message":"Този сайт е с лоша репутация според $1"},"wot_good_description":{"message":"Този уебсайт има добра репутация\\nспоред $1"},"wot_excellent_description":{"message":"Този уебсайт е с отлична репутация\\nспоред $1"},"settings_choose_size_and_position":{"message":"Настройване на размера и позицията на AdGuard Assistant"},"settings_icon_size":{"message":"Размер на иконата:"},"settings_small":{"message":"Малка"},"settings_big":{"message":"Голяма"},"settings_position":{"message":"Позиция:"},"settings_left_top":{"message":"Горе вляво"},"settings_right_top":{"message":"Горе вдясно"},"settings_left_bottom":{"message":"Долу вляво"},"settings_right_bottom":{"message":"Долу вдясно"},"settings_cancel":{"message":"Отказ"},"settings_save":{"message":"Запази промените"}}'); + +/***/ }, + +/***/ 6077 +(module) { + +"use strict"; +module.exports = /*#__PURE__*/JSON.parse('{"extension":{"assistant":{"name":"Асистент на AdGuard","description":"Осигурява лесен и удобен начин за управление на филтрирането директно от браузъра"}}}'); + +/***/ }, + +/***/ 7699 +(module) { + +"use strict"; +module.exports = /*#__PURE__*/JSON.parse('{"settings_position_save":"Llocs web","settings_position_save_all":"Tots els llocs web","settings_position_save_this":"Aquest lloc web","assistant_select_element_start":"Començar","assistant_select_element_text":"Trieu un element de la pàgina per bloquejar. Actualitzeu la pàgina per cancel·lar el mode de bloqueig d\'elements.","menu_filtration_status":{"message":"Filtrat en aquest lloc web"},"menu_do_not_filter_30_sec":{"message":"No filtrar durant 30 segons"},"menu_block_ad_on_site":{"message":"Bloquejar anuncis en aquest lloc web"},"menu_report_abuse":{"message":"Informar del lloc web"},"menu_site_report":{"message":"Informe de seguretat del lloc web"},"menu_settings":{"message":"Configuració de l\'assistent"},"menu_wot_reputation_indicator":{"message":"Indicador de reputació del lloc"},"menu_wot_reputation_confidence_level":{"message":"Nivell de confiança de la reputació"},"assistant_select_element":{"message":"Bloqueja un element"},"assistant_select_element_ext":{"message":"Fes clic en un element que vulguis bloquejar. AdGuard crearà una regla d\'usuari per a això"},"assistant_select_element_cancel":{"message":"Cancel·lar"},"assistant_block_element":{"message":"Bloqueja un element"},"assistant_block_element_explain":{"message":"Crea una regla de bloqueig d\'elements"},"assistant_slider_explain":{"message":"Mou el control lliscant per ajustar la mida del marc"},"assistant_extended_settings":{"message":"Configuració avançada"},"assistant_apply_rule_to_all_sites":{"message":"Apliqueu la regla a tots els llocs web"},"assistant_block_by_reference":{"message":"Bloqueja per enllaç de referència"},"assistant_block_similar":{"message":"Bloquejar element similar"},"assistant_another_element":{"message":"Seleccioneu un element diferent"},"assistant_preview":{"message":"Vista prèvia"},"assistant_block":{"message":"Bloquejeu"},"assistant_settings":{"message":"Configuració de l\'assistent"},"assistant_preview_header":{"message":"Previsualitza l\'element bloquejat"},"assistant_preview_header_info":{"message":"Comproveu si l\'element està bloquejat correctament"},"assistant_preview_end":{"message":"Sortir de la vista prèvia"},"wot_unknown_description":{"message":"La reputació d\'aquest lloc web no està definida per $1"},"wot_bad_description":{"message":"Aquest lloc web té una molt mala reputació\\nsegons $1"},"wot_poor_description":{"message":"Aquest lloc web té una mala reputació \\nsegons $1"},"wot_unsatisfactory_description":{"message":"Aquest lloc web té una pobra reputació\\nsegons $1"},"wot_good_description":{"message":"Aquest lloc web té una bona reputació\\nsegons $1"},"wot_excellent_description":{"message":"Aquest lloc web té una excel·lent reputació\\nsegons $1"},"settings_choose_size_and_position":{"message":"Ajusteu la mida i la posició de l\'AdGuard Assistant"},"settings_icon_size":{"message":"Mida de la icona:"},"settings_small":{"message":"Petit"},"settings_big":{"message":"Gran"},"settings_position":{"message":"Posició:"},"settings_left_top":{"message":"A dalt a l\'esquerra"},"settings_right_top":{"message":"A dalt a la dreta"},"settings_left_bottom":{"message":"A baix a l\'esquerra"},"settings_right_bottom":{"message":"A baix a la dreta"},"settings_cancel":{"message":"Cancel·lar"},"settings_save":{"message":"Guardar canvis"}}'); + +/***/ }, + +/***/ 70 +(module) { + +"use strict"; +module.exports = /*#__PURE__*/JSON.parse('{"extension":{"assistant":{"name":"Assistent d\'AdGuard","description":"Proporciona una manera fàcil i còmoda de gestionar el filtratge directament des del navegador"}}}'); + +/***/ }, + +/***/ 3753 +(module) { + +"use strict"; +module.exports = /*#__PURE__*/JSON.parse('{"settings_position_save":"Webové stránky","settings_position_save_all":"Všechny webové stránky","settings_position_save_this":"Tato webová stránka","assistant_select_element_start":"Spustit","assistant_select_element_text":"Vyberte prvek na stránce, který chcete zablokovat. Obnovte stránku pro zrušení režimu blokování prvků.","menu_filtration_status":{"message":"Filtrování na těchto webových stránkách"},"menu_do_not_filter_30_sec":{"message":"Nefiltrovat po dobu 30 sekund"},"menu_block_ad_on_site":{"message":"Blokovat reklamy na této webové stránce"},"menu_report_abuse":{"message":"Nahlásit webovou stránku"},"menu_site_report":{"message":"Zpráva o bezpečnosti webové stránky"},"menu_settings":{"message":"Nastavení asistenta"},"menu_wot_reputation_indicator":{"message":"Indikátor reputace webu"},"menu_wot_reputation_confidence_level":{"message":"Úroveň důvěryhodnosti reputace"},"assistant_select_element":{"message":"Blokovat prvek"},"assistant_select_element_ext":{"message":"Klikněte na prvek, který chcete blokovat. AdGuard pro něj vytvoří uživatelské pravidlo"},"assistant_select_element_cancel":{"message":"Zrušit"},"assistant_block_element":{"message":"Blokovat prvek"},"assistant_block_element_explain":{"message":"Vytvořte pravidlo blokování prvku"},"assistant_slider_explain":{"message":"Posunutím posuvníku upravíte velikost rámečku"},"assistant_extended_settings":{"message":"Pokročilá nastavení"},"assistant_apply_rule_to_all_sites":{"message":"Použít pravidlo pro všechny webové stránky"},"assistant_block_by_reference":{"message":"Blokovat referenčním odkazem"},"assistant_block_similar":{"message":"Blokovat podobné"},"assistant_another_element":{"message":"Vyber jiný prvek"},"assistant_preview":{"message":"Náhled"},"assistant_block":{"message":"Blokovat"},"assistant_settings":{"message":"Nastavení asistenta"},"assistant_preview_header":{"message":"Náhled blokovaného prvku"},"assistant_preview_header_info":{"message":"Zkontrolujte, zda je prvek správně zablokován"},"assistant_preview_end":{"message":"Ukončit náhled"},"wot_unknown_description":{"message":"Pověst této webové stránky není definována podle $1"},"wot_bad_description":{"message":"Tato webová stránka má velmi špatnou pověst \\npodle $1"},"wot_poor_description":{"message":"Tato webová stránka má špatnou pověst \\npodle $1"},"wot_unsatisfactory_description":{"message":"Tato webová stránka má špatnou pověst \\npodle $1"},"wot_good_description":{"message":"Tato webová stránka má dobrou pověst \\npodle $1"},"wot_excellent_description":{"message":"Tato webová stránka má výbornou pověst \\npodle $1"},"settings_choose_size_and_position":{"message":"Upravit velikost a pozici AdGuard Asistenta"},"settings_icon_size":{"message":"Velikost ikony:"},"settings_small":{"message":"Malá"},"settings_big":{"message":"Velká"},"settings_position":{"message":"Pozice:"},"settings_left_top":{"message":"Vlevo nahoře"},"settings_right_top":{"message":"Vpravo nahoře"},"settings_left_bottom":{"message":"Vlevo dole"},"settings_right_bottom":{"message":"Vpravo dole"},"settings_cancel":{"message":"Zrušit"},"settings_save":{"message":"Uložit změny"}}'); + +/***/ }, + +/***/ 5972 +(module) { + +"use strict"; +module.exports = /*#__PURE__*/JSON.parse('{"extension":{"assistant":{"name":"AdGuard Asistent","description":"Poskytuje snadný a pohodlný způsob správy filtrování přímo z prohlížeče"}}}'); + +/***/ }, + +/***/ 8626 +(module) { + +"use strict"; +module.exports = /*#__PURE__*/JSON.parse('{"settings_position_save":"Websteder","settings_position_save_all":"Alle websteder","settings_position_save_this":"Dette websted","assistant_select_element_start":"Start","assistant_select_element_text":"Vælg et element på denne side, der skal blokeres. Opfrisk siden for at afbryde elementblokeringstilstanden.","menu_filtration_status":{"message":"Filtrering på dette websted"},"menu_do_not_filter_30_sec":{"message":"Filtrér ikke i 30 sekunder"},"menu_block_ad_on_site":{"message":"Blokér annoncer på dette websted"},"menu_report_abuse":{"message":"Anmeld dette websted"},"menu_site_report":{"message":"Webstedssikkerhedsrapport"},"menu_settings":{"message":"Assistent-indstillinger"},"menu_wot_reputation_indicator":{"message":"Webstedsomdømmeindikator"},"menu_wot_reputation_confidence_level":{"message":"Omdømmetillidsniveau"},"assistant_select_element":{"message":"Blokere et element"},"assistant_select_element_ext":{"message":"Klik på et element, der skal blokeres. AdGuard opretter en brugerregel for det"},"assistant_select_element_cancel":{"message":"Afbryd"},"assistant_block_element":{"message":"Blokere et element"},"assistant_block_element_explain":{"message":"Opret en elementblokereringsregel"},"assistant_slider_explain":{"message":"Flyt skyderen for at justere rammestørrelsen"},"assistant_extended_settings":{"message":"Avancerede indstillinger"},"assistant_apply_rule_to_all_sites":{"message":"Anvend reglen på alle websteder"},"assistant_block_by_reference":{"message":"Blokér efter referencelink"},"assistant_block_similar":{"message":"Blokér lignende"},"assistant_another_element":{"message":"Vælg et andet element"},"assistant_preview":{"message":"Forhåndsvisning"},"assistant_block":{"message":"Blokér"},"assistant_settings":{"message":"Assistent-indstillinger"},"assistant_preview_header":{"message":"Forhåndsvisningsblokeret element"},"assistant_preview_header_info":{"message":"Tjek, om elementet blokeres korrekt"},"assistant_preview_end":{"message":"Afslut forhåndsvisning"},"wot_unknown_description":{"message":"Dette websteds omdømme er ikke defineret af $1"},"wot_bad_description":{"message":"Dette websted har et meget dårligt omdømme jf. $1"},"wot_poor_description":{"message":"Dette websted har et dårligt omdømme jf. $1"},"wot_unsatisfactory_description":{"message":"Dette websted har et ringe omdømme jf. $1"},"wot_good_description":{"message":"Dette websted har et godt omdømme jf. $1"},"wot_excellent_description":{"message":"Dette websted har et fremragende omdømme \\njf. $1"},"settings_choose_size_and_position":{"message":"Justér størrelse og position for AdGuard Assistent"},"settings_icon_size":{"message":"Ikonstørrelse:"},"settings_small":{"message":"Lille"},"settings_big":{"message":"Stor"},"settings_position":{"message":"Position:"},"settings_left_top":{"message":"Øverst til venstre"},"settings_right_top":{"message":"Øverst til højre"},"settings_left_bottom":{"message":"Nederst til venstre"},"settings_right_bottom":{"message":"Nederst til højre"},"settings_cancel":{"message":"Afbryd"},"settings_save":{"message":"Gem ændringer"}}'); + +/***/ }, + +/***/ 9025 +(module) { + +"use strict"; +module.exports = /*#__PURE__*/JSON.parse('{"extension":{"assistant":{"name":"AdGuard Assistent","description":"Muliggør nem og bekvem filtreringshåndtering direkte fra browseren"}}}'); + +/***/ }, + +/***/ 5278 +(module) { + +"use strict"; +module.exports = /*#__PURE__*/JSON.parse('{"settings_position_save":"Websites","settings_position_save_all":"Alle Websites","settings_position_save_this":"Diese Webseite","assistant_select_element_start":"Starten","assistant_select_element_text":"Wählen Sie ein zu sperrendes Element auf der Seite aus. Laden Sie die Seite neu, um den Sperrmodus zu verlassen.","menu_filtration_status":{"message":"Diese Webseite filtern"},"menu_do_not_filter_30_sec":{"message":"Schutz für 30 Sekunden deaktivieren"},"menu_block_ad_on_site":{"message":"Werbung auf dieser Seite sperren"},"menu_report_abuse":{"message":"Diese Webseite melden"},"menu_site_report":{"message":"Sicherheitsbericht dieser Webseite"},"menu_settings":{"message":"Assistent-Einstellungen"},"menu_wot_reputation_indicator":{"message":"Website-Reputations-Indikator"},"menu_wot_reputation_confidence_level":{"message":"Reputationsvertrauensgrad"},"assistant_select_element":{"message":"Element blockieren"},"assistant_select_element_ext":{"message":"Klicken Sie auf ein Element — AdGuard erstellt dafür eine Benutzerregel"},"assistant_select_element_cancel":{"message":"Abbrechen"},"assistant_block_element":{"message":"Element blockieren"},"assistant_block_element_explain":{"message":"Erstellen Sie eine Blockierregel für dieses Element"},"assistant_slider_explain":{"message":"Bewegen Sie den Schieberegler, um die Größe des Rahmens anzupassen"},"assistant_extended_settings":{"message":"Erweiterte Einstellungen"},"assistant_apply_rule_to_all_sites":{"message":"Regel auf alle Webseiten anwenden"},"assistant_block_by_reference":{"message":"Durch Referenzlink sperren"},"assistant_block_similar":{"message":"Ähnliche Elemente blockieren"},"assistant_another_element":{"message":"Ein anderes Element wählen"},"assistant_preview":{"message":"Vorschau"},"assistant_block":{"message":"Sperren"},"assistant_settings":{"message":"Assistent-Einstellungen"},"assistant_preview_header":{"message":"Blockiertes Element vorab anzeigen"},"assistant_preview_header_info":{"message":"Prüfen Sie, ob das Element korrekt blockiert ist"},"assistant_preview_end":{"message":"Vorschau beenden"},"wot_unknown_description":{"message":"Der Ruf dieser Webseite wird nicht durch $1 festgelegt"},"wot_bad_description":{"message":"Diese Webseite hat einen sehr schlechten Ruf laut $1"},"wot_poor_description":{"message":"Diese Webseite hat einen schlechten Ruf laut $1"},"wot_unsatisfactory_description":{"message":"Diese Webseite hat einen schlechten Ruf laut $1"},"wot_good_description":{"message":"Diese Webseite hat einen guten Ruf laut $1"},"wot_excellent_description":{"message":"Diese Webseite hat einen exzellenten Ruf laut $1"},"settings_choose_size_and_position":{"message":"Anpassen der Größe und Position des AdGuard-Assistent"},"settings_icon_size":{"message":"Symbol-Größe:"},"settings_small":{"message":"Klein"},"settings_big":{"message":"Groß"},"settings_position":{"message":"Position:"},"settings_left_top":{"message":"Oben links"},"settings_right_top":{"message":"Oben rechts"},"settings_left_bottom":{"message":"Unten links"},"settings_right_bottom":{"message":"Unten rechts"},"settings_cancel":{"message":"Abbrechen"},"settings_save":{"message":"Änderungen speichern"}}'); + +/***/ }, + +/***/ 4005 +(module) { + +"use strict"; +module.exports = /*#__PURE__*/JSON.parse('{"extension":{"assistant":{"name":"AdGuard-Assistent","description":"Bietet eine einfache und bequeme Möglichkeit, das Filtern direkt im Browser zu verwalten"}}}'); + +/***/ }, + +/***/ 2360 +(module) { + +"use strict"; +module.exports = /*#__PURE__*/JSON.parse('{"settings_position_save":"Ιστοσελίδες","settings_position_save_all":"Όλοι οι ιστότοποι","settings_position_save_this":"Αυτός ο ιστότοπος","assistant_select_element_start":"Εκκίνηση","assistant_select_element_text":"Επιλέξτε ένα στοιχείο στη σελίδα για αποκλεισμό. Ανανεώστε τη σελίδα για να ακυρώσετε τη λειτουργία αποκλεισμού στοιχείων.","menu_filtration_status":{"message":"Φιλτράρισμα σε αυτόν τον ιστότοπο"},"menu_do_not_filter_30_sec":{"message":"Παύση φιλτραρίσματος για 30 δευτερόλεπτα"},"menu_block_ad_on_site":{"message":"Αποκλεισμός διαφήμισης σε αυτόν τον ιστότοπο"},"menu_report_abuse":{"message":"Αναφέρετε αυτόν τον ιστότοπο"},"menu_site_report":{"message":"Αναφορά ασφάλειας ιστότοπου"},"menu_settings":{"message":"Ρυθμίσεις βοηθού"},"menu_wot_reputation_indicator":{"message":"Δείκτης φήμης ιστότοπου"},"menu_wot_reputation_confidence_level":{"message":"Επίπεδο εμπιστοσύνης φήμης"},"assistant_select_element":{"message":"Αποκλεισμός ενός στοιχείου"},"assistant_select_element_ext":{"message":"Κάντε κλικ σε ένα στοιχείο που θέλετε να αποκλείσετε. Το AdGuard θα δημιουργήσει έναν κανόνα χρήστη για αυτό"},"assistant_select_element_cancel":{"message":"Άκυρο"},"assistant_block_element":{"message":"Αποκλεισμός ενός στοιχείου"},"assistant_block_element_explain":{"message":"Δημιουργήστε έναν κανόνα αποκλεισμού στοιχείων"},"assistant_slider_explain":{"message":"Μετακινήστε το ρυθμιστικό για να ρυθμίσετε το μέγεθος του πλαισίου"},"assistant_extended_settings":{"message":"Προηγμένες ρυθμίσεις"},"assistant_apply_rule_to_all_sites":{"message":"Εφαρμογή του κανόνα σε όλες τις ιστοσελίδες"},"assistant_block_by_reference":{"message":"Αποκλεισμός μέσω συνδέσμου αναφοράς"},"assistant_block_similar":{"message":"Αποκλεισμός παρόμοιου"},"assistant_another_element":{"message":"Επιλέξτε ένα διαφορετικό στοιχείο"},"assistant_preview":{"message":"Προεπισκόπηση"},"assistant_block":{"message":"Αποκλεισμός"},"assistant_settings":{"message":"Ρυθμίσεις βοηθού"},"assistant_preview_header":{"message":"Προεπισκόπηση αποκλεισμένου στοιχείου"},"assistant_preview_header_info":{"message":"Ελέγξτε αν το στοιχείο έχει μπλοκαριστεί σωστά"},"assistant_preview_end":{"message":"Έξοδος προεπισκόπησης"},"wot_unknown_description":{"message":"Η φήμη αυτού του ιστότοπου δεν έχει καθοριστεί από το $1"},"wot_bad_description":{"message":"Αυτός ο ιστότοπος έχει πολύ κακή φήμη\\nσύμφωνα με το $1"},"wot_poor_description":{"message":"Αυτός ο ιστότοπος έχει κακή φήμη\\nσύμφωνα με το $1"},"wot_unsatisfactory_description":{"message":"Αυτός ο ιστότοπος έχει κακή φήμη\\nσύμφωνα με το $1"},"wot_good_description":{"message":"Αυτός ο ιστότοπος έχει καλή φήμη\\nσύμφωνα με το $1"},"wot_excellent_description":{"message":"Αυτός ο ιστότοπος έχει εξαιρετική φήμη\\nσύμφωνα με το $1"},"settings_choose_size_and_position":{"message":"Προσαρμόστε το μέγεθος και τη θέση του Βοηθού AdGuard"},"settings_icon_size":{"message":"Μέγεθος εικονιδίου:"},"settings_small":{"message":"Μικρό"},"settings_big":{"message":"Μεγάλο"},"settings_position":{"message":"Θέση:"},"settings_left_top":{"message":"Πάνω αριστερά"},"settings_right_top":{"message":"Πάνω δεξιά"},"settings_left_bottom":{"message":"Κάτω αριστερά"},"settings_right_bottom":{"message":"Κάτω δεξιά"},"settings_cancel":{"message":"Άκυρο"},"settings_save":{"message":"Αποθήκευση αλλαγών"}}'); + +/***/ }, + +/***/ 495 +(module) { + +"use strict"; +module.exports = /*#__PURE__*/JSON.parse('{"extension":{"assistant":{"name":"Βοηθός AdGuard","description":"Παρέχει εύκολο και βολικό τρόπο διαχείρισης του φιλτραρίσματος απευθείας από το πρόγραμμα περιήγησης"}}}'); + +/***/ }, + +/***/ 6642 +(module) { + +"use strict"; +module.exports = /*#__PURE__*/JSON.parse('{"settings_position_save":"Websites","settings_position_save_all":"All websites","settings_position_save_this":"This website","assistant_select_element_start":"Start","assistant_select_element_text":"Choose an element on the page to block. Refresh the page to cancel the element blocking mode.","menu_filtration_status":{"message":"Filtering on this website"},"menu_do_not_filter_30_sec":{"message":"Do not filter for 30 seconds"},"menu_block_ad_on_site":{"message":"Block ad on this website"},"menu_report_abuse":{"message":"Report the website"},"menu_site_report":{"message":"Website security report"},"menu_settings":{"message":"Assistant settings"},"menu_wot_reputation_indicator":{"message":"Site reputation indicator"},"menu_wot_reputation_confidence_level":{"message":"Reputation Confidence Level"},"assistant_select_element":{"message":"Block an element"},"assistant_select_element_ext":{"message":"Click an element you want to block. AdGuard will create a user rule for it"},"assistant_select_element_cancel":{"message":"Cancel"},"assistant_block_element":{"message":"Block an element"},"assistant_block_element_explain":{"message":"Create an element blocking rule"},"assistant_slider_explain":{"message":"Move the slider to adjust the size of the frame"},"assistant_extended_settings":{"message":"Advanced settings"},"assistant_apply_rule_to_all_sites":{"message":"Apply the rule to all websites"},"assistant_block_by_reference":{"message":"Block by reference link"},"assistant_block_similar":{"message":"Block similar"},"assistant_another_element":{"message":"Select a different element"},"assistant_preview":{"message":"Preview"},"assistant_block":{"message":"Block"},"assistant_settings":{"message":"Assistant settings"},"assistant_preview_header":{"message":"Preview blocked element"},"assistant_preview_header_info":{"message":"Check if the element is blocked correctly"},"assistant_preview_end":{"message":"Exit preview"},"wot_unknown_description":{"message":"This website\'s reputation is not defined by $1"},"wot_bad_description":{"message":"This website has a very bad reputation\\naccording to $1"},"wot_poor_description":{"message":"This website has a bad reputation \\naccording to $1"},"wot_unsatisfactory_description":{"message":"This website has a poor reputation\\naccording to $1"},"wot_good_description":{"message":"This website has a good reputation\\naccording to $1"},"wot_excellent_description":{"message":"This website has an excellent reputation\\naccording to $1"},"settings_choose_size_and_position":{"message":"Adjust AdGuard Assistant size and position"},"settings_icon_size":{"message":"Icon size:"},"settings_small":{"message":"Small"},"settings_big":{"message":"Large"},"settings_position":{"message":"Position:"},"settings_left_top":{"message":"Top left"},"settings_right_top":{"message":"Top right"},"settings_left_bottom":{"message":"Bottom left"},"settings_right_bottom":{"message":"Bottom right"},"settings_cancel":{"message":"Cancel"},"settings_save":{"message":"Save changes"}}'); + +/***/ }, + +/***/ 9921 +(module) { + +"use strict"; +module.exports = /*#__PURE__*/JSON.parse('{"extension":{"assistant":{"name":"AdGuard Assistant","description":"Provides easy and convenient way to manage filtering right from the browser"}}}'); + +/***/ }, + +/***/ 2271 +(module) { + +"use strict"; +module.exports = /*#__PURE__*/JSON.parse('{"settings_position_save":"Sitios web","settings_position_save_all":"Todos los sitios web","settings_position_save_this":"Este sitio web","assistant_select_element_start":"Comenzar","assistant_select_element_text":"Elige un elemento en la página para bloquear. Actualiza la página para cancelar el bloqueo de elementos.","menu_filtration_status":{"message":"Filtrado en este sitio web"},"menu_do_not_filter_30_sec":{"message":"No filtrar durante 30 segundos"},"menu_block_ad_on_site":{"message":"Bloquear anuncios en este sitio web"},"menu_report_abuse":{"message":"Reportar el sitio web"},"menu_site_report":{"message":"Informe de seguridad del sitio web"},"menu_settings":{"message":"Configuración del asistente"},"menu_wot_reputation_indicator":{"message":"Indicador de reputación del sitio"},"menu_wot_reputation_confidence_level":{"message":"Nivel de confianza de reputación"},"assistant_select_element":{"message":"Bloquear un elemento"},"assistant_select_element_ext":{"message":"Haz clic en un elemento que deseas bloquear. AdGuard creará una regla de usuario para él"},"assistant_select_element_cancel":{"message":"Cancelar"},"assistant_block_element":{"message":"Bloquear un elemento"},"assistant_block_element_explain":{"message":"Crea una regla de bloqueo de elementos"},"assistant_slider_explain":{"message":"Mueve el control deslizante para ajustar el tamaño del marco"},"assistant_extended_settings":{"message":"Configuración avanzada"},"assistant_apply_rule_to_all_sites":{"message":"Aplicar la regla a todos los sitios web"},"assistant_block_by_reference":{"message":"Bloquear por enlace de referencia"},"assistant_block_similar":{"message":"Bloquear elemento similar"},"assistant_another_element":{"message":"Seleccionar otro elemento"},"assistant_preview":{"message":"Vista previa"},"assistant_block":{"message":"Bloquear"},"assistant_settings":{"message":"Configuración del asistente"},"assistant_preview_header":{"message":"Vista previa del elemento bloqueado"},"assistant_preview_header_info":{"message":"Verifica si el elemento está bloqueado correctamente"},"assistant_preview_end":{"message":"Salir de vista previa"},"wot_unknown_description":{"message":"La reputación de este sitio web no está definida por $1"},"wot_bad_description":{"message":"Este sitio web tiene muy mala reputación\\nde acuerdo a $1"},"wot_poor_description":{"message":"Este sitio web tiene mala reputación\\nde acuerdo a $1"},"wot_unsatisfactory_description":{"message":"Este sitio web tiene pobre reputación\\nde acuerdo a $1"},"wot_good_description":{"message":"Este sitio web tiene buena reputación\\nde acuerdo a $1"},"wot_excellent_description":{"message":"Este sitio web tiene excelente reputación\\nde acuerdo a $1"},"settings_choose_size_and_position":{"message":"Ajustar el tamaño y la posición del Asistente de AdGuard"},"settings_icon_size":{"message":"Tamaño del icono:"},"settings_small":{"message":"Pequeño"},"settings_big":{"message":"Grande"},"settings_position":{"message":"Posición:"},"settings_left_top":{"message":"Arriba a la izquierda"},"settings_right_top":{"message":"Arriba a la derecha"},"settings_left_bottom":{"message":"Abajo a la izquierda"},"settings_right_bottom":{"message":"Abajo a la derecha"},"settings_cancel":{"message":"Cancelar"},"settings_save":{"message":"Guardar cambios"}}'); + +/***/ }, + +/***/ 4682 +(module) { + +"use strict"; +module.exports = /*#__PURE__*/JSON.parse('{"extension":{"assistant":{"name":"Asistente de Adguard","description":"Permite fácilmente administrar el filtrado directamente desde el navegador"}}}'); + +/***/ }, + +/***/ 356 +(module) { + +"use strict"; +module.exports = /*#__PURE__*/JSON.parse('{"settings_position_save":"وبسایت","settings_position_save_all":"همه وبسایت ها","settings_position_save_this":"این وبسایت","assistant_select_element_start":"شروع","assistant_select_element_text":"عنصری در صفحه برای مسدودسازی انتخاب کنید. برای لغو،صفحه را رفرش کنید.","menu_filtration_status":{"message":"فیلترینگ در این وبسایت"},"menu_do_not_filter_30_sec":{"message":"به مدت 30 ثانیه فیلتر نکن"},"menu_block_ad_on_site":{"message":"مسدودسازی تبلیغ در این وبسایت"},"menu_report_abuse":{"message":"گزارش وبسایت"},"menu_site_report":{"message":"گزارش امنیتی وبسایت"},"menu_settings":{"message":"تنظیمات دستیار"},"menu_wot_reputation_indicator":{"message":"نشانگر اعتبار سایت"},"menu_wot_reputation_confidence_level":{"message":"سطح اعتبار"},"assistant_select_element":{"message":"مسدودسازی یک عنصر"},"assistant_select_element_ext":{"message":"روی اجزایی که می‌خواهید مسدود کنید کلیک کنید. AdGuard یک رویهٔ کاربر برای آن ایجاد خواهد کرد."},"assistant_select_element_cancel":{"message":"لغو"},"assistant_block_element":{"message":"مسدودسازی یک عنصر"},"assistant_block_element_explain":{"message":"ایجاد یک رویهٔ مسدودسازی اجزاء"},"assistant_slider_explain":{"message":"اسلایدر را جابه‌جا کنید تا اندازه قاب را تنظیم کنید."},"assistant_extended_settings":{"message":"تنظیمات پیشرفته"},"assistant_apply_rule_to_all_sites":{"message":"اِعمال دستور در همه وبسایت ها"},"assistant_block_by_reference":{"message":"مسدودسازی با لینک مرجع"},"assistant_block_similar":{"message":"مسدودسازی مشابه"},"assistant_another_element":{"message":"عنصر دیگری انتخاب کنید"},"assistant_preview":{"message":"پیشنمایش"},"assistant_block":{"message":"مسدود"},"assistant_settings":{"message":"تنظیمات دستیار"},"assistant_preview_header":{"message":"پیش‌نمایش اجزاء مسدود شده"},"assistant_preview_header_info":{"message":"بررسی کنید که آیا جزء به درستی مسدود شده است یا خیر"},"assistant_preview_end":{"message":"خروج از پیشنمایش"},"wot_unknown_description":{"message":"اعتبار تعریف نشده است"},"wot_bad_description":{"message":"این وبسایت اعتبار خیلی بدی دارد\\nبر طبق "},"wot_poor_description":{"message":"این وبسایت اعتبار بدی دارد\\nبر طبق "},"wot_unsatisfactory_description":{"message":"این وبسایت اعتبار کمی دارد\\nبر طبق "},"wot_good_description":{"message":"این وبسایت اعتبار خوبی دارد\\nبر طبق "},"wot_excellent_description":{"message":"این وبسایت اعتبار عالی دارد\\nبر طبق "},"settings_choose_size_and_position":{"message":"تنظیم اندازه و موقعیت دستیار AdGuard"},"settings_icon_size":{"message":"اندازه آیکون:"},"settings_small":{"message":"کوچک"},"settings_big":{"message":"بزرگ"},"settings_position":{"message":"موقعیت:"},"settings_left_top":{"message":"بالا سمت چپ"},"settings_right_top":{"message":"بالا سمت راست"},"settings_left_bottom":{"message":"پایین سمت چپ"},"settings_right_bottom":{"message":"پایین سمت راست"},"settings_cancel":{"message":"لغو"},"settings_save":{"message":"ذخیره تغییرات"}}'); + +/***/ }, + +/***/ 563 +(module) { + +"use strict"; +module.exports = /*#__PURE__*/JSON.parse('{"extension":{"assistant":{"name":"دستیار AdGuard","description":"روش راحت و آسان برای مدیریت فیلترینگ مستیق از داخل مرورگر."}}}'); + +/***/ }, + +/***/ 7804 +(module) { + +"use strict"; +module.exports = /*#__PURE__*/JSON.parse('{"settings_position_save":"Sivustot","settings_position_save_all":"Kaikki sivustot","settings_position_save_this":"Tämä sivusto","assistant_select_element_start":"Aloita","assistant_select_element_text":"Valitse sivulta estettävä elementti. Päivitä sivu poistuaksesi elementtien estotilasta.","menu_filtration_status":{"message":"Tämän sivuston suodatus"},"menu_do_not_filter_30_sec":{"message":"Pysäytä suodatus 30 sekunnin ajaksi"},"menu_block_ad_on_site":{"message":"Estä mainos tältä sivustolta"},"menu_report_abuse":{"message":"Ilmoita ongelmasta"},"menu_site_report":{"message":"Sivuston suojausraportti"},"menu_settings":{"message":"Apurin asetukset"},"menu_wot_reputation_indicator":{"message":"Sivuston maine"},"menu_wot_reputation_confidence_level":{"message":"Mainearvion luotettavuus"},"assistant_select_element":{"message":"Estä elementti"},"assistant_select_element_ext":{"message":"Klikkaa elementtiä, jonka haluat estää. AdGuard luo sille käyttäjäsäännön"},"assistant_select_element_cancel":{"message":"Peruuta"},"assistant_block_element":{"message":"Estä elementti"},"assistant_block_element_explain":{"message":"Luo elementin estämissääntö"},"assistant_slider_explain":{"message":"Säädä kehyksen kokoa siirtämällä liukusäädintä"},"assistant_extended_settings":{"message":"Lisäasetukset"},"assistant_apply_rule_to_all_sites":{"message":"Käytä kaikilla sivustoilla"},"assistant_block_by_reference":{"message":"Estä viitelinkillä"},"assistant_block_similar":{"message":"Estä samankaltaiset"},"assistant_another_element":{"message":"Valitse eri elementti"},"assistant_preview":{"message":"Esikatselu"},"assistant_block":{"message":"Estä"},"assistant_settings":{"message":"Apurin asetukset"},"assistant_preview_header":{"message":"Esikatselu estetty elementti"},"assistant_preview_header_info":{"message":"Tarkista, onko elementti lukittu oikein"},"assistant_preview_end":{"message":"Sulje esikatselu"},"wot_unknown_description":{"message":"$1 ei tarjoa sivustolle mainearviointia"},"wot_bad_description":{"message":"$1 arvioinnin mukaan sivustolla on erittäin huono maine"},"wot_poor_description":{"message":"$1 arvioinnin mukaan sivustolla on huono maine"},"wot_unsatisfactory_description":{"message":"$1 arvioinnin mukaan sivustolla on heikko maine"},"wot_good_description":{"message":"$1 arvioinnin mukaan sivustolla on hyvä maine"},"wot_excellent_description":{"message":"$1 arvioinnin mukaan sivustolla on erinomainen maine"},"settings_choose_size_and_position":{"message":"Säädä AdGuard Avustajan kokoa ja sijaintia"},"settings_icon_size":{"message":"Kuvakkeen koko:"},"settings_small":{"message":"Pieni"},"settings_big":{"message":"Suuri"},"settings_position":{"message":"Sijainti:"},"settings_left_top":{"message":"Ylhäällä vasemmalla"},"settings_right_top":{"message":"Ylhäällä oikealla"},"settings_left_bottom":{"message":"Alhaalla vasemmalla"},"settings_right_bottom":{"message":"Alhaalla oikealla"},"settings_cancel":{"message":"Peruuta"},"settings_save":{"message":"Tallenna muutokset"}}'); + +/***/ }, + +/***/ 3787 +(module) { + +"use strict"; +module.exports = /*#__PURE__*/JSON.parse('{"extension":{"assistant":{"name":"AdGuard Avustaja","description":"Voit muutta hiljattain käyttämiesi sovellusten ja verkkosivujen suodatusasetuksia kätevästi suoraan selaimesta."}}}'); + +/***/ }, + +/***/ 9335 +(module) { + +"use strict"; +module.exports = /*#__PURE__*/JSON.parse('{"settings_position_save":"Sites web","settings_position_save_all":"Tous les sites web","settings_position_save_this":"Ce site web","assistant_select_element_start":"Démarrer","assistant_select_element_text":"Choisissez un élément de la page à bloquer. Pour afficher l\'élément de nouveau, rafraîchissez la page.","menu_filtration_status":{"message":"Filtrages sur ce site"},"menu_do_not_filter_30_sec":{"message":"Ne pas filtrer pendant 30 secondes "},"menu_block_ad_on_site":{"message":"Blocage des annonces sur ce site "},"menu_report_abuse":{"message":"Signaler le site"},"menu_site_report":{"message":"Rapport de sécurité du site"},"menu_settings":{"message":"Réglages de l\'Assistant AdGuard"},"menu_wot_reputation_indicator":{"message":"Indice de réputation du site"},"menu_wot_reputation_confidence_level":{"message":"Niveau de confiance"},"assistant_select_element":{"message":"Bloquer un élément"},"assistant_select_element_ext":{"message":"Cliquez sur l\'élément à bloquer. AdGuard créera une règle utilisateur pour cet élément"},"assistant_select_element_cancel":{"message":"Annuler"},"assistant_block_element":{"message":"Bloquer un élément"},"assistant_block_element_explain":{"message":"Créer une règle de blocage d\'élément"},"assistant_slider_explain":{"message":"Déplacez le curseur pour ajuster la taille du cadre"},"assistant_extended_settings":{"message":"Paramétrages avancés "},"assistant_apply_rule_to_all_sites":{"message":"Appliquer la règle à tous les sites"},"assistant_block_by_reference":{"message":"Blocage par liens de reference"},"assistant_block_similar":{"message":"Blocage des objets similaires "},"assistant_another_element":{"message":"Sélectionner un élément différent"},"assistant_preview":{"message":"Previsualisation "},"assistant_block":{"message":"Blocage "},"assistant_settings":{"message":"Réglages de l\'Assistant AdGuard"},"assistant_preview_header":{"message":"Aperçu de l\'élément bloqué"},"assistant_preview_header_info":{"message":"Vérifiez si l\'élément est correctement bloqué"},"assistant_preview_end":{"message":"Sortir de la previsualisation "},"wot_unknown_description":{"message":"La définition de la réputation de ce site web n\'est pas définie par $1"},"wot_bad_description":{"message":"Ce site web a très mauvaise réputation selon $1"},"wot_poor_description":{"message":"Ce site web a mauvaise réputation selon $1"},"wot_unsatisfactory_description":{"message":"Ce site web a une reputation médiocre selon $1"},"wot_good_description":{"message":"Ce site a bonne réputation selon $1"},"wot_excellent_description":{"message":"Ce site a une réputation excellente selon $1"},"settings_choose_size_and_position":{"message":"Affiner la taille et la position de l\'assistant AdGuard "},"settings_icon_size":{"message":"Taille de l\'icone"},"settings_small":{"message":"Petite"},"settings_big":{"message":"Grande"},"settings_position":{"message":"Positionnement"},"settings_left_top":{"message":"En haut à gauche"},"settings_right_top":{"message":"En haut à droite"},"settings_left_bottom":{"message":"En bas à gauche"},"settings_right_bottom":{"message":"En bas à droite "},"settings_cancel":{"message":"Annuler"},"settings_save":{"message":"Sauvegarder les modifications "}}'); + +/***/ }, + +/***/ 4818 +(module) { + +"use strict"; +module.exports = /*#__PURE__*/JSON.parse('{"extension":{"assistant":{"name":"Assistant AdGuard ","description":"Fournit un moyen simple et pratique de gérer le filtrage directement depuis le navigateur"}}}'); + +/***/ }, + +/***/ 4314 +(module) { + +"use strict"; +module.exports = /*#__PURE__*/JSON.parse('{"settings_position_save":"אתרים","settings_position_save_all":"כל האתרים","settings_position_save_this":"האתר הזה","assistant_select_element_start":"התחל","assistant_select_element_text":".בחר אלמנט בדף לחסימה .רענן את הדף כדי לבטל את מצב חסימת האלמנטים","menu_filtration_status":{"message":"סינון באתר זה"},"menu_do_not_filter_30_sec":{"message":"אל תסנן למשך 30 שניות"},"menu_block_ad_on_site":{"message":"חסום פרסומת באתר זה"},"menu_report_abuse":{"message":"דווח על האתר"},"menu_site_report":{"message":"דוח אבטחת אתר"},"menu_settings":{"message":"הגדרות המסייע"},"menu_wot_reputation_indicator":{"message":"מד של מוניטין אתרים"},"menu_wot_reputation_confidence_level":{"message":"רמת אמון מוניטין"},"assistant_select_element":{"message":"חסום אלמנט"},"assistant_select_element_ext":{"message":"לחץ על רכיב שברצונך לחסום. AdGuard ייצור עבורו כלל משתמש."},"assistant_select_element_cancel":{"message":"בטל"},"assistant_block_element":{"message":"חסום אלמנט"},"assistant_block_element_explain":{"message":"צור כלל לחסימת אלמנט"},"assistant_slider_explain":{"message":"הזז את המחוון כדי להתאים את גודל המסגרת"},"assistant_extended_settings":{"message":"הגדרות מתקדמות"},"assistant_apply_rule_to_all_sites":{"message":"החל את הכלל בכל האתרים"},"assistant_block_by_reference":{"message":"חסום לפי קישור הפניה"},"assistant_block_similar":{"message":"חסום דומה"},"assistant_another_element":{"message":"בחר אלמנט אחר"},"assistant_preview":{"message":"הצג מראש"},"assistant_block":{"message":"חסום"},"assistant_settings":{"message":"הגדרות המסייע"},"assistant_preview_header":{"message":"תצוגה מקדימה של אלמנט חסום"},"assistant_preview_header_info":{"message":"בדוק אם האלמנט חסום כראוי"},"assistant_preview_end":{"message":"צא מתצוגה מקדימה"},"wot_unknown_description":{"message":"המוניטין של אתר זה אינו מוגדר על ידי $1"},"wot_bad_description":{"message":"לאתר זה יש מוניטין רע מאוד\\nעל פי $1"},"wot_poor_description":{"message":"לאתר זה יש מוניטין רע \\nעל פי $1"},"wot_unsatisfactory_description":{"message":"לאתר זה יש מוניטין ירוד\\nעל פי $1"},"wot_good_description":{"message":"לאתר זה יש מוניטין טוב\\nעל פי $1"},"wot_excellent_description":{"message":"לאתר זה יש מוניטין מצויין\\nעל פי $1"},"settings_choose_size_and_position":{"message":"התאם גודל ומיקום של מסייע AdGuard"},"settings_icon_size":{"message":"גודל איקון:"},"settings_small":{"message":"קטן"},"settings_big":{"message":"גדול"},"settings_position":{"message":"מיקום:"},"settings_left_top":{"message":"בחלק העליון משמאל"},"settings_right_top":{"message":"בחלק העליון מימין"},"settings_left_bottom":{"message":"צד שמאל למטה"},"settings_right_bottom":{"message":"צד ימין למטה"},"settings_cancel":{"message":"בטל"},"settings_save":{"message":"שמור שינויים"}}'); + +/***/ }, + +/***/ 7241 +(module) { + +"use strict"; +module.exports = /*#__PURE__*/JSON.parse('{"extension":{"assistant":{"name":"העוזר האישי של אדגארד","description":"מספק דרך קלה ונוחה לנהל סינון תקין ישירות מהדפדפן"}}}'); + +/***/ }, + +/***/ 8158 +(module) { + +"use strict"; +module.exports = /*#__PURE__*/JSON.parse('{"assistant_select_element_cancel":{"message":"रद्द करें"},"assistant_extended_settings":{"message":"उन्नत सेटिंग"},"assistant_block":{"message":"अवरुद्ध"},"settings_icon_size":{"message":"आइकन का आकार:"},"settings_small":{"message":"छोटा"},"settings_big":{"message":"बड़ा"},"settings_cancel":{"message":"रद्द करें"}}'); + +/***/ }, + +/***/ 6837 +(module) { + +"use strict"; +module.exports = /*#__PURE__*/JSON.parse('{"extension":{"assistant":{"name":"AdGuard सहायक","description":""}}}'); + +/***/ }, + +/***/ 1733 +(module) { + +"use strict"; +module.exports = /*#__PURE__*/JSON.parse('{"settings_position_save":"Web stranice","settings_position_save_all":"Sve web stranice","settings_position_save_this":"Ova web stranica","assistant_select_element_start":"Započni","assistant_select_element_text":"Odaberite element na stranici za blokiranje. Osvježite stranicu za izlazak iz načina blokade elemenata.","menu_filtration_status":{"message":"Filtriranje na ovoj web stranici"},"menu_do_not_filter_30_sec":{"message":"Ne filtriraj idućih 30 sekundi"},"menu_block_ad_on_site":{"message":"Blokiraj oglas na ovoj web stranici"},"menu_report_abuse":{"message":"Prijavi ovu stranicu"},"menu_site_report":{"message":"Sigurnosni izvještaj stranice"},"menu_settings":{"message":"Postavke pomoćnika"},"menu_wot_reputation_indicator":{"message":"Indikator reputacije stranice"},"menu_wot_reputation_confidence_level":{"message":"Razina povjerenja reputacije"},"assistant_select_element":{"message":"Blokiraj element"},"assistant_select_element_ext":{"message":"Kliknite element koji želite blokirati. AdGuard će za to stvoriti korisničko pravilo"},"assistant_select_element_cancel":{"message":"Poništi"},"assistant_block_element":{"message":"Blokiraj element"},"assistant_block_element_explain":{"message":"Izradite pravilo za blokiranje elemenata"},"assistant_slider_explain":{"message":"Pomaknite klizač za podešavanje veličine okvira"},"assistant_extended_settings":{"message":"Napredne postavke"},"assistant_apply_rule_to_all_sites":{"message":"Primjeni pravilo na sve web stranice"},"assistant_block_by_reference":{"message":"Blokiraj referentnom vezom"},"assistant_block_similar":{"message":"Blokiraj slične"},"assistant_another_element":{"message":"Odaberite drugi element"},"assistant_preview":{"message":"Pregled"},"assistant_block":{"message":"Blokiraj"},"assistant_settings":{"message":"Postavke pomoćnika"},"assistant_preview_header":{"message":"Pregled blokiranog elementa"},"assistant_preview_header_info":{"message":"Provjerite je li element ispravno blokiran"},"assistant_preview_end":{"message":"Izlaz iz pregleda"},"wot_unknown_description":{"message":"Reputaciju stranice nije odredio $1"},"wot_bad_description":{"message":"Web stranica ima jako lošu reputaciju \\nprema $1"},"wot_poor_description":{"message":"Web stranica ima lošu reputaciju \\nprema $1"},"wot_unsatisfactory_description":{"message":"Web stranica ima lošu reputaciju \\nprema $1"},"wot_good_description":{"message":"Web stranica ima dobru reputaciju \\nprema $1"},"wot_excellent_description":{"message":"Web stranica ima odličnu reputaciju \\nprema $1"},"settings_choose_size_and_position":{"message":"Podesite veličinu i poziciju AdGuard Pomoćnika"},"settings_icon_size":{"message":"Veličina ikone:"},"settings_small":{"message":"Malo"},"settings_big":{"message":"Veliko"},"settings_position":{"message":"Pozicija:"},"settings_left_top":{"message":"Gore lijevo"},"settings_right_top":{"message":"Gore desno"},"settings_left_bottom":{"message":"Dolje lijevo"},"settings_right_bottom":{"message":"Dolje desno"},"settings_cancel":{"message":"Poništi"},"settings_save":{"message":"Spremi promjene"}}'); + +/***/ }, + +/***/ 1912 +(module) { + +"use strict"; +module.exports = /*#__PURE__*/JSON.parse('{"extension":{"assistant":{"name":"AdGuard Pomoćnik","description":"Pruža jednostavan i praktičan način upravljanja filtriranjem izravno iz preglednika"}}}'); + +/***/ }, + +/***/ 4890 +(module) { + +"use strict"; +module.exports = /*#__PURE__*/JSON.parse('{"settings_position_save":"Weboldalak","settings_position_save_all":"Minden weboldal","settings_position_save_this":"Ez a weboldal","assistant_select_element_start":"Indítás","assistant_select_element_text":"Válassza ki az elemet az oldalon, amit blokkolni szeretne. Frissítse az oldalt, hogy kilépjen az elemblokkoló módból.","menu_filtration_status":{"message":"Szűrés ezen a weboldalon"},"menu_do_not_filter_30_sec":{"message":"Szüneteltetés 30 másodpercig"},"menu_block_ad_on_site":{"message":"Hirdetés blokkolása ezen a weboldalon"},"menu_report_abuse":{"message":"Weboldal jelentése"},"menu_site_report":{"message":"Weboldal biztonsági jelentése"},"menu_settings":{"message":"Asszisztens beállításai"},"menu_wot_reputation_indicator":{"message":"A webhely hírnevének mutatója"},"menu_wot_reputation_confidence_level":{"message":"A hírnév bizalmi szintje"},"assistant_select_element":{"message":"Elem blokkolása"},"assistant_select_element_ext":{"message":"Kattintson a blokkolni kívánt elemre. Az AdGuard létrehoz egy felhasználói szabályt"},"assistant_select_element_cancel":{"message":"Mégse"},"assistant_block_element":{"message":"Elem blokkolása"},"assistant_block_element_explain":{"message":"Elemblokkoló szabály létrehozása"},"assistant_slider_explain":{"message":"Mozgassa a csúszkát a keret méretének beállításához"},"assistant_extended_settings":{"message":"Haladó beállítások"},"assistant_apply_rule_to_all_sites":{"message":"Szabály alkalmazása az összes weboldalra"},"assistant_block_by_reference":{"message":"Blokkolás link alapján"},"assistant_block_similar":{"message":"Hasonlók blokkolása"},"assistant_another_element":{"message":"Másik elem választása"},"assistant_preview":{"message":"Előnézet"},"assistant_block":{"message":"Blokkolás"},"assistant_settings":{"message":"Asszisztens beállításai"},"assistant_preview_header":{"message":"Blokkolt elem előnézete"},"assistant_preview_header_info":{"message":"Ellenőrizze, hogy az elem helyesen lett-e letiltva"},"assistant_preview_end":{"message":"Kilépés az előnézetből"},"wot_unknown_description":{"message":"Ez a weboldal nincs nyilvántartva a $1 alapján"},"wot_bad_description":{"message":"Ennek a weboldalnak nagyon rossz a megítélése a $1 alapján"},"wot_poor_description":{"message":"Ennek a weboldalnak rossz a megítélése a $1 alapján"},"wot_unsatisfactory_description":{"message":"Ennek a weboldalnak gyenge a megítélése a $1 alapján"},"wot_good_description":{"message":"Ennek a weboldalnak jó a megítélése a $1 alapján"},"wot_excellent_description":{"message":"Ennek a weboldalnak kitűnő a megítélése a $1 alapján"},"settings_choose_size_and_position":{"message":"Állítsa be az AdGuard Assistant méretét és pozícióját"},"settings_icon_size":{"message":"Ikon mérete:"},"settings_small":{"message":"Kicsi"},"settings_big":{"message":"Nagy"},"settings_position":{"message":"Pozíció:"},"settings_left_top":{"message":"Bal felül"},"settings_right_top":{"message":"Jobb felül"},"settings_left_bottom":{"message":"Bal alul"},"settings_right_bottom":{"message":"Jobb alul"},"settings_cancel":{"message":"Mégse"},"settings_save":{"message":"Változások mentése"}}'); + +/***/ }, + +/***/ 9097 +(module) { + +"use strict"; +module.exports = /*#__PURE__*/JSON.parse('{"extension":{"assistant":{"name":"AdGuard Asszisztens","description":"Könnyű és kényelmes módot kínál a szűrés kezelésére közvetlenül a böngészőből"}}}'); + +/***/ }, + +/***/ 940 +(module) { + +"use strict"; +module.exports = /*#__PURE__*/JSON.parse('{"settings_position_save":"Situs web","settings_position_save_all":"Semua situs web","settings_position_save_this":"Situs web ini","assistant_select_element_start":"Mulai","assistant_select_element_text":"Pilih elemen di halaman untuk diblokir. Segarkan halaman untuk membatalkan mode pemblokiran elemen.","menu_filtration_status":{"message":"Penyaringan di situs ini"},"menu_do_not_filter_30_sec":{"message":"Nonaktifkan penyaring untuk 30 detik"},"menu_block_ad_on_site":{"message":"Blokir iklan di situs ini"},"menu_report_abuse":{"message":"Laporkan situs"},"menu_site_report":{"message":"Laporan keamanan situs"},"menu_settings":{"message":"Pengaturan Asisten"},"menu_wot_reputation_indicator":{"message":"Indikator reputasi situs"},"menu_wot_reputation_confidence_level":{"message":"Tingkat Keyakinan Reputasi"},"assistant_select_element":{"message":"Blokir elemen"},"assistant_select_element_ext":{"message":"Klik elemen yang ingin Anda blokir. AdGuard akan membuat aturan pengguna untuk itu"},"assistant_select_element_cancel":{"message":"Batalkan"},"assistant_block_element":{"message":"Blokir elemen"},"assistant_block_element_explain":{"message":"Buat aturan pemblokiran elemen"},"assistant_slider_explain":{"message":"Pindahkan penggeser untuk menyesuaikan ukuran bingkai"},"assistant_extended_settings":{"message":"Pengaturan lanjutan"},"assistant_apply_rule_to_all_sites":{"message":"Aktifkan aturan untuk seluruh situs"},"assistant_block_by_reference":{"message":"Blok berdasarkan referensi situs"},"assistant_block_similar":{"message":"Blok semacamnya"},"assistant_another_element":{"message":"Pilih elemen lainnya"},"assistant_preview":{"message":"Pratinjau"},"assistant_block":{"message":"Blokir"},"assistant_settings":{"message":"Pengaturan Asisten"},"assistant_preview_header":{"message":"Pratinjau elemen yang diblokir"},"assistant_preview_header_info":{"message":"Periksa apakah elemen diblokir dengan benar"},"assistant_preview_end":{"message":"Keluar pratinjau"},"wot_unknown_description":{"message":"Reputasi tidak terdefinisi"},"wot_bad_description":{"message":"Situs ini mempunyai reputasi sangat buruk\\nberdasarkan $1"},"wot_poor_description":{"message":"Situs ini mempunyai reputasi buruk\\nberdasarkan $1"},"wot_unsatisfactory_description":{"message":"Situs ini mempunyai reputasi biasa \\nberdasarkan $1"},"wot_good_description":{"message":"Situs ini mempunyai reputasi baik \\nberdasarkan $1"},"wot_excellent_description":{"message":"Situs ini mempunyai reputasi sempurna \\nberdasarkan $1"},"settings_choose_size_and_position":{"message":"Atur ukuran dan posisi AdGuard Assistant"},"settings_icon_size":{"message":"Ukuran ikon:"},"settings_small":{"message":"Kecil"},"settings_big":{"message":"Besar"},"settings_position":{"message":"Posisi:"},"settings_left_top":{"message":"Atas kiri"},"settings_right_top":{"message":"Atas kanan"},"settings_left_bottom":{"message":"Bawah kiri"},"settings_right_bottom":{"message":"Bawah kanan"},"settings_cancel":{"message":"Batal"},"settings_save":{"message":"Simpan perubahan"}}'); + +/***/ }, + +/***/ 9083 +(module) { + +"use strict"; +module.exports = /*#__PURE__*/JSON.parse('{"extension":{"assistant":{"name":"Asisten AdGuard","description":"Menyediakan cara mudah dan nyaman untuk mengelola penyaringan langsung dari peramban"}}}'); + +/***/ }, + +/***/ 5468 +(module) { + +"use strict"; +module.exports = /*#__PURE__*/JSON.parse('{"settings_position_save":"Siti","settings_position_save_all":"Tutti i siti","settings_position_save_this":"Questo sito web","assistant_select_element_start":"Inizio","assistant_select_element_text":"Seleziona un elemento nella pagina per bloccarlo. Ricarica la pagina per annullare la modalità di blocco di un elemento.","menu_filtration_status":{"message":"Filtraggio su questo sito web"},"menu_do_not_filter_30_sec":{"message":"Non filtrare per 30 secondi"},"menu_block_ad_on_site":{"message":"Blocca annunci su questo sito web"},"menu_report_abuse":{"message":"Segnala il sito"},"menu_site_report":{"message":"Rapporto di sicurezza del sito"},"menu_settings":{"message":"Impostazioni di Assistant"},"menu_wot_reputation_indicator":{"message":"Indicatore reputazione sito"},"menu_wot_reputation_confidence_level":{"message":"Livello della reputazione"},"assistant_select_element":{"message":"Blocca un elemento"},"assistant_select_element_ext":{"message":"Clicca un elemento che vuoi bloccare. AdGuard creerà per esso una regola utente"},"assistant_select_element_cancel":{"message":"Annulla"},"assistant_block_element":{"message":"Blocca un elemento"},"assistant_block_element_explain":{"message":"Crea una regola di bloccaggio elementi"},"assistant_slider_explain":{"message":"Sposta il cursore per regolare la dimensione della cornice"},"assistant_extended_settings":{"message":"Impostazioni avanzate"},"assistant_apply_rule_to_all_sites":{"message":"Applica la regola a tutti i siti"},"assistant_block_by_reference":{"message":"Blocco mediante indirizzo di riferimento"},"assistant_block_similar":{"message":"Blocca simile"},"assistant_another_element":{"message":"Seleziona un altro elemento"},"assistant_preview":{"message":"Anteprima"},"assistant_block":{"message":"Blocca"},"assistant_settings":{"message":"Impostazioni di Assistant"},"assistant_preview_header":{"message":"Anteprima elemento bloccato"},"assistant_preview_header_info":{"message":"Controlla se l\'elemento è bloccato correttamente"},"assistant_preview_end":{"message":"Esci dall\'anteprima"},"wot_unknown_description":{"message":"La reputazione di questo sito web non è definita da $1"},"wot_bad_description":{"message":"Questo sito web ha una pessima reputazione\\nsecondo $1"},"wot_poor_description":{"message":"Questo sito web ha una brutta reputazione\\nsecondo $1"},"wot_unsatisfactory_description":{"message":"Questo sito web ha una mediocre reputazione\\nsecondo $1"},"wot_good_description":{"message":"Questo sito web ha una buona reputazione\\nsecondo $1"},"wot_excellent_description":{"message":"Questo sito web ha una eccellente reputazione\\nsecondo $1"},"settings_choose_size_and_position":{"message":"Regola dimensione e posizione di AdGuard Assistant"},"settings_icon_size":{"message":"Grandezza dell\'icona:"},"settings_small":{"message":"Piccola"},"settings_big":{"message":"Grande"},"settings_position":{"message":"Posizione:"},"settings_left_top":{"message":"In alto a sinistra"},"settings_right_top":{"message":"In alto a destra"},"settings_left_bottom":{"message":"In basso a sinistra"},"settings_right_bottom":{"message":"In basso a destra"},"settings_cancel":{"message":"Annulla"},"settings_save":{"message":"Salva cambiamenti"}}'); + +/***/ }, + +/***/ 7579 +(module) { + +"use strict"; +module.exports = /*#__PURE__*/JSON.parse('{"extension":{"assistant":{"name":"AdGuard Assistant","description":"Fornisce un modo facile e comodo per gestire il filtraggio direttamente dal browser"}}}'); + +/***/ }, + +/***/ 1080 +(module) { + +"use strict"; +module.exports = /*#__PURE__*/JSON.parse('{"settings_position_save":"ウェブサイト","settings_position_save_all":"すべてのウェブサイト","settings_position_save_this":"このウェブサイト","assistant_select_element_start":"開始","assistant_select_element_text":"ブロックするページ上の要素を選択してください。 ページを更新し要素のブロックモードを解除します。","menu_filtration_status":{"message":"このウェブサイトをフィルタリング"},"menu_do_not_filter_30_sec":{"message":"30秒間フィルタリングしない"},"menu_block_ad_on_site":{"message":"このサイトで広告を手動ブロックする"},"menu_report_abuse":{"message":"このサイトの問題を報告する"},"menu_site_report":{"message":"ウェブサイトのセキュリティレポート"},"menu_settings":{"message":"アシスタントの設定"},"menu_wot_reputation_indicator":{"message":"ウェブサイトの評価基準"},"menu_wot_reputation_confidence_level":{"message":"評判の信頼度(Reputation Confidence Level)"},"assistant_select_element":{"message":"手動で要素をブロック"},"assistant_select_element_ext":{"message":"ブロックしたい要素をクリックしてください。AdGuardがその要素に対してユーザールールを作成します。"},"assistant_select_element_cancel":{"message":"キャンセル"},"assistant_block_element":{"message":"手動で要素をブロック"},"assistant_block_element_explain":{"message":"要素のブロックルールを作成します。"},"assistant_slider_explain":{"message":"スライダーを移動してフレームのサイズを調整してください:"},"assistant_extended_settings":{"message":"高度な設定"},"assistant_apply_rule_to_all_sites":{"message":"全てのウェブサイトにこのルールを適用"},"assistant_block_by_reference":{"message":"参照リンクによるブロック"},"assistant_block_similar":{"message":"類似項目をブロック"},"assistant_another_element":{"message":"他の要素を選択"},"assistant_preview":{"message":"プレビュー"},"assistant_block":{"message":"ブロック"},"assistant_settings":{"message":"アシスタントの設定"},"assistant_preview_header":{"message":"要素ブロック後の画面プレビューを確認する"},"assistant_preview_header_info":{"message":"画面プレビューで要素が思い通りにブロックされているかを確認してください。"},"assistant_preview_end":{"message":"プレビューを終了"},"wot_unknown_description":{"message":"評判が定義されていません"},"wot_bad_description":{"message":"このウェブサイトは非常に評判が悪いです: "},"wot_poor_description":{"message":"このウェブサイトは評判が悪いです: "},"wot_unsatisfactory_description":{"message":"このウェブサイトは評判がやや悪いです: "},"wot_good_description":{"message":"このウェブサイトは評判が良いです: "},"wot_excellent_description":{"message":"このウェブサイトはとても評判が良いです: "},"settings_choose_size_and_position":{"message":"AdGuardアシスタントのサイズと位置を調整する"},"settings_icon_size":{"message":"アイコンの大きさ:"},"settings_small":{"message":"小"},"settings_big":{"message":"大"},"settings_position":{"message":"位置:"},"settings_left_top":{"message":"左上"},"settings_right_top":{"message":"右上"},"settings_left_bottom":{"message":"左下"},"settings_right_bottom":{"message":"右下"},"settings_cancel":{"message":"キャンセル"},"settings_save":{"message":"設定を保存"}}'); + +/***/ }, + +/***/ 9727 +(module) { + +"use strict"; +module.exports = /*#__PURE__*/JSON.parse('{"extension":{"assistant":{"name":"AdGuardアシスタント","description":"ブラウザから簡単にフィルタリングを管理する便利な機能を提供します。"}}}'); + +/***/ }, + +/***/ 1973 +(module) { + +"use strict"; +module.exports = /*#__PURE__*/JSON.parse('{"settings_position_save":"웹사이트","settings_position_save_all":"모든 웹사이트","settings_position_save_this":"이 웹사이트","assistant_select_element_start":"시작","assistant_select_element_text":"페이지에서 차단할 요소를 선택하세요. 요소 차단 모드를 취소하려면 페이지를 새로 고침하세요.","menu_filtration_status":{"message":"이 웹사이트에서의 보호"},"menu_do_not_filter_30_sec":{"message":"30초 동안 차단 일시정지"},"menu_block_ad_on_site":{"message":"이 웹사이트에서 광고 차단"},"menu_report_abuse":{"message":"이 웹사이트에 관한 불만 사항 제출"},"menu_site_report":{"message":"웹사이트 보안 보고"},"menu_settings":{"message":"어시스턴트 설정"},"menu_wot_reputation_indicator":{"message":"웹사이트 평판 표시기"},"menu_wot_reputation_confidence_level":{"message":"평판 신뢰 수준"},"assistant_select_element":{"message":"요소 차단"},"assistant_select_element_ext":{"message":"차단하려는 요소를 클릭합니다. AdGuard가 해당 요소에 대한 사용자 규칙을 생성합니다."},"assistant_select_element_cancel":{"message":"선택 모드 취소"},"assistant_block_element":{"message":"요소 차단"},"assistant_block_element_explain":{"message":"요소 차단 규칙을 생성하세요."},"assistant_slider_explain":{"message":"슬라이더를 움직여 프레임 크기를 조정합니다."},"assistant_extended_settings":{"message":"고급 설정"},"assistant_apply_rule_to_all_sites":{"message":"모든 웹사이트에 이 규칙 적용"},"assistant_block_by_reference":{"message":"참조 링크가 차단"},"assistant_block_similar":{"message":"유사한 요소 차단"},"assistant_another_element":{"message":"다른 요소 선택"},"assistant_preview":{"message":"미리 보기"},"assistant_block":{"message":"차단"},"assistant_settings":{"message":"어시스턴트 설정"},"assistant_preview_header":{"message":"차단된 요소 미리보기"},"assistant_preview_header_info":{"message":"요소가 올바르게 차단되었는지 확인하세요."},"assistant_preview_end":{"message":"미리 보기 종료"},"wot_unknown_description":{"message":"평판이 등록되지 않았습니다."},"wot_bad_description":{"message":"이 웹사이트는 아주 나쁜 평판을 갖고 있습니다.\\n제공 "},"wot_poor_description":{"message":"이 웹사이트는 나쁜 평판을 갖고 있습니다.\\n제공 "},"wot_unsatisfactory_description":{"message":"이 웹사이트는 좋지 않은 평판을 갖고 있습니다.\\n제공 "},"wot_good_description":{"message":"이 웹사이트는 좋은 평판을 갖고 있습니다.\\n제공 "},"wot_excellent_description":{"message":"이 웹사이트는 아주 좋은 평판을 갖고 있습니다.\\n제공 "},"settings_choose_size_and_position":{"message":"AdGuard 어시스턴트 크기와 위치를 조정합니다"},"settings_icon_size":{"message":"아이콘 크기:"},"settings_small":{"message":"작게"},"settings_big":{"message":"크게"},"settings_position":{"message":"위치:"},"settings_left_top":{"message":"왼쪽 위"},"settings_right_top":{"message":"오른쪽 위"},"settings_left_bottom":{"message":"왼쪽 아래"},"settings_right_bottom":{"message":"오른쪽 아래"},"settings_cancel":{"message":"취소"},"settings_save":{"message":"저장"}}'); + +/***/ }, + +/***/ 8008 +(module) { + +"use strict"; +module.exports = /*#__PURE__*/JSON.parse('{"extension":{"assistant":{"name":"AdGuard 어시스턴트","description":"브라우저에서 바로 필터링 관리를 쉽고 간편하게 할 수 있도록 도와줍니다."}}}'); + +/***/ }, + +/***/ 1295 +(module) { + +"use strict"; +module.exports = /*#__PURE__*/JSON.parse('{"settings_position_save":"Interneto svetainės","settings_position_save_all":"Visos svetainės","settings_position_save_this":"Ši svetainė","assistant_select_element_start":"Pradėti","assistant_select_element_text":"Pasirinkite elementą puslapyje, kurį norite blokuoti. Atnaujinkite puslapį, kad atšauktumėte elementų blokavimo režimą.","menu_filtration_status":{"message":"Filtravimas šioje svetainėje"},"menu_do_not_filter_30_sec":{"message":"Nefiltruoti 30 sekundžių"},"menu_block_ad_on_site":{"message":"Blokuoti reklamą šioje svetainėje"},"menu_report_abuse":{"message":"Pranešti apie svetainę"},"menu_site_report":{"message":"Svetainės saugumo ataskaita"},"menu_settings":{"message":"Asistento nustatymai"},"menu_wot_reputation_indicator":{"message":"Svetainės reputacijos rodiklis"},"menu_wot_reputation_confidence_level":{"message":"Reputacijos pasitikėjimo lygis"},"assistant_select_element":{"message":"Blokuoti elementą"},"assistant_select_element_ext":{"message":"Spustelėkite elementą, kurį norite užblokuoti. \\"AdGuard\\" sukurs vartotojo taisyklę"},"assistant_select_element_cancel":{"message":"Atšaukti"},"assistant_block_element":{"message":"Blokuoti elementą"},"assistant_block_element_explain":{"message":"Sukurti elemento blokavimo taisyklę"},"assistant_slider_explain":{"message":"Perkelkite slankiklį, kad pakoreguotumėte rėmelio dydį"},"assistant_extended_settings":{"message":"Išplėstiniai nustatymai"},"assistant_apply_rule_to_all_sites":{"message":"Pritaikyti taisyklę visoms svetainėms"},"assistant_block_by_reference":{"message":"Blokuoti pagal nuorodą"},"assistant_block_similar":{"message":"Blokuoti panašius"},"assistant_another_element":{"message":"Pasirinkti kitą elementą"},"assistant_preview":{"message":"Peržiūra"},"assistant_block":{"message":"Užblokuoti"},"assistant_settings":{"message":"Asistento nustatymai"},"assistant_preview_header":{"message":"Peržiūrėti užblokuotą elementą"},"assistant_preview_header_info":{"message":"Patikrinkite, ar elementas tinkamai užblokuotas"},"assistant_preview_end":{"message":"Baigti peržiūrą"},"wot_unknown_description":{"message":"Šios svetainės reputacija nėra apibrėžta $1"},"wot_bad_description":{"message":"Ši svetainė turi labai blogą reputaciją\\npagal $1"},"wot_poor_description":{"message":"Ši svetainė turi blogą reputaciją pagal $1"},"wot_unsatisfactory_description":{"message":"Ši svetainė turi prastą reputaciją pagal $1"},"wot_good_description":{"message":"Ši svetainė turi gerą reputaciją pagal $1"},"wot_excellent_description":{"message":"Ši svetainė turi puikią reputaciją pagal $1"},"settings_choose_size_and_position":{"message":"Nustatykite AdGuard Asistento dydį ir padėtį"},"settings_icon_size":{"message":"Piktogramos dydis:"},"settings_small":{"message":"Maža"},"settings_big":{"message":"Didelė"},"settings_position":{"message":"Padėtis:"},"settings_left_top":{"message":"Viršuje kairėje"},"settings_right_top":{"message":"Viršuje dešinėje"},"settings_left_bottom":{"message":"Apačioje kairėje"},"settings_right_bottom":{"message":"Apačioje dešinėje"},"settings_cancel":{"message":"Atšaukti"},"settings_save":{"message":"Išsaugoti pakeitimus"}}'); + +/***/ }, + +/***/ 3994 +(module) { + +"use strict"; +module.exports = /*#__PURE__*/JSON.parse('{"extension":{"assistant":{"name":"AdGuard Asistentas","description":"Suteikia lengvą ir patogų būdą valdyti filtravimą iš naršyklės"}}}'); + +/***/ }, + +/***/ 8463 +(module) { + +"use strict"; +module.exports = /*#__PURE__*/JSON.parse('{"settings_position_save":"Веб-страници","settings_position_save_all":"Сите веб-локации","settings_position_save_this":"Оваа веб-локација","assistant_select_element_start":"Започнете","assistant_select_element_text":"Изберете елемент на страницата за блокирање. Освежете ја страницата за да го откажете режимот за блокирање елементи.","menu_filtration_status":{"message":"Филтрирање на оваа веб-локација"},"menu_do_not_filter_30_sec":{"message":"Не филтрирајте 30 секунди"},"menu_block_ad_on_site":{"message":"Блокирајте ја рекламата на оваа веб-локација"},"menu_report_abuse":{"message":"Пријавете ја веб-страницата"},"menu_site_report":{"message":"Извештај за безбедност на веб-страницата"},"menu_settings":{"message":"Поставки за Помошникот"},"menu_wot_reputation_indicator":{"message":"Индикатор за репутација на локацијата"},"menu_wot_reputation_confidence_level":{"message":"Ниво на доверба на репутацијата"},"assistant_select_element":{"message":"Блокирање на елемент"},"assistant_select_element_ext":{"message":"Кликнете на елемент што сакате да го блокирате. AdGuard ќе создаде корисничко правило"},"assistant_select_element_cancel":{"message":"Откажи"},"assistant_block_element":{"message":"Блокирање на елемент"},"assistant_block_element_explain":{"message":"Креирајте правило за блокирање на елемент"},"assistant_slider_explain":{"message":"Преместете го лизгачот за да ја прилагодите големината на рамката"},"assistant_extended_settings":{"message":"Напредни поставки"},"assistant_apply_rule_to_all_sites":{"message":"Применете го правилото на сите веб-локации"},"assistant_block_by_reference":{"message":"Блокирај по референтен линк"},"assistant_block_similar":{"message":"Блокирајте слични работи"},"assistant_another_element":{"message":"Изберете друг елемент"},"assistant_preview":{"message":"Преглед"},"assistant_block":{"message":"Блокирај"},"assistant_settings":{"message":"Поставки за Помошникот"},"assistant_preview_header":{"message":"Преглед на блокиран елемент"},"assistant_preview_header_info":{"message":"Провери дали елементот е правилно блокиран"},"assistant_preview_end":{"message":"Излезете од прегледот"},"wot_unknown_description":{"message":"Репутацијата на оваа веб-локација не е дефинирана со $1"},"wot_bad_description":{"message":"Оваа веб-локација има многу лоша репутација\\nспоред $1"},"wot_poor_description":{"message":"Оваа веб-локација има лоша репутација \\nспоред $1"},"wot_unsatisfactory_description":{"message":"Оваа веб-локација има лоша репутација\\nспоред $1"},"wot_good_description":{"message":"Оваа веб-локација има добра репутација\\nспоред $1"},"wot_excellent_description":{"message":"Оваа веб-локација има одлична репутација\\nспоред $1"},"settings_choose_size_and_position":{"message":"Прилагодете ја големината и положбата на „Помошник на AdGuard“"},"settings_icon_size":{"message":"Големина на иконата:"},"settings_small":{"message":"Мала"},"settings_big":{"message":"Голема"},"settings_position":{"message":"Поставеност:"},"settings_left_top":{"message":"Горе лево"},"settings_right_top":{"message":"Горе десно"},"settings_left_bottom":{"message":"Долу лево"},"settings_right_bottom":{"message":"Долу десно"},"settings_cancel":{"message":"Откажи"},"settings_save":{"message":"Зачувајте ги промените"}}'); + +/***/ }, + +/***/ 234 +(module) { + +"use strict"; +module.exports = /*#__PURE__*/JSON.parse('{"extension":{"assistant":{"name":"Помошник на AdGuard","description":"Обезбедува лесен и удобен начин за управување со филтрирањето директно од прелистувачот"}}}'); + +/***/ }, + +/***/ 9841 +(module) { + +"use strict"; +module.exports = /*#__PURE__*/JSON.parse('{"settings_position_save":"Websites","settings_position_save_all":"Alle websites","settings_position_save_this":"Deze website","assistant_select_element_start":"Starten","assistant_select_element_text":"Kies een element op deze webpagina om te blokkeren. Herlaad de pagina om het blokkeren van het element te stoppen.","menu_filtration_status":{"message":"Filteren op deze website"},"menu_do_not_filter_30_sec":{"message":"Niet filtreren voor 30 seconden"},"menu_block_ad_on_site":{"message":"Blokkeer ad op deze website"},"menu_report_abuse":{"message":"Rapporteer de website"},"menu_site_report":{"message":"Beveiligingsrapport van website"},"menu_settings":{"message":"Instelling van de assistent"},"menu_wot_reputation_indicator":{"message":"Website reputatie indicator"},"menu_wot_reputation_confidence_level":{"message":"Vertrouwensniveau reputatie"},"assistant_select_element":{"message":"Element blokkeren"},"assistant_select_element_ext":{"message":"Klik op een element dat je wilt blokkeren. AdGuard zal er een gebruikersregel voor aanmaken"},"assistant_select_element_cancel":{"message":"Annuleren"},"assistant_block_element":{"message":"Element blokkeren"},"assistant_block_element_explain":{"message":"Een elementblokkerende regel aanmaken"},"assistant_slider_explain":{"message":"Verplaats de schuifregelaar om de grootte van het kader aan te passen"},"assistant_extended_settings":{"message":"Geavanceerde instellingen"},"assistant_apply_rule_to_all_sites":{"message":"Regel toepassen op alle websites"},"assistant_block_by_reference":{"message":"Blokkeren via referentielink"},"assistant_block_similar":{"message":"Blokkeer vergelijkbare"},"assistant_another_element":{"message":"Een ander element selecteren"},"assistant_preview":{"message":"Voorbeeldweergave"},"assistant_block":{"message":"Blokkeren"},"assistant_settings":{"message":"Assistent instellingen"},"assistant_preview_header":{"message":"Voorbeeld geblokkeerd element"},"assistant_preview_header_info":{"message":"Controleer of het element correct is geblokkeerd"},"assistant_preview_end":{"message":"Voorbeeldweergave afsluiten"},"wot_unknown_description":{"message":"De reputatie van deze website wordt niet bepaald door $1"},"wot_bad_description":{"message":"Deze website heeft een zeer slechte reputatie\\nvolgens $1"},"wot_poor_description":{"message":"Deze website heeft een slechte reputatie\\nvolgens $ 1"},"wot_unsatisfactory_description":{"message":"Deze website heeft een slechte reputatie volgens $1"},"wot_good_description":{"message":"Deze website heeft een goede reputatie volgens $1"},"wot_excellent_description":{"message":"Deze website heeft een uitstekende reputatie volgens $1"},"settings_choose_size_and_position":{"message":"Grootte en positie van AdGuard Assistent aanpassen"},"settings_icon_size":{"message":"Grootte pictogram:"},"settings_small":{"message":"Klein"},"settings_big":{"message":"Groot"},"settings_position":{"message":"Positie:"},"settings_left_top":{"message":"Linksboven"},"settings_right_top":{"message":"Rechtsboven"},"settings_left_bottom":{"message":"Linksonder"},"settings_right_bottom":{"message":"Rechtsonder"},"settings_cancel":{"message":"Annuleren"},"settings_save":{"message":"Wijzigingen opslaan"}}'); + +/***/ }, + +/***/ 796 +(module) { + +"use strict"; +module.exports = /*#__PURE__*/JSON.parse('{"extension":{"assistant":{"name":"AdGuard Assistent","description":"Biedt een gemakkelijke en handige manier om filters rechtstreeks vanuit de browser te beheren"}}}'); + +/***/ }, + +/***/ 370 +(module) { + +"use strict"; +module.exports = /*#__PURE__*/JSON.parse('{"settings_position_save":"Nettsider","settings_position_save_all":"Alle nettsider","settings_position_save_this":"Denne nettsiden","assistant_select_element_start":"Start","assistant_select_element_text":"Velg et element på siden som skal blokkeres. Oppdater siden for å avbryte elementblokkeringsmodusen.","menu_filtration_status":{"message":"Filtrering på denne nettsiden"},"menu_do_not_filter_30_sec":{"message":"Ikke filtrer i 30 sekunder"},"menu_block_ad_on_site":{"message":"Blokker annonse på denne nettsiden"},"menu_report_abuse":{"message":"Rapporter denne nettsiden"},"menu_site_report":{"message":"Nettsidens sikkerhetsrapport"},"menu_settings":{"message":"Assistentinnstillinger"},"menu_wot_reputation_indicator":{"message":"Nettsteds-rykteindikator"},"menu_wot_reputation_confidence_level":{"message":"Ryktepålitelighetsnivå"},"assistant_select_element":{"message":"Blokker et element"},"assistant_select_element_ext":{"message":"Klikk på et element du vil blokkere. AdGuard vil lage en brukerregel for den"},"assistant_select_element_cancel":{"message":"Avbryt"},"assistant_block_element":{"message":"Blokker et element"},"assistant_block_element_explain":{"message":"Opprette en blokkeringsregel for elementer"},"assistant_slider_explain":{"message":"Flytt glidebryteren for å justere størrelsen på rammen"},"assistant_extended_settings":{"message":"Avanserte innstillinger"},"assistant_apply_rule_to_all_sites":{"message":"Bruk regelen for alle nettsider"},"assistant_block_by_reference":{"message":"Blokker med referanselenke"},"assistant_block_similar":{"message":"Blokker lignende"},"assistant_another_element":{"message":"Velg et annet element"},"assistant_preview":{"message":"Forhåndsvisning"},"assistant_block":{"message":"Blokker"},"assistant_settings":{"message":"Assistentinnstillinger"},"assistant_preview_header":{"message":"Forhåndsvis blokkert element"},"assistant_preview_header_info":{"message":"Sjekk om elementet er blokkert riktig"},"assistant_preview_end":{"message":"Avslutt forhåndsvisning"},"wot_unknown_description":{"message":"Rykte er ikke definert"},"wot_bad_description":{"message":"Denne nettsiden har et veldig dårlig rykte\\ni følge $1"},"wot_poor_description":{"message":"Denne nettsiden har et dårlig rykte\\ni følge $1"},"wot_unsatisfactory_description":{"message":"Denne nettsiden har et dårlig rykte\\ni følge $1"},"wot_good_description":{"message":"Denne nettsiden har et godt rykte\\ni følge $1"},"wot_excellent_description":{"message":"Denne nettsiden har et utmerket rykte\\ni følge $1"},"settings_choose_size_and_position":{"message":"Juster størrelsen og posisjonen til AdGuard-assistent"},"settings_icon_size":{"message":"Ikonstørrelse:"},"settings_small":{"message":"Liten"},"settings_big":{"message":"Stor"},"settings_position":{"message":"Posisjoner:"},"settings_left_top":{"message":"Øverst til venstre"},"settings_right_top":{"message":"Øverst til høyre"},"settings_left_bottom":{"message":"Nederst til venstre"},"settings_right_bottom":{"message":"Nederst til høyre"},"settings_cancel":{"message":"Avbryt"},"settings_save":{"message":"Lagre endringer"}}'); + +/***/ }, + +/***/ 7313 +(module) { + +"use strict"; +module.exports = /*#__PURE__*/JSON.parse('{"extension":{"assistant":{"name":"AdGuard-assistent","description":"Tilbyr en enkel og praktisk måte å administrere filtrering rett fra nettleseren"}}}'); + +/***/ }, + +/***/ 4067 +(module) { + +"use strict"; +module.exports = /*#__PURE__*/JSON.parse('{"settings_position_save":"Strony internetowe","settings_position_save_all":"Wszystkie strony internetowe","settings_position_save_this":"Ta strona internetowa","assistant_select_element_start":"Rozpocznij","assistant_select_element_text":"Wybierz element na stronie do zablokowania. Odśwież stronę, aby anulować tryb blokowania elementu.","menu_filtration_status":{"message":"Filtrowanie na tej stronie internetowej"},"menu_do_not_filter_30_sec":{"message":"Nie filtruj przez 30 sekund"},"menu_block_ad_on_site":{"message":"Zablokuj reklamę na tej stronie internetowej"},"menu_report_abuse":{"message":"Raportuj stronę internetową"},"menu_site_report":{"message":"Raport bezpieczeństwa strony internetowej"},"menu_settings":{"message":"Ustawienia Asystenta"},"menu_wot_reputation_indicator":{"message":"Wskaźnik reputacji witryny"},"menu_wot_reputation_confidence_level":{"message":"Poziom zaufania do reputacji"},"assistant_select_element":{"message":"Zablokuj element"},"assistant_select_element_ext":{"message":"Kliknij element, który chcesz zablokować. AdGuard utworzy dla niego regułę użytkownika"},"assistant_select_element_cancel":{"message":"Anuluj"},"assistant_block_element":{"message":"Zablokuj element"},"assistant_block_element_explain":{"message":"Utwórz regułę blokowania elementów"},"assistant_slider_explain":{"message":"Przesuń suwak, aby dostosować rozmiar ramki"},"assistant_extended_settings":{"message":"Ustawienia zaawansowane"},"assistant_apply_rule_to_all_sites":{"message":"Zastosuj regułę dla wszystkich stron internetowych"},"assistant_block_by_reference":{"message":"Blokuj używając linka referencyjnego"},"assistant_block_similar":{"message":"Blokuj podobne"},"assistant_another_element":{"message":"Wybierz inny element"},"assistant_preview":{"message":"Podgląd"},"assistant_block":{"message":"Blokuj"},"assistant_settings":{"message":"Ustawienia Asystenta"},"assistant_preview_header":{"message":"Podgląd zablokowanego elementu"},"assistant_preview_header_info":{"message":"Sprawdź, czy element jest poprawnie zablokowany"},"assistant_preview_end":{"message":"Zamknij podgląd"},"wot_unknown_description":{"message":"Reputacja nie jest zdefiniowana"},"wot_bad_description":{"message":"Ta strona internetowa ma bardzo złą reputację zgodnie z $1"},"wot_poor_description":{"message":"Ta strona internetowa ma złą reputację zgodnie z $1"},"wot_unsatisfactory_description":{"message":"Ta strona internetowa ma słabą reputację zgodnie z $1"},"wot_good_description":{"message":"Ta strona internetowa ma dobrą reputację zgodnie z $1"},"wot_excellent_description":{"message":"Ta strona internetowa ma doskonałą reputację zgodnie z $1"},"settings_choose_size_and_position":{"message":"Dostosuj rozmiar i pozycję Asystenta AdGuarda"},"settings_icon_size":{"message":"Rozmiar ikony:"},"settings_small":{"message":"Mały"},"settings_big":{"message":"Duży"},"settings_position":{"message":"Pozycja:"},"settings_left_top":{"message":"Lewy górny"},"settings_right_top":{"message":"Prawy górny"},"settings_left_bottom":{"message":"Na dole po lewej"},"settings_right_bottom":{"message":"Na dole po prawej"},"settings_cancel":{"message":"Anuluj"},"settings_save":{"message":"Zapisz zmiany"}}'); + +/***/ }, + +/***/ 7382 +(module) { + +"use strict"; +module.exports = /*#__PURE__*/JSON.parse('{"extension":{"assistant":{"name":"Asystent AdGuarda","description":"Zapewnia łatwy i wygodny sposób na zarządzanie filtrowaniem bezpośrednio z przeglądarki"}}}'); + +/***/ }, + +/***/ 6254 +(module) { + +"use strict"; +module.exports = /*#__PURE__*/JSON.parse('{"settings_position_save":"Sítios","settings_position_save_all":"Todos os sítios","settings_position_save_this":"Este sítio","assistant_select_element_start":"Iniciar","assistant_select_element_text":"Escolha um elemento na página para bloquear. Atualize a página para cancelar o bloqueio do elemento.","menu_filtration_status":{"message":"A filtrar este sítio"},"menu_do_not_filter_30_sec":{"message":"Não filtrar durante 30 segundos"},"menu_block_ad_on_site":{"message":"Bloquear publicidade neste sítio"},"menu_report_abuse":{"message":"Denunciar o sítio"},"menu_site_report":{"message":"Relatório de segurança do sítio"},"menu_settings":{"message":"Configurações do assistente"},"menu_wot_reputation_indicator":{"message":"Indicador de reputação do sítio"},"menu_wot_reputation_confidence_level":{"message":"Nível de Confiança de Reputação"},"assistant_select_element":{"message":"Bloquear um elemento"},"assistant_select_element_ext":{"message":"Clique num elemento que pretende bloquear. O AdGuard criará uma regra de utilizador para esse elemento"},"assistant_select_element_cancel":{"message":"Cancelar"},"assistant_block_element":{"message":"Bloquear um elemento"},"assistant_block_element_explain":{"message":"Criar uma regra de bloqueio do elemento"},"assistant_slider_explain":{"message":"Mova o controlo deslizante para ajustar o tamanho do quadro"},"assistant_extended_settings":{"message":"Definições avançadas"},"assistant_apply_rule_to_all_sites":{"message":"Aplicar a regra para todos os sítios"},"assistant_block_by_reference":{"message":"Bloquear por link de referência"},"assistant_block_similar":{"message":"Bloquear semelhante"},"assistant_another_element":{"message":"Selecionar um elemento diferente"},"assistant_preview":{"message":"Pré-visualização"},"assistant_block":{"message":"Bloquear"},"assistant_settings":{"message":"Configurações do assistente"},"assistant_preview_header":{"message":"Pré-visualizar elemento bloqueado"},"assistant_preview_header_info":{"message":"Verifique se o elemento está corretamente bloqueado"},"assistant_preview_end":{"message":"Sair da previsualização"},"wot_unknown_description":{"message":"A reputação deste sítio não está definida por $1"},"wot_bad_description":{"message":"Este sítio tem uma péssima reputação\\nde acordo com $1"},"wot_poor_description":{"message":"Este sítio tem uma má reputação\\nde acordo com $1"},"wot_unsatisfactory_description":{"message":"Este sítio tem uma frágil reputação\\nde acordo com $1"},"wot_good_description":{"message":"Este sítio tem uma boa reputação\\nde acordo com $1"},"wot_excellent_description":{"message":"Este sítio tem uma excelente reputação\\nde acordo com $1"},"settings_choose_size_and_position":{"message":"Ajustar o tamanho e a posição do Assistente do AdGuard"},"settings_icon_size":{"message":"Tamanho do ícone:"},"settings_small":{"message":"Pequeno"},"settings_big":{"message":"Grande"},"settings_position":{"message":"Posição:"},"settings_left_top":{"message":"Canto superior esquerdo"},"settings_right_top":{"message":"Canto superior direito"},"settings_left_bottom":{"message":"Canto inferior esquerdo"},"settings_right_bottom":{"message":"Canto inferior direito"},"settings_cancel":{"message":"Cancelar"},"settings_save":{"message":"Guardar alterações"}}'); + +/***/ }, + +/***/ 6245 +(module) { + +"use strict"; +module.exports = /*#__PURE__*/JSON.parse('{"extension":{"assistant":{"name":"Assistente do AdGuard","description":"Fornece uma forma fácil e conveniente de gerir a filtragem a partir do seu navegador"}}}'); + +/***/ }, + +/***/ 7435 +(module) { + +"use strict"; +module.exports = /*#__PURE__*/JSON.parse('{"settings_position_save":"Sites","settings_position_save_all":"Todos os sites","settings_position_save_this":"Neste site","assistant_select_element_start":"Iniciar","assistant_select_element_text":"Escolha um elemento na página para bloquear. Atualize a página para cancelar o bloqueio do elemento.","menu_filtration_status":{"message":"Filtragem neste site"},"menu_do_not_filter_30_sec":{"message":"Não filtrar durante 30 segundos"},"menu_block_ad_on_site":{"message":"Bloquear anúncios neste site"},"menu_report_abuse":{"message":"Reportar o site"},"menu_site_report":{"message":"Relatório de segurança do site"},"menu_settings":{"message":"Configurações do assistente"},"menu_wot_reputation_indicator":{"message":"Indicador de reputação do site"},"menu_wot_reputation_confidence_level":{"message":"Nível de confiança de reputação"},"assistant_select_element":{"message":"Bloquear elemento"},"assistant_select_element_ext":{"message":"Clique em um elemento que você deseja bloquear. O AdGuard criará uma regra de usuário para ele"},"assistant_select_element_cancel":{"message":"Cancelar"},"assistant_block_element":{"message":"Bloquear elemento"},"assistant_block_element_explain":{"message":"Criar uma regra de bloqueio do elemento"},"assistant_slider_explain":{"message":"Mova o controle deslizante para ajustar o tamanho da moldura"},"assistant_extended_settings":{"message":"Configurações avançadas"},"assistant_apply_rule_to_all_sites":{"message":"Aplicar regra para todos os sites"},"assistant_block_by_reference":{"message":"Bloquear pelo link de referência"},"assistant_block_similar":{"message":"Bloquear semelhante"},"assistant_another_element":{"message":"Selecione um elemento diferente"},"assistant_preview":{"message":"Pré-visualização"},"assistant_block":{"message":"Bloquear"},"assistant_settings":{"message":"Configurações do assistente"},"assistant_preview_header":{"message":"Pré-visualização do elemento bloqueado"},"assistant_preview_header_info":{"message":"Verifique se o elemento está corretamente bloqueado"},"assistant_preview_end":{"message":"Sair da pré-visualização"},"wot_unknown_description":{"message":"A reputação deste site ainda não foi definida por $1"},"wot_bad_description":{"message":"Este site tem uma reputação muito ruim\\nde acordo com $1"},"wot_poor_description":{"message":"Este site tem uma má reputação\\nde acordo com $1"},"wot_unsatisfactory_description":{"message":"Este site tem uma reputação ruim\\nde acordo com $1"},"wot_good_description":{"message":"Este site tem uma boa reputação\\nde acordo com $1"},"wot_excellent_description":{"message":"Este site tem uma excelente reputação\\nde acordo com $1"},"settings_choose_size_and_position":{"message":"Ajuste o tamanho e posição do Assistente do AdGuard"},"settings_icon_size":{"message":"Tamanho do ícone:"},"settings_small":{"message":"Pequeno"},"settings_big":{"message":"Grande"},"settings_position":{"message":"Posição:"},"settings_left_top":{"message":"Canto superior esquerdo"},"settings_right_top":{"message":"Canto superior direito"},"settings_left_bottom":{"message":"Canto inferior esquerdo"},"settings_right_bottom":{"message":"Canto inferior direito"},"settings_cancel":{"message":"Cancelar"},"settings_save":{"message":"Salvar alterações"}}'); + +/***/ }, + +/***/ 7118 +(module) { + +"use strict"; +module.exports = /*#__PURE__*/JSON.parse('{"extension":{"assistant":{"name":"Assistente do AdGuard","description":"Fornece uma maneira fácil e conveniente de gerenciar a filtragem diretamente do seu navegador"}}}'); + +/***/ }, + +/***/ 7150 +(module) { + +"use strict"; +module.exports = /*#__PURE__*/JSON.parse('{"settings_position_save":"Site web","settings_position_save_all":"Toate site-urile","settings_position_save_this":"Acest site","assistant_select_element_start":"Start","assistant_select_element_text":"Alegeți elementul de blocat pe pagină. Actualizați pagina ca să anulați modul de blocare a elementului.","menu_filtration_status":{"message":"Filtrare pe acest site web"},"menu_do_not_filter_30_sec":{"message":"Nu filtra pentru 30 secunde"},"menu_block_ad_on_site":{"message":"Blocare reclame pe acest site"},"menu_report_abuse":{"message":"Raportați site-ul"},"menu_site_report":{"message":"Raport de securitate site"},"menu_settings":{"message":"Setări asistent"},"menu_wot_reputation_indicator":{"message":"Indicator reputație site"},"menu_wot_reputation_confidence_level":{"message":"Nivel de încredere în reputație"},"assistant_select_element":{"message":"Blocați un element"},"assistant_select_element_ext":{"message":"Faceți clic pe un element pe care doriți să îl blocați. AdGuard va crea o regulă de utilizator"},"assistant_select_element_cancel":{"message":"Anulare"},"assistant_block_element":{"message":"Blocați un element"},"assistant_block_element_explain":{"message":"Creați o regulă de blocare a elementelor"},"assistant_slider_explain":{"message":"Mutați glisorul pentru a regla dimensiunea cadrului"},"assistant_extended_settings":{"message":"Setări avansate"},"assistant_apply_rule_to_all_sites":{"message":"Aplică regula pe orice site"},"assistant_block_by_reference":{"message":"Blocare după link de referință"},"assistant_block_similar":{"message":"Blocare similare"},"assistant_another_element":{"message":"Alegeți un element diferit"},"assistant_preview":{"message":"Ecran"},"assistant_block":{"message":"Blocați"},"assistant_settings":{"message":"Setări asistent"},"assistant_preview_header":{"message":"Previzualizare element blocat"},"assistant_preview_header_info":{"message":"Verifică dacă elementul este blocat corect"},"assistant_preview_end":{"message":"Ieșire ecran"},"wot_unknown_description":{"message":"Reputația acestui site nu este definită de $1"},"wot_bad_description":{"message":"Acest site are o reputație foarte proastă\\nconform cu $1"},"wot_poor_description":{"message":"Acest site are o reputație proastă\\nconform cu $1"},"wot_unsatisfactory_description":{"message":"Acest site are o reputație slabă\\nconform cu $1"},"wot_good_description":{"message":"Acest site are o reputație bună\\nconform cu $1"},"wot_excellent_description":{"message":"Acest site are o reputație excelentă\\nconform cu $1"},"settings_choose_size_and_position":{"message":"Ajustați talia și poziția Asistentului AdGuard"},"settings_icon_size":{"message":"Talie icoană:"},"settings_small":{"message":"Mică"},"settings_big":{"message":"Mare"},"settings_position":{"message":"Poziție:"},"settings_left_top":{"message":"Stânga sus"},"settings_right_top":{"message":"Dreapta sus"},"settings_left_bottom":{"message":"Stânga jos"},"settings_right_bottom":{"message":"Dreapta jos"},"settings_cancel":{"message":"Anulare"},"settings_save":{"message":"Salvare alegeri"}}'); + +/***/ }, + +/***/ 5797 +(module) { + +"use strict"; +module.exports = /*#__PURE__*/JSON.parse('{"extension":{"assistant":{"name":"Asistentul AdGuard","description":"Oferă o manieră ușoară și convenabilă de a gera filtrarea chiar din browser"}}}'); + +/***/ }, + +/***/ 1468 +(module) { + +"use strict"; +module.exports = /*#__PURE__*/JSON.parse('{"settings_position_save":"Сайты","settings_position_save_all":"На всех","settings_position_save_this":"Только на этом","assistant_select_element_start":"Начать","assistant_select_element_text":"Выберите на странице элемент для блокирования. Обновите страницу, чтобы отменить режим блокировки элементов.","menu_filtration_status":{"message":"Фильтрация на этом сайте"},"menu_do_not_filter_30_sec":{"message":"Не фильтровать 30 секунд"},"menu_block_ad_on_site":{"message":"Заблокировать рекламу на сайте"},"menu_report_abuse":{"message":"Пожаловаться на сайт"},"menu_site_report":{"message":"Отчёт о безопасности сайта"},"menu_settings":{"message":"Настроить помощник"},"menu_wot_reputation_indicator":{"message":"Индикатор репутации сайта"},"menu_wot_reputation_confidence_level":{"message":"Уровень доверия к репутации"},"assistant_select_element":{"message":"Заблокировать элемент"},"assistant_select_element_ext":{"message":"Нажмите на элемент, который хотите заблокировать. AdGuard создаст для него правило блокировки"},"assistant_select_element_cancel":{"message":"Отмена"},"assistant_block_element":{"message":"Заблокировать элемент"},"assistant_block_element_explain":{"message":"Будет создано правило блокировки элемента"},"assistant_slider_explain":{"message":"Двигайте ползунок, чтобы отрегулировать размер"},"assistant_extended_settings":{"message":"Расширенные настройки"},"assistant_apply_rule_to_all_sites":{"message":"Применить правило для всех сайтов"},"assistant_block_by_reference":{"message":"Блокировать по ссылке"},"assistant_block_similar":{"message":"Блокировать похожие"},"assistant_another_element":{"message":"Выбрать другой элемент"},"assistant_preview":{"message":"Предпросмотр"},"assistant_block":{"message":"Заблокировать"},"assistant_settings":{"message":"Настройка помощника"},"assistant_preview_header":{"message":"Предпросмотр"},"assistant_preview_header_info":{"message":"Проверьте, что элемент заблокировано верно"},"assistant_preview_end":{"message":"Назад"},"wot_unknown_description":{"message":"Репутация не определена расширением $1"},"wot_bad_description":{"message":"У сайта очень плохая репутация по данным $1"},"wot_poor_description":{"message":"У сайта плохая репутация по данным $1"},"wot_unsatisfactory_description":{"message":"У сайта неудовлетворительная репутация по данным $1"},"wot_good_description":{"message":"У сайта хорошая репутация по данным $1"},"wot_excellent_description":{"message":"У сайта отличная репутация по данным $1"},"settings_choose_size_and_position":{"message":"Настройте размер и положение помощника AdGuard"},"settings_icon_size":{"message":"Размер иконки:"},"settings_small":{"message":"Маленькая"},"settings_big":{"message":"Большая"},"settings_position":{"message":"Расположение:"},"settings_left_top":{"message":"Вверху слева"},"settings_right_top":{"message":"Вверху справа"},"settings_left_bottom":{"message":"Внизу слева"},"settings_right_bottom":{"message":"Внизу справа"},"settings_cancel":{"message":"Отмена"},"settings_save":{"message":"Сохранить настройки"}}'); + +/***/ }, + +/***/ 1915 +(module) { + +"use strict"; +module.exports = /*#__PURE__*/JSON.parse('{"extension":{"assistant":{"name":"Помощник AdGuard","description":"Позволяет легко и быстро управлять фильтрацией прямо из браузера"}}}'); + +/***/ }, + +/***/ 3377 +(module) { + +"use strict"; +module.exports = /*#__PURE__*/JSON.parse('{"settings_position_save":"Webové stránky","settings_position_save_all":"Všetky stránky","settings_position_save_this":"Táto stránka","assistant_select_element_start":"Štart","assistant_select_element_text":"Vyberte prvok na stránke, ktorý chcete zablokovať. Obnovte stránku pre zrušenie režimu blokovania prvkov.","menu_filtration_status":{"message":"Filtrácia na tejto stránke"},"menu_do_not_filter_30_sec":{"message":"Nefiltrovať počas 30 sekúnd"},"menu_block_ad_on_site":{"message":"Blokovať reklamy na tejto stránke"},"menu_report_abuse":{"message":"Nahlásiť stránku"},"menu_site_report":{"message":"Bezpečnostná správa o stránke"},"menu_settings":{"message":"Nastavenia asistenta"},"menu_wot_reputation_indicator":{"message":"Indikátor reputácie stránok"},"menu_wot_reputation_confidence_level":{"message":"Úroveň spoľahlivosti reputácie"},"assistant_select_element":{"message":"Blokovanie prvku"},"assistant_select_element_ext":{"message":"Kliknite na prvok, ktorý chcete zablokovať. AdGuard preň vytvorí používateľské pravidlo"},"assistant_select_element_cancel":{"message":"Zrušiť"},"assistant_block_element":{"message":"Blokovanie prvku"},"assistant_block_element_explain":{"message":"Vytvorenie pravidla blokovania prvkov"},"assistant_slider_explain":{"message":"Posuňte posúvač a upravte veľkosť rámčeka"},"assistant_extended_settings":{"message":"Pokročilé nastavenia"},"assistant_apply_rule_to_all_sites":{"message":"Použiť pravidlo na všetky stránky"},"assistant_block_by_reference":{"message":"Blokovať referenčným odkazom"},"assistant_block_similar":{"message":"Blokovať podobné"},"assistant_another_element":{"message":"Zvoliť iný prvok"},"assistant_preview":{"message":"Náhľad"},"assistant_block":{"message":"Blokovať"},"assistant_settings":{"message":"Nastavenia asistenta"},"assistant_preview_header":{"message":"Náhľad blokovaného prvku"},"assistant_preview_header_info":{"message":"Skontrolujte, či je prvok správne zablokovaný"},"assistant_preview_end":{"message":"Ukončenie náhľadu"},"wot_unknown_description":{"message":"Reputácia tejto webovej stránky nie je v $1 definovaná"},"wot_bad_description":{"message":"Táto stránka má podľa $1\\nveľmi zlú reputáciu"},"wot_poor_description":{"message":"Táto stránka má podľa $1\\nzlú reputáciu"},"wot_unsatisfactory_description":{"message":"Táto stránka má podľa $1\\nslabú reputáciu"},"wot_good_description":{"message":"Táto stránka má podľa $1\\ndobrú reputáciu"},"wot_excellent_description":{"message":"Táto stránka má podľa $1\\nvýbornú reputáciu"},"settings_choose_size_and_position":{"message":"Prispôsobiť veľkosť a polohu AdGuard asistenta"},"settings_icon_size":{"message":"Veľkosť ikony:"},"settings_small":{"message":"Malá"},"settings_big":{"message":"Veľká"},"settings_position":{"message":"Poloha:"},"settings_left_top":{"message":"Vľavo hore"},"settings_right_top":{"message":"Vpravo hore"},"settings_left_bottom":{"message":"Vľavo dole"},"settings_right_bottom":{"message":"Vpravo dole"},"settings_cancel":{"message":"Zrušiť"},"settings_save":{"message":"Uložiť zmeny"}}'); + +/***/ }, + +/***/ 3580 +(module) { + +"use strict"; +module.exports = /*#__PURE__*/JSON.parse('{"extension":{"assistant":{"name":"AdGuard Asistent","description":"Poskytuje jednoduchý a pohodlný spôsob manažmentu filtrov priamo z prehliadača"}}}'); + +/***/ }, + +/***/ 9422 +(module) { + +"use strict"; +module.exports = /*#__PURE__*/JSON.parse('{"settings_position_save":"Spletne strani","settings_position_save_all":"Vse pletne strani","settings_position_save_this":"To spletno stran","assistant_select_element_start":"Začni","assistant_select_element_text":"Izberite element na strani, ki jo želite onemogočiti. Osvežite stran, da prekličete način zaviranja elementa.","menu_filtration_status":{"message":"Filtriranje na tej spletni strani"},"menu_do_not_filter_30_sec":{"message":"Ne filtriraj 30 sekund"},"menu_block_ad_on_site":{"message":"Onemogoči oglas na tej spletni strani"},"menu_report_abuse":{"message":"Prijavi spletno stran"},"menu_site_report":{"message":"Poročilo o varnosti spletne strani"},"menu_settings":{"message":"Nastavitve Pomočnika"},"menu_wot_reputation_indicator":{"message":"Kazalnik ugleda spletnestrani"},"menu_wot_reputation_confidence_level":{"message":"Raven ugleda zaupanja"},"assistant_select_element":{"message":"Onemogoči element"},"assistant_select_element_ext":{"message":"Kliknite element, ki ga želite blokirati. AdGuard bo zanj ustvaril uporabniško pravilo"},"assistant_select_element_cancel":{"message":"Prekliči"},"assistant_block_element":{"message":"Onemogoči element"},"assistant_block_element_explain":{"message":"Ustvarite pravilo za blokiranje elementov"},"assistant_slider_explain":{"message":"Premaknite drsnik, da prilagodite velikost okvirja"},"assistant_extended_settings":{"message":"Napredne nastavitve"},"assistant_apply_rule_to_all_sites":{"message":"Uporabi pravilo za vse spletne strani"},"assistant_block_by_reference":{"message":"Onemogočij z napotitveno povezavo"},"assistant_block_similar":{"message":"Onemogoči podobno"},"assistant_another_element":{"message":"Izberi drug element"},"assistant_preview":{"message":"Predogled"},"assistant_block":{"message":"Onemogoči"},"assistant_settings":{"message":"Nastavitve Pomočnika"},"assistant_preview_header":{"message":"Predogled blokiranega elementa"},"assistant_preview_header_info":{"message":"Preverite, ali je element pravilno blokiran"},"assistant_preview_end":{"message":"Zapusti predogled"},"wot_unknown_description":{"message":"Ugled te spletne strani ni opredeljen z $1"},"wot_bad_description":{"message":"Ta spletna stran ima zelo slab ugled\\nglede na $1"},"wot_poor_description":{"message":"Ta spletna stran ima slab ugled\\nglede na $1"},"wot_unsatisfactory_description":{"message":"Ta spletna stran ima zelo slab ugled\\nglede na $1"},"wot_good_description":{"message":"Ta spletna stran ima dober ugled\\nglede na $1"},"wot_excellent_description":{"message":"Ta spletna stran ima odličen ugled\\nglede na $1"},"settings_choose_size_and_position":{"message":"Prilagodi velikost in položaj AdGuard Pomočnika"},"settings_icon_size":{"message":"Velikost ikone:"},"settings_small":{"message":"Majhna"},"settings_big":{"message":"Velika"},"settings_position":{"message":"Položaj:"},"settings_left_top":{"message":"Zgoraj levo"},"settings_right_top":{"message":"Zgoraj desno"},"settings_left_bottom":{"message":"Spodaj levo"},"settings_right_bottom":{"message":"Spodaj desno"},"settings_cancel":{"message":"Prekliči"},"settings_save":{"message":"Shrani nastavitve"}}'); + +/***/ }, + +/***/ 37 +(module) { + +"use strict"; +module.exports = /*#__PURE__*/JSON.parse('{"extension":{"assistant":{"name":"AdGuard Pomočnik","description":"Omogoča preprost in priročen način za upravljanje filtriranja neposredno iz brskalnika"}}}'); + +/***/ }, + +/***/ 8896 +(module) { + +"use strict"; +module.exports = /*#__PURE__*/JSON.parse('{"settings_position_save":"Sajtovi","settings_position_save_all":"Svi sajtovi","settings_position_save_this":"Ovaj sajt","assistant_select_element_start":"Započni","assistant_select_element_text":"Izaberite element na stranici koji želite da blokirate. Osvežite stranicu da otkažete blokiranje elemenata.","menu_filtration_status":{"message":"Filtriranje na ovom sajtu"},"menu_do_not_filter_30_sec":{"message":"Ne filtriraj u narednih 30 sekundi"},"menu_block_ad_on_site":{"message":"Blokiraj reklamu na ovom sajtu"},"menu_report_abuse":{"message":"Prijavi sajt"},"menu_site_report":{"message":"Bezbednosni izveštaj o sajtu"},"menu_settings":{"message":"Postavke pomoćnika"},"menu_wot_reputation_indicator":{"message":"Indikator reputacije sajta"},"menu_wot_reputation_confidence_level":{"message":"Nivo poverljivosti reputacije"},"assistant_select_element":{"message":"Blokiraj element"},"assistant_select_element_ext":{"message":"Kliknite na element koji želite da blokirate. AdGuard će kreirati korisničko pravilo za to"},"assistant_select_element_cancel":{"message":"Otkaži"},"assistant_block_element":{"message":"Blokiraj element"},"assistant_block_element_explain":{"message":"Kreirajte pravilo blokiranja elementa"},"assistant_slider_explain":{"message":"Pomerite klizač da biste podesili veličinu okvira"},"assistant_extended_settings":{"message":"Napredne postavke"},"assistant_apply_rule_to_all_sites":{"message":"Primeni pravilo na sve sajtove"},"assistant_block_by_reference":{"message":"Blokiraj po linku reference"},"assistant_block_similar":{"message":"Blokiraj slično"},"assistant_another_element":{"message":"Izaberite drugi element"},"assistant_preview":{"message":"Pregled"},"assistant_block":{"message":"Blokiraj"},"assistant_settings":{"message":"Postavke pomoćnika"},"assistant_preview_header":{"message":"Pregled blokiran element"},"assistant_preview_header_info":{"message":"Proverite da li je element ispravno blokiran"},"assistant_preview_end":{"message":"Napusti pregled"},"wot_unknown_description":{"message":"Reputacija nije definisana"},"wot_bad_description":{"message":"Ovaj sajt ima veoma lošu reputaciju\\nprema "},"wot_poor_description":{"message":"Ovaj sajt ima lošu reputaciju\\nprema "},"wot_unsatisfactory_description":{"message":"Ovaj sajt ima slabu reputaciju\\nprema "},"wot_good_description":{"message":"Ovaj sajt ima dobru reputaciju\\nprema "},"wot_excellent_description":{"message":"Ovaj sajt ima odličnu reputaciju\\nprema "},"settings_choose_size_and_position":{"message":"Podesite veličinu i poziciju AdGuard pomoćnika"},"settings_icon_size":{"message":"Veličina ikonice"},"settings_small":{"message":"Mala"},"settings_big":{"message":"Velika"},"settings_position":{"message":"Pozicija:"},"settings_left_top":{"message":"Gore levo"},"settings_right_top":{"message":"Gore desno"},"settings_left_bottom":{"message":"Dole levo"},"settings_right_bottom":{"message":"Dole desno"},"settings_cancel":{"message":"Otkaži"},"settings_save":{"message":"Sačuvaj promene"}}'); + +/***/ }, + +/***/ 8983 +(module) { + +"use strict"; +module.exports = /*#__PURE__*/JSON.parse('{"extension":{"assistant":{"name":"AdGuard pomoćnik","description":"Pruža jednostavan i zgodan način upravljanja filtriranjem direktno iz preglednika"}}}'); + +/***/ }, + +/***/ 6428 +(module) { + +"use strict"; +module.exports = /*#__PURE__*/JSON.parse('{"settings_position_save":"Webbplatser","settings_position_save_all":"Alla webbplatser","settings_position_save_this":"Den här webbplatsen","assistant_select_element_start":"Starta","assistant_select_element_text":"Välj ett element sidan att blockera. Återladda sidan för att återställa elementblockeringsläget.","menu_filtration_status":{"message":"Webbplatsens filtrering"},"menu_do_not_filter_30_sec":{"message":"Pausa filtrering 30 sekunder"},"menu_block_ad_on_site":{"message":"Blockera annons på den här webbplatsen"},"menu_report_abuse":{"message":"Rapportera webbplatsen"},"menu_site_report":{"message":"Säkerhetsrapport för webbplatsen"},"menu_settings":{"message":"Assistentinställningar"},"menu_wot_reputation_indicator":{"message":"Indikator för webbplatsens rykte"},"menu_wot_reputation_confidence_level":{"message":"Förtroendenivå för rykte"},"assistant_select_element":{"message":"Blockera ett element"},"assistant_select_element_ext":{"message":"Klicka på ett element du vill blockera. AdGuard skapar en användarregel för det"},"assistant_select_element_cancel":{"message":"Avbryt"},"assistant_block_element":{"message":"Blockera ett element"},"assistant_block_element_explain":{"message":"Skapa en blockeringsregel för element"},"assistant_slider_explain":{"message":"Flytta reglaget för att justera ramens storlek"},"assistant_extended_settings":{"message":"Avancerade val"},"assistant_apply_rule_to_all_sites":{"message":"Tillämpa regelns på alla webbplatster"},"assistant_block_by_reference":{"message":"Blockera med referenslänk"},"assistant_block_similar":{"message":"Blockera liknande"},"assistant_another_element":{"message":"Markera ett annat annonselement"},"assistant_preview":{"message":"Förhandsgranska"},"assistant_block":{"message":"Blockera"},"assistant_settings":{"message":"Assistentval"},"assistant_preview_header":{"message":"Förhandsgranska blockerad element"},"assistant_preview_header_info":{"message":"Kontrollera om elementet är blockerat korrekt"},"assistant_preview_end":{"message":"Avsluta förhandsgranskningen"},"wot_unknown_description":{"message":"Den här sajtens anseende är inte klarlagd av $1"},"wot_bad_description":{"message":"Webbplatsen har ett mycket dåligt anseende\\nenligt $1"},"wot_poor_description":{"message":"Webbplatsen har dåligt anseende\\nenligt $1"},"wot_unsatisfactory_description":{"message":"Webbplatsen har tveksamt anseende\\nenligt $1"},"wot_good_description":{"message":"Webbplatsen har gott anseende\\nenligt $1"},"wot_excellent_description":{"message":"Webbplatsen har ett mycket gott anseende\\nenligt $1"},"settings_choose_size_and_position":{"message":"Anpassas storlek och läge för AdGuardassistenten"},"settings_icon_size":{"message":"Ikonstorlek"},"settings_small":{"message":"Liten"},"settings_big":{"message":"Stor"},"settings_position":{"message":"Läge:"},"settings_left_top":{"message":"Ovan vänster"},"settings_right_top":{"message":"Ovan höger"},"settings_left_bottom":{"message":"Nedan vänster"},"settings_right_bottom":{"message":"Nedan höger"},"settings_cancel":{"message":"Avbryt"},"settings_save":{"message":"Spara ändringar"}}'); + +/***/ }, + +/***/ 9707 +(module) { + +"use strict"; +module.exports = /*#__PURE__*/JSON.parse('{"extension":{"assistant":{"name":"AdGuard-assistent","description":"Erbjuder ett enkelt och bekvämt sätt att hantera filtrering direkt i webbläsaren"}}}'); + +/***/ }, + +/***/ 2739 +(module) { + +"use strict"; +module.exports = /*#__PURE__*/JSON.parse('{"settings_position_save":"เว็บไซต์","settings_position_save_all":"ทุกเว็บไซต์","settings_position_save_this":"เว็บไซต์นี้","assistant_select_element_start":"เริ่ม","assistant_select_element_text":"เลือกองค์ประกอบบนหน้าเพื่อปิดกั้น รีเฟรชหน้านี้เพื่อยกเลิกโหมดการปิดกั้นองค์ประกอบ","menu_filtration_status":{"message":"การกรองบนเว็บไซต์นี้"},"menu_do_not_filter_30_sec":{"message":"ห้ามกรองเป็นเวลา 30 วินาที"},"menu_block_ad_on_site":{"message":"ปิดกั้นโฆษณาบนเว็บไซต์นี้"},"menu_report_abuse":{"message":"รายงานเว็บไซต์นี้"},"menu_site_report":{"message":"รายงานความปลอดภัยของเว็บไซต์"},"menu_settings":{"message":"ตั้งค่าการช่วยเหลือ"},"menu_wot_reputation_indicator":{"message":"ตัวบ่งชี้ชื่อเสียงของเว็บไซต์"},"menu_wot_reputation_confidence_level":{"message":"ชื่อเสียงระดับความเชื่อมั่น"},"assistant_select_element":{"message":"ปิดกั้นองค์ประกอบ"},"assistant_select_element_ext":{"message":"คลิกองค์ประกอบที่คุณต้องการบล็อก AdGuard จะสร้างกฎผู้ใช้สำหรับมัน"},"assistant_select_element_cancel":{"message":"ยกเลิก"},"assistant_block_element":{"message":"ปิดกั้นองค์ประกอบ"},"assistant_block_element_explain":{"message":"สร้างกฎการปิดกั้นองค์ประกอบ"},"assistant_slider_explain":{"message":"เลื่อนสไลด์เพื่อปรับขนาดของกรอบ"},"assistant_extended_settings":{"message":"การตั้งค่าขั้นสูง"},"assistant_apply_rule_to_all_sites":{"message":"ใช้กฏนี้กับทุกเว็บไซต์"},"assistant_block_by_reference":{"message":"ปิดกั้นโดยลิงค์อ้างอิง"},"assistant_block_similar":{"message":"ปิดกั้นที่คล้ายกัน"},"assistant_another_element":{"message":"เลือกองค์ประกอบที่แตกต่าง"},"assistant_preview":{"message":"ดูตัวอย่าง"},"assistant_block":{"message":"ปิดกั้น"},"assistant_settings":{"message":"ตั้งค่าการช่วยเหลือ"},"assistant_preview_header":{"message":"ดูตัวอย่างองค์ประกอบที่ถูกบล็อค"},"assistant_preview_header_info":{"message":"ตรวจสอบว่าองค์ประกอบถูกบล็อคอย่างถูกต้องหรือไม่"},"assistant_preview_end":{"message":"ออกจากตัวอย่าง"},"wot_unknown_description":{"message":"ชื่อเสียงของเว็บไซต์นี้ไม่ได้กำหนดไว้ที่ $1"},"wot_bad_description":{"message":"เว็บไซต์นี้มีชื่อเสียงแย่มาก\\nตาม $1"},"wot_poor_description":{"message":"เว็บไซต์นี้มีชื่อเสียงไม่ดี\\nตาม $1"},"wot_unsatisfactory_description":{"message":"เว็บไซต์นี้มีชื่อเสียงไม่ดี\\nตาม $1"},"wot_good_description":{"message":"เว็บไซต์นี้มีชื่อเสียงดี\\nตาม $1"},"wot_excellent_description":{"message":"เว็บไซต์นี้มีชื่อเสียงที่ยอดเยี่ยม\\nตาม $1"},"settings_choose_size_and_position":{"message":"ปรับขนาดและตำแหน่ง AdGuard Assistant"},"settings_icon_size":{"message":"ขนาดไอคอน:"},"settings_small":{"message":"เล็ก"},"settings_big":{"message":"ใหญ่"},"settings_position":{"message":"ตำแหน่ง:"},"settings_left_top":{"message":"บนซ้าย"},"settings_right_top":{"message":"บนขวา"},"settings_left_bottom":{"message":"ล่างซ้าย"},"settings_right_bottom":{"message":"ล่างขวา"},"settings_cancel":{"message":"ยกเลิก"},"settings_save":{"message":"บันทึกการเปลี่ยนแปลง"}}'); + +/***/ }, + +/***/ 3734 +(module) { + +"use strict"; +module.exports = /*#__PURE__*/JSON.parse('{"extension":{"assistant":{"name":"AdGuard Assistant","description":"มอบวิธีที่ง่ายและสะดวกในการจัดการการกรองจากเบราว์เซอร์"}}}'); + +/***/ }, + +/***/ 1777 +(module) { + +"use strict"; +module.exports = /*#__PURE__*/JSON.parse('{"settings_position_save":"Siteler","settings_position_save_all":"Tüm siteler","settings_position_save_this":"Bu site","assistant_select_element_start":"Başla","assistant_select_element_text":"Engellemek için sayfada bir öğe seçin. Öğe engelleme modunu iptal etmek için sayfayı yenileyin.","menu_filtration_status":{"message":"Bu sitedeki filtreleme"},"menu_do_not_filter_30_sec":{"message":"30 saniyeliğine filtreleme yapma"},"menu_block_ad_on_site":{"message":"Bu sitede reklam engelle"},"menu_report_abuse":{"message":"Siteyi bildir"},"menu_site_report":{"message":"Sitenin güvenlik raporu"},"menu_settings":{"message":"Asistan ayarları"},"menu_wot_reputation_indicator":{"message":"Site itibarı göstergesi"},"menu_wot_reputation_confidence_level":{"message":"İtibarın Güven Seviyesi"},"assistant_select_element":{"message":"Bir öğeyi engelle"},"assistant_select_element_ext":{"message":"Engellemek istediğiniz bir öğeye tıklayın. AdGuard bunun için bir kullanıcı kuralı oluşturur"},"assistant_select_element_cancel":{"message":"İptal"},"assistant_block_element":{"message":"Bir öğeyi engelle"},"assistant_block_element_explain":{"message":"Öğe engelleme kuralı oluşturun"},"assistant_slider_explain":{"message":"Çerçevenin boyutunu ayarlamak için kaydırıcıyı hareket ettirin"},"assistant_extended_settings":{"message":"Gelişmiş ayarlar"},"assistant_apply_rule_to_all_sites":{"message":"Kuralı tüm sitelerde uygula"},"assistant_block_by_reference":{"message":"Referans bağlantı ile engelle"},"assistant_block_similar":{"message":"Benzerlerini engelle"},"assistant_another_element":{"message":"Farklı bir öğe seç"},"assistant_preview":{"message":"Önizleme"},"assistant_block":{"message":"Engelle"},"assistant_settings":{"message":"Asistan ayarları"},"assistant_preview_header":{"message":"Engellenen öğeyi önizleyin"},"assistant_preview_header_info":{"message":"Öğenin doğru şekilde engellenip engellenmediğini kontrol edin"},"assistant_preview_end":{"message":"Önizlemeden çık"},"wot_unknown_description":{"message":"Bu sitenin itibarı $1 tarafından henüz belirlenmemiş"},"wot_bad_description":{"message":"1$\'a göre bu site çok kötü \\nbir itibara sahip"},"wot_poor_description":{"message":"1$\'a göre bu site kötü \\nbir itibara sahip"},"wot_unsatisfactory_description":{"message":"1$\'a göre bu site zayıf\\nbir itibara sahip"},"wot_good_description":{"message":"1$\'a göre bu site iyi\\nbir itibara sahip"},"wot_excellent_description":{"message":"1$\'a göre bu site mükemmel\\nbir itibara sahip"},"settings_choose_size_and_position":{"message":"AdGuard Asistanın boyutunu ve konumunu ayarlayın"},"settings_icon_size":{"message":"Simge boyutu:"},"settings_small":{"message":"Küçük"},"settings_big":{"message":"Büyük"},"settings_position":{"message":"Konum:"},"settings_left_top":{"message":"Sol üst"},"settings_right_top":{"message":"Sağ üst"},"settings_left_bottom":{"message":"Sol alt"},"settings_right_bottom":{"message":"Sağ alt"},"settings_cancel":{"message":"İptal"},"settings_save":{"message":"Değişiklikleri kaydet"}}'); + +/***/ }, + +/***/ 7020 +(module) { + +"use strict"; +module.exports = /*#__PURE__*/JSON.parse('{"extension":{"assistant":{"name":"AdGuard Asistanı","description":"Filtrelemeyi doğrudan tarayıcıdan yönetmenin kolay ve kullanışlı bir yolunu sağlar"}}}'); + +/***/ }, + +/***/ 7415 +(module) { + +"use strict"; +module.exports = /*#__PURE__*/JSON.parse('{"settings_position_save":"Сайти","settings_position_save_all":"На всіх","settings_position_save_this":"Тільки на даному","assistant_select_element_start":"Почати","assistant_select_element_text":"Виберіть елемент на сторінці, який треба заблокувати. Оновіть сторінку, щоб скасувати режим блокування.","menu_filtration_status":{"message":"Фільтрування на цьому сайті"},"menu_do_not_filter_30_sec":{"message":"Не фільтрувати 30 секунд"},"menu_block_ad_on_site":{"message":"Заблокувати рекламу на даному сайті"},"menu_report_abuse":{"message":"Повідомити про сайт"},"menu_site_report":{"message":"Звіт про безпеку сайту"},"menu_settings":{"message":"Налаштування помічника"},"menu_wot_reputation_indicator":{"message":"Індикатор репутації сайту"},"menu_wot_reputation_confidence_level":{"message":"Рівень надійності репутації"},"assistant_select_element":{"message":"Заблокувати елемент"},"assistant_select_element_cancel":{"message":"Скасувати"},"assistant_block_element":{"message":"Заблокувати елемент"},"assistant_extended_settings":{"message":"Розширені налаштування"},"assistant_apply_rule_to_all_sites":{"message":"Застосувати правило для всіх сайтів"},"assistant_block_by_reference":{"message":"Блокувати за посиланням"},"assistant_block_similar":{"message":"Блокувати схожі елементи"},"assistant_another_element":{"message":"Вибрати інший елемент"},"assistant_preview":{"message":"Попередній перегляд"},"assistant_block":{"message":"Заблокувати"},"assistant_settings":{"message":"Налаштування помічника"},"assistant_preview_end":{"message":"Закінчити попередній перегляд"},"wot_unknown_description":{"message":"Репутація цього вебсайту не визначена"},"wot_bad_description":{"message":"Цей сайт має дуже погану репутацію\\nза версією $1"},"wot_poor_description":{"message":"Цей сайт має погану репутацію\\nза версією $1"},"wot_unsatisfactory_description":{"message":"Цей сайт має незадовільну репутацію\\nза версією $1"},"wot_good_description":{"message":"Цей сайт має добру репутацію\\nза версією $1"},"wot_excellent_description":{"message":"Цей сайт має дуже відмінну репутацію\\nза версією $1"},"settings_choose_size_and_position":{"message":"Налаштуйте розмір і положення помічника AdGuard"},"settings_icon_size":{"message":"Розмір іконки:"},"settings_small":{"message":"Маленька"},"settings_big":{"message":"Велика"},"settings_position":{"message":"Позиція:"},"settings_left_top":{"message":"Зверху зліва"},"settings_right_top":{"message":"Зверху справа"},"settings_left_bottom":{"message":"Внизу зліва"},"settings_right_bottom":{"message":"Внизу справа"},"settings_cancel":{"message":"Скасувати"},"settings_save":{"message":"Зберегти зміни"}}'); + +/***/ }, + +/***/ 3378 +(module) { + +"use strict"; +module.exports = /*#__PURE__*/JSON.parse('{"extension":{"assistant":{"name":"Помічник AdGuard","description":"Забезпечує простий та зручний спосіб керування фільтруванням безпосередньо у браузері"}}}'); + +/***/ }, + +/***/ 9692 +(module) { + +"use strict"; +module.exports = /*#__PURE__*/JSON.parse('{"settings_position_save":"Trang Web","settings_position_save_all":"Tất cả trang web","settings_position_save_this":"Chỉ trang web này","assistant_select_element_start":"Bắt đầu","assistant_select_element_text":"Chọn một thành phần trên trang để chặn. Làm mới trang web để hủy bỏ chế độ chặn thành phần.","menu_filtration_status":{"message":"Lọc trên website này"},"menu_do_not_filter_30_sec":{"message":"Không lọc trong 30 giây"},"menu_block_ad_on_site":{"message":"Chặn quảng cáo đối với trang web này"},"menu_report_abuse":{"message":"Báo cáo trang web này"},"menu_site_report":{"message":"Báo cáo bảo mật website"},"menu_settings":{"message":"Cài đặt trợ lý"},"menu_wot_reputation_indicator":{"message":"Chỉ số danh tiếng của trang Web"},"menu_wot_reputation_confidence_level":{"message":"Mức độ đáng tin của danh tiếng"},"assistant_select_element":{"message":"Chặn một thành phần"},"assistant_select_element_ext":{"message":"Nhấp vào phần tử bạn muốn chặn. AdGuard sẽ tạo quy tắc người dùng cho phần tử đó"},"assistant_select_element_cancel":{"message":"Hủy bỏ"},"assistant_block_element":{"message":"Chặn một thành phần"},"assistant_block_element_explain":{"message":"Tạo một quy tắc chặn yếu tố"},"assistant_slider_explain":{"message":"Di chuyển thanh trượt để điều chỉnh kích thước của khung"},"assistant_extended_settings":{"message":"Cài đặt nâng cao"},"assistant_apply_rule_to_all_sites":{"message":"Áp dụng tất cả các điều luật đối với mọi trang web"},"assistant_block_by_reference":{"message":"Chặn theo liên kết tham chiếu"},"assistant_block_similar":{"message":"Chặn tương tự"},"assistant_another_element":{"message":"Chọn một phần tử khác"},"assistant_preview":{"message":"Xem trước"},"assistant_block":{"message":"Chặn"},"assistant_settings":{"message":"Cài đặt trợ lý"},"assistant_preview_header":{"message":"Xem trước yếu tố đã bị chặn"},"assistant_preview_header_info":{"message":"Kiểm tra xem phần tử có bị chặn đúng không"},"assistant_preview_end":{"message":"Thoát xem trước"},"wot_unknown_description":{"message":"Website này danh tiếng chưa được xác định bởi $1"},"wot_bad_description":{"message":"Website này có danh tiếng cực xấu dựa theo $1"},"wot_poor_description":{"message":"Website này có danh tiếng xấu dựa theo $1"},"wot_unsatisfactory_description":{"message":"Website này có danh tiếng không tốt dựa theo $1"},"wot_good_description":{"message":"Website này có danh tiếng tốt dựa theo $1"},"wot_excellent_description":{"message":"Website này có danh tiếng tuyệt vời dựa theo $1"},"settings_choose_size_and_position":{"message":"Điều chỉnh kích thước và vị trí của Trợ Lý AdGuard"},"settings_icon_size":{"message":"Kích thước biểu tượng:"},"settings_small":{"message":"Nhỏ"},"settings_big":{"message":"Lớn"},"settings_position":{"message":"Vị trí:"},"settings_left_top":{"message":"Trên cùng bên trái"},"settings_right_top":{"message":"Trên cùng bên phải"},"settings_left_bottom":{"message":"Dưới cùng bên trái"},"settings_right_bottom":{"message":"Dưới cùng bên phải"},"settings_cancel":{"message":"Hủy bỏ"},"settings_save":{"message":"Lưu các thay đổi"}}'); + +/***/ }, + +/***/ 8315 +(module) { + +"use strict"; +module.exports = /*#__PURE__*/JSON.parse('{"extension":{"assistant":{"name":"Trợ Lý AdGuard","description":"Cung cấp cách dễ dàng và thuận tiện để quản lý lọc ngay từ trình duyệt"}}}'); + +/***/ }, + +/***/ 6359 +(module) { + +"use strict"; +module.exports = /*#__PURE__*/JSON.parse('{"settings_position_save":"網站","settings_position_save_all":"所有網站","settings_position_save_this":"此網站","assistant_select_element_start":"開始","assistant_select_element_text":"選擇網頁上的元素來阻擋。若要取消重新整理網頁即可。","menu_filtration_status":{"message":"過濾此網頁上的廣告"},"menu_do_not_filter_30_sec":{"message":"暫停過濾 30 秒"},"menu_block_ad_on_site":{"message":"封鎖此網頁上的廣告"},"menu_report_abuse":{"message":"回報此網站"},"menu_site_report":{"message":"網站安全性報告"},"menu_settings":{"message":"助手設定"},"menu_wot_reputation_indicator":{"message":"網頁名譽指標"},"menu_wot_reputation_confidence_level":{"message":"名譽可信程度"},"assistant_select_element_cancel":{"message":"取消"},"assistant_extended_settings":{"message":"進階設定"},"assistant_apply_rule_to_all_sites":{"message":"套用至所有網站"},"assistant_block_by_reference":{"message":"通過參考連結封鎖"},"assistant_block_similar":{"message":"封鎖相關或類似的"},"assistant_another_element":{"message":"選取其他網頁元素"},"assistant_preview":{"message":"預覽"},"assistant_block":{"message":"封鎖"},"assistant_settings":{"message":"助手設定"},"assistant_preview_end":{"message":"關閉預覽"},"wot_unknown_description":{"message":"此網站名譽尚未被 $1 評定"},"wot_bad_description":{"message":"根據 $1\\n此網站名譽非常糟糕"},"wot_poor_description":{"message":"根據 $1\\n此網站擁有不良的名譽"},"wot_unsatisfactory_description":{"message":"根據 $1\\n此網站擁有不好的名譽"},"wot_good_description":{"message":"根據 $1\\n此網站擁有良好的名譽"},"wot_excellent_description":{"message":"根據 $1\\n此網站擁有非常優秀的名譽"},"settings_choose_size_and_position":{"message":"調整 AdGuard 小助手大小與位置"},"settings_icon_size":{"message":"圖示大小:"},"settings_small":{"message":"小"},"settings_big":{"message":"大"},"settings_position":{"message":"位置:"},"settings_left_top":{"message":"左上角"},"settings_right_top":{"message":"右上角"},"settings_left_bottom":{"message":"左下角"},"settings_right_bottom":{"message":"右下角"},"settings_cancel":{"message":"取消"},"settings_save":{"message":"儲存變更"}}'); + +/***/ }, + +/***/ 9762 +(module) { + +"use strict"; +module.exports = /*#__PURE__*/JSON.parse('{"extension":{"assistant":{"name":"AdGuard 小助手","description":"在瀏覽器中提供了簡易且直覺的管理過濾方式"}}}'); + +/***/ }, + +/***/ 6543 +(module) { + +"use strict"; +module.exports = /*#__PURE__*/JSON.parse('{"settings_position_save":"網站","settings_position_save_all":"所有的網站","settings_position_save_this":"此網站","assistant_select_element_start":"開始","assistant_select_element_text":"選擇於該頁面上之元件以封鎖。重新整理該頁面以取消元件封鎖模式。","menu_filtration_status":{"message":"對此網站之過濾"},"menu_do_not_filter_30_sec":{"message":"計 30 秒不過濾"},"menu_block_ad_on_site":{"message":"封鎖於此網站上之廣告"},"menu_report_abuse":{"message":"報告該網站"},"menu_site_report":{"message":"網站安全性報告"},"menu_settings":{"message":"助理設定"},"menu_wot_reputation_indicator":{"message":"網站信譽指標"},"menu_wot_reputation_confidence_level":{"message":"信譽信賴等級"},"assistant_select_element":{"message":"封鎖元件"},"assistant_select_element_ext":{"message":"點選想要封鎖的元件。AdGuard 將創建一條使用者規則。"},"assistant_select_element_cancel":{"message":"取消"},"assistant_block_element":{"message":"封鎖元件"},"assistant_block_element_explain":{"message":"建立元件封鎖規則"},"assistant_slider_explain":{"message":"移動滑塊以調整框架大小"},"assistant_extended_settings":{"message":"進階設定"},"assistant_apply_rule_to_all_sites":{"message":"對所有的網站套用該規則"},"assistant_block_by_reference":{"message":"按照參考連結封鎖"},"assistant_block_similar":{"message":"封鎖相似之物"},"assistant_another_element":{"message":"選擇不同的元件"},"assistant_preview":{"message":"預覽"},"assistant_block":{"message":"封鎖"},"assistant_settings":{"message":"助理設定"},"assistant_preview_header":{"message":"預覽已封鎖元件"},"assistant_preview_header_info":{"message":"檢查該元件是否被正確封鎖"},"assistant_preview_end":{"message":"離開預覽"},"wot_unknown_description":{"message":"此網站的信譽未被 $1 界定"},"wot_bad_description":{"message":"根據 $1,\\n此網站有非常壞的信譽"},"wot_poor_description":{"message":"根據 $1,\\n此網站有壞的信譽"},"wot_unsatisfactory_description":{"message":"根據 $1,\\n此網站有不好的信譽"},"wot_good_description":{"message":"根據 $1,\\n此網站有好的信譽"},"wot_excellent_description":{"message":"根據 $1,\\n此網站有極好的信譽"},"settings_choose_size_and_position":{"message":"調整 AdGuard 助理尺寸和位置"},"settings_icon_size":{"message":"圖示尺寸:"},"settings_small":{"message":"小的"},"settings_big":{"message":"大的"},"settings_position":{"message":"位置:"},"settings_left_top":{"message":"左上角"},"settings_right_top":{"message":"右上角"},"settings_left_bottom":{"message":"左下角"},"settings_right_bottom":{"message":"右下角"},"settings_cancel":{"message":"取消"},"settings_save":{"message":"儲存更改"}}'); + +/***/ }, + +/***/ 1066 +(module) { + +"use strict"; +module.exports = /*#__PURE__*/JSON.parse('{"extension":{"assistant":{"name":"AdGuard 助理","description":"提供簡單的且方便的方法以直接地從該瀏覽器管理過濾"}}}'); + +/***/ }, + +/***/ 9161 +(module) { + +"use strict"; +module.exports = /*#__PURE__*/JSON.parse('{"settings_position_save":"网站","settings_position_save_all":"所有网站","settings_position_save_this":"此网站","assistant_select_element_start":"开始","assistant_select_element_text":"选择要拦截的网页元素。要取消元素拦截模式,请刷新网页。","menu_filtration_status":{"message":"对此网站进行过滤"},"menu_do_not_filter_30_sec":{"message":"暂停过滤 30 秒"},"menu_block_ad_on_site":{"message":"拦截此网站上的广告"},"menu_report_abuse":{"message":"报告此网站"},"menu_site_report":{"message":"网站安全报告"},"menu_settings":{"message":"助手设置"},"menu_wot_reputation_indicator":{"message":"网站声誉指标"},"menu_wot_reputation_confidence_level":{"message":"声望置信度"},"assistant_select_element":{"message":"拦截元素"},"assistant_select_element_ext":{"message":"点击想要拦截的元素。AdGuard 将创建一条用户规则。"},"assistant_select_element_cancel":{"message":"取消"},"assistant_block_element":{"message":"拦截元素"},"assistant_block_element_explain":{"message":"创建元素拦截规则"},"assistant_slider_explain":{"message":"移动滑块以调整框架大小"},"assistant_extended_settings":{"message":"高级设置"},"assistant_apply_rule_to_all_sites":{"message":"应用规则至所有网站"},"assistant_block_by_reference":{"message":"通过参考链接进行拦截"},"assistant_block_similar":{"message":"拦截类似元素"},"assistant_another_element":{"message":"选择其它元素"},"assistant_preview":{"message":"预览"},"assistant_block":{"message":"拦截"},"assistant_settings":{"message":"AdGuard 助手设置"},"assistant_preview_header":{"message":"预览已拦截元素"},"assistant_preview_header_info":{"message":"检查该元素是否被正确拦截"},"assistant_preview_end":{"message":"退出预览"},"wot_unknown_description":{"message":"声望尚未定义"},"wot_bad_description":{"message":"此网站在以下数据库中声望极低"},"wot_poor_description":{"message":"此网站在以下数据库中声望低下 "},"wot_unsatisfactory_description":{"message":"此网站在以下数据库中声望不佳 "},"wot_good_description":{"message":"此网站在以下数据库中声望良好 "},"wot_excellent_description":{"message":"此网站在以下数据库中声望极佳 "},"settings_choose_size_and_position":{"message":"调整 AdGuard 助手的大小与位置"},"settings_icon_size":{"message":"图标大小:"},"settings_small":{"message":"小"},"settings_big":{"message":"大"},"settings_position":{"message":"位置:"},"settings_left_top":{"message":"左上角"},"settings_right_top":{"message":"右上角"},"settings_left_bottom":{"message":"左下角"},"settings_right_bottom":{"message":"右下角"},"settings_cancel":{"message":"取消"},"settings_save":{"message":"保存更改"}}'); + +/***/ }, + +/***/ 3492 +(module) { + +"use strict"; +module.exports = /*#__PURE__*/JSON.parse('{"extension":{"assistant":{"name":"使用 AdGuard 助手","description":"提供简单方便的方法来管理浏览器筛选"}}}'); + +/***/ } + +/******/ }); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __nested_webpack_require_553913__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ id: moduleId, +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ __webpack_modules__[moduleId](module, module.exports, __nested_webpack_require_553913__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __nested_webpack_require_553913__.m = __webpack_modules__; +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/compat get default export */ +/******/ (() => { +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __nested_webpack_require_553913__.n = (module) => { +/******/ var getter = module && module.__esModule ? +/******/ () => (module['default']) : +/******/ () => (module); +/******/ __nested_webpack_require_553913__.d(getter, { a: getter }); +/******/ return getter; +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { +/******/ // define getter functions for harmony exports +/******/ __nested_webpack_require_553913__.d = (exports, definition) => { +/******/ for(var key in definition) { +/******/ if(__nested_webpack_require_553913__.o(definition, key) && !__nested_webpack_require_553913__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __nested_webpack_require_553913__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/******/ /* webpack/runtime/make namespace object */ +/******/ (() => { +/******/ // define __esModule on exports +/******/ __nested_webpack_require_553913__.r = (exports) => { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/jsonp chunk loading */ +/******/ (() => { +/******/ __nested_webpack_require_553913__.b = (typeof document !== 'undefined' && document.baseURI) || self.location.href; +/******/ +/******/ // object to store loaded and loading chunks +/******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched +/******/ // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded +/******/ var installedChunks = { +/******/ 792: 0 +/******/ }; +/******/ +/******/ // no chunk on demand loading +/******/ +/******/ // no prefetching +/******/ +/******/ // no preloaded +/******/ +/******/ // no HMR +/******/ +/******/ // no HMR manifest +/******/ +/******/ // no on chunks loaded +/******/ +/******/ // no jsonp function +/******/ })(); +/******/ +/************************************************************************/ +var __nested_webpack_exports__ = {}; +// This entry needs to be wrapped in an IIFE because it needs to be in strict mode. +(() => { +"use strict"; +// ESM COMPAT FLAG +__nested_webpack_require_553913__.r(__nested_webpack_exports__); + +// EXPORTS +__nested_webpack_require_553913__.d(__nested_webpack_exports__, { + adguardAssistant: () => (/* binding */ adguardAssistant) +}); + +;// ./src/ioc.js +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +var getArguments = function getArguments(func) { + // This regex is from require.js + var FN_ARGS = /^function\s*[^(]*\(\s*([^)]*)\)/m; + var args = func.toString().match(FN_ARGS)[1].split(','); + if (args[0] === '') { + return []; + } + return args; +}; +var Ioc = /*#__PURE__*/function () { + function Ioc() { + _classCallCheck(this, Ioc); + this.dependencies = {}; + } + return _createClass(Ioc, [{ + key: "resolveDependencies", + value: function resolveDependencies(func) { + var args = getArguments(func); + var resolved = []; + for (var i = 0; i < args.length; i += 1) { + var depName = args[i].trim(); + var dep = this.dependencies[depName]; + if (!dep) { + throw new Error("Can't find dependency: ".concat(depName)); + } + resolved.push(this.dependencies[depName]); + } + return resolved; + } + }, { + key: "register", + value: function register(qualifier, obj) { + this.dependencies[qualifier] = obj; + } + }, { + key: "get", + value: function get(func) { + if (typeof func === 'string') { + var resolved = this.dependencies[func]; + if (!resolved) { + throw new Error("Can't resolve ".concat(func)); + } + return resolved; + } + var resolvedDependencies = this.resolveDependencies(func); + function FuncWrapper() { + return func.apply(func, resolvedDependencies); + } + FuncWrapper.prototype = func.prototype; + return new FuncWrapper(); + } + }]); +}(); +var ioc = new Ioc(); +/* harmony default export */ const src_ioc = (ioc); +;// ./src/protectedApi.js +/** + * TODO: rewrite to class + * TODO: add relevant jsdoc + * Protected API + * @constructor + */ +function ProtectedApi() { + /** + * Default Trusted Types policy name provided by CoreLibs. + */ + var DEFAULT_POLICY_NAME = 'AGPolicy'; + var win = window; + var functionPType = Function.prototype; + var originalGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; + var _document = document, + documentMode = _document.documentMode, + documentElement = _document.documentElement; + var originalAppendChild = document.appendChild; + var originalJSON = win.JSON; + var functionApply = functionPType.apply; + var functionBind = functionPType.bind; + var COMPLETE = 'complete'; + var originalAttachShadow = documentElement.attachShadow; + + // eslint-disable-next-line func-names + var apply = typeof Reflect !== 'undefined' ? Reflect.apply : function (target, _this, _arguments) { + return functionApply.call(target, _this, _arguments); + }; + var noop = function noop() {}; + var methodCallerFactory = function methodCallerFactory(owner, prop) { + if (!owner) { + return noop; + } + // Keeps reference to the method, so that it is unaffected + // when `owner` is mutated. + var method = owner[prop]; + // eslint-disable-next-line consistent-return, func-names + return function () { + if (method) { + // eslint-disable-next-line prefer-rest-params + return apply(method, owner, arguments); + } + }; + }; + var getReadyState = function getReadyState() { + // We need to add this hook for tests, because a phantomjs + // doesn't work with Object.getOwnPropertyDescriptor correctly + if (typeof originalGetOwnPropertyDescriptor(Document.prototype, 'readyState') === 'undefined') { + return COMPLETE; + } + var readyStateGetter = originalGetOwnPropertyDescriptor(Document.prototype, 'readyState').get; + return apply(readyStateGetter, document, []); + }; + var addListenerToWindow = methodCallerFactory(win, 'addEventListener'); + var removeListenerFromWindow = methodCallerFactory(win, 'removeEventListener'); + var querySelector = methodCallerFactory(document, 'querySelector'); + var appendChildToElement = function appendChildToElement(elem, child) { + apply(originalAppendChild, elem, [child]); + }; + + /** + * Creating element instead `document.createElement` + * to prevented a custom `document.createElement` + * see: https://github.com/AdguardTeam/AdguardAssistant/issues/165 + * + * And also if browser supports Trusted Types, + * we will use it with default AdGuard policy to create elements from strings. + * see: https://github.com/AdguardTeam/AdguardAssistant/issues/438 + */ + var createElement = function createElement(markup) { + var doc = document.implementation.createHTMLDocument(''); + if (markup && markup[0] !== '<') { + // eslint-disable-next-line no-param-reassign + markup = "<".concat(markup, ">"); + } + try { + if (win.trustedTypes && win.trustedTypes.createPolicy) { + var policy = win.trustedTypes.createPolicy(DEFAULT_POLICY_NAME, { + createHTML: function createHTML(s) { + return s; + } + }); + // eslint-disable-next-line no-param-reassign + markup = policy.createHTML(markup); + } + } catch (e) { + // Do nothing + } + doc.body.innerHTML = markup; + return doc.body.firstChild; + }; + + /** + * Set innerHTML to element. + * + * @param {HTMLElement} element Element to add HTML. + * @param {string} html HTML string. + */ + var setInnerHtml = function setInnerHtml(element, html) { + // Clear existing content + while (element.lastChild) { + element.removeChild(element.lastChild); + } + + // Add new content + element.appendChild(createElement(html)); + }; + var json = { + parse: methodCallerFactory(originalJSON, 'parse'), + stringify: methodCallerFactory(originalJSON, 'stringify') + }; + + /** + * Creating style element + * @param {String} styles css styles in string + * @param {String} nonce attribute for content-security-policy + * @param {String} id to prevent duplicates, can be empty + * @return {Object|false} style tag with styles or false + * if the styles with transferred id is exist + */ + var createStylesElement = function createStylesElement(styles, nonce, id) { + if (id && querySelector("#".concat(id))) { + return false; + } + var tagNode = createElement('style'); + tagNode.setAttribute('type', 'text/css'); + if (id) { + tagNode.setAttribute('id', id); + } + tagNode.setAttribute('nonce', nonce); + if (tagNode.styleSheet) { + tagNode.styleSheet.cssText = styles; + } else { + appendChildToElement(tagNode, document.createTextNode(styles)); + } + return tagNode; + }; + + /** + * Check browser shadow dom support. + * Safari crashes after adding style tag in attachShadow so exclude it + * see: https://github.com/AdguardTeam/AdguardBrowserExtension/issues/974 + */ + var checkShadowDomSupport = function checkShadowDomSupport() { + var SAFARI_UA_REGEX = /^((?!chrome|android).)*safari/i; + var isSafari = window.safari !== undefined || SAFARI_UA_REGEX.test(navigator.userAgent); + return typeof originalAttachShadow !== 'undefined' && !isSafari; + }; + return { + functionBind: functionBind, + addListenerToWindow: addListenerToWindow, + removeListenerFromWindow: removeListenerFromWindow, + getReadyState: getReadyState, + documentMode: documentMode, + appendChildToElement: appendChildToElement, + createElement: createElement, + setInnerHtml: setInnerHtml, + json: json, + createStylesElement: createStylesElement, + checkShadowDomSupport: checkShadowDomSupport + }; +} +var protectedApi = new ProtectedApi(); +/* harmony default export */ const src_protectedApi = (protectedApi); +;// ./src/wot.js +/** + * Object that manages wot data + * @returns {{ + * registerWotEventHandler: Function, + * getWotData: Function, + * getWotScorecardUrl: Function, + * WOT_URL: string + * }} + * @constructor + */ +function Wot() { + var wotUrlScorecardTemplate = 'https://link.adtidy.org/forward.html?action=wot_scorecard&from=main_menu&app=assistant&domain='; + var WOT_URL = 'https://link.adtidy.org/forward.html?action=wot&from=main_menu&app=assistant'; + var wotData = null; + var registerWotEventHandler = function registerWotEventHandler() { + var wotDataCb = function wotDataCb(data) { + wotData = data; + }; + if (window.WotData) { + wotData = window.WotData; + } else { + window.WotData = wotDataCb; + } + }; + var getWotData = function getWotData() { + return wotData; + }; + var getWotScorecardUrl = function getWotScorecardUrl(url) { + return "".concat(wotUrlScorecardTemplate).concat(url); + }; + return { + registerWotEventHandler: registerWotEventHandler, + getWotData: getWotData, + getWotScorecardUrl: getWotScorecardUrl, + WOT_URL: WOT_URL + }; +} +var wot = new Wot(); +/* harmony default export */ const src_wot = (wot); +;// ./src/utils/common-utils.js +var cropDomain = function cropDomain(domain) { + return domain.replace('www.', '').replace(/:\d+/, ''); +}; + +/** + * Force clear the page cache + * see: https://stackoverflow.com/questions/10719505/force-a-reload-of-page-in-chrome-using-javascript-no-cache/27058362#27058362 + * @param callback + */ +var bypassCache = function bypassCache(callback) { + var xhr = new XMLHttpRequest(); + xhr.open('GET', window.location.href, true); + xhr.setRequestHeader('Pragma', 'no-cache'); + xhr.setRequestHeader('Expires', '-1'); + xhr.setRequestHeader('Cache-Control', 'no-cache'); + xhr.onreadystatechange = function () { + if (xhr.readyState === 4 && callback) { + callback(); + } + }; + xhr.send(); +}; + +/** + * Reload page after bypassing cache + */ +var reloadPageBypassCache = function reloadPageBypassCache() { + bypassCache(function () { + window.location.reload(true); + }); +}; + +/** + * Multiple event handler helper. + * @param {Object} elements element or nodeList. + * @param {String} events multiple events divided by space. + * @param {Function} eventHandler event handler. + * @param {Boolean} useCapture capture. + * @return {Function} add/remove. + */ +var events = { + add: function add(elements, es, eventHandler, useCapture) { + this.addRemoveEvents(true, elements, es, eventHandler, useCapture); + }, + remove: function remove(elements, es, eventHandler, useCapture) { + this.addRemoveEvents(false, elements, es, eventHandler, useCapture); + }, + // eslint-disable-next-line consistent-return + addRemoveEvents: function addRemoveEvents(add, elements, es, eventHandler, useCapture) { + if (!elements || !es || !eventHandler) { + return false; + } + var eventList = es.split(' '); + if (!eventList || eventList.length < 1) { + return false; + } + if (!elements.length) { + // eslint-disable-next-line no-param-reassign + elements = new Array(elements); + } + for (var el = 0; el < elements.length; el += 1) { + for (var evt = 0; evt < eventList.length; evt += 1) { + if (!eventList[evt] || !eventList[evt].length) { + // eslint-disable-next-line no-continue + continue; + } + if (add) { + elements[el].addEventListener(eventList[evt], eventHandler, !!useCapture); + } else { + elements[el].removeEventListener(eventList[evt], eventHandler, !!useCapture); + } + } + } + } +}; + +/** + * Common utils + * @type {{ + * cropDomain: Function, + * bypassCache: Function, + * reloadPageBypassCache: Function, + * events: Object + * }} + */ +var CommonUtils = { + cropDomain: cropDomain, + bypassCache: bypassCache, + reloadPageBypassCache: reloadPageBypassCache, + events: events +}; +/* harmony default export */ const common_utils = ((/* unused pure expression or super */ null && (0))); +;// ./src/log.js +function log_typeof(o) { "@babel/helpers - typeof"; return log_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, log_typeof(o); } +/* global DEBUG */ +/** + * Simple logger with log levels + * @returns {{ + * warn: warn, + * info: info, + * debug: debug, + * error: error + * }} + * @constructor + */ +function Log() { + var currentLevel = false ? 0 : 'ERROR'; + var LogLevels = { + ERROR: 1, + WARN: 2, + INFO: 3, + DEBUG: 4 + }; + var print = function print(level, method, args) { + // check log level + if (LogLevels[currentLevel] < LogLevels[level]) { + return; + } + if (!args || args.length === 0 || !args[0]) { + return; + } + var formatted; + if (log_typeof(args[0]) === 'object') { + // eslint-disable-next-line prefer-destructuring + formatted = args[0]; + } else { + var str = "".concat(args[0]); + // eslint-disable-next-line no-param-reassign + args = Array.prototype.slice.call(args, 1); + formatted = str.replace(/{(\d+)}/g, function (match, number) { + return typeof args[number] !== 'undefined' ? args[number] : match; + }); + if (LogLevels[level] >= LogLevels[currentLevel]) { + var now = new Date(); + formatted = "".concat(now.toISOString(), ": ").concat(formatted); + } + } + // eslint-disable-next-line no-console + console[method](formatted); + }; + var debug = function debug() { + for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + print('DEBUG', 'log', args); + }; + var info = function info() { + for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { + args[_key2] = arguments[_key2]; + } + print('INFO', 'info', args); + }; + var warn = function warn() { + for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) { + args[_key3] = arguments[_key3]; + } + print('WARN', 'info', args); + }; + var error = function error() { + for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) { + args[_key4] = arguments[_key4]; + } + print('ERROR', 'error', args); + }; + return { + debug: debug, + info: info, + warn: warn, + error: error + }; +} +var log = new Log(); +/* harmony default export */ const src_log = (log); +;// ./src/upgradeHelper.js +function upgradeHelper_typeof(o) { "@babel/helpers - typeof"; return upgradeHelper_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, upgradeHelper_typeof(o); } +function upgradeHelper_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function upgradeHelper_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, upgradeHelper_toPropertyKey(o.key), o); } } +function upgradeHelper_createClass(e, r, t) { return r && upgradeHelper_defineProperties(e.prototype, r), t && upgradeHelper_defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function upgradeHelper_toPropertyKey(t) { var i = upgradeHelper_toPrimitive(t, "string"); return "symbol" == upgradeHelper_typeof(i) ? i : i + ""; } +function upgradeHelper_toPrimitive(t, r) { if ("object" != upgradeHelper_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != upgradeHelper_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } + + + +/* eslint-disable no-param-reassign */ +/** + * Helper for backward compatibility + * @returns {{}} + * @constructor + */ +var UpgradeHelper = /*#__PURE__*/function () { + function UpgradeHelper() { + upgradeHelper_classCallCheck(this, UpgradeHelper); + this.Constants = { + BUTTON_POSITION_ITEM_NAME: '__adbpos' + }; + } + return upgradeHelper_createClass(UpgradeHelper, [{ + key: "getButtonPositionData", + value: function getButtonPositionData() { + try { + var userPosition = localStorage.getItem(this.Constants.BUTTON_POSITION_ITEM_NAME); + if (userPosition) { + return src_protectedApi.json.parse(userPosition); + } + return undefined; + } catch (ex) { + src_log.error(ex); + return undefined; + } + } + }, { + key: "removeUserPositionForButton", + value: function removeUserPositionForButton() { + try { + localStorage.removeItem(this.Constants.BUTTON_POSITION_ITEM_NAME); + } catch (ex) { + src_log.error(ex); + } + } + + // eslint-disable-next-line class-methods-use-this + }, { + key: "upgradeGmStorage", + value: function upgradeGmStorage(settings, version) { + settings.personal = {}; + settings.scriptVersion = version; + settings.personalConfig = true; + return settings; + } + + // Helper for assistant update from 4.1 to 4.2 + }, { + key: "upgradeLocalStorage", + value: function upgradeLocalStorage(settings, sitename) { + var position = this.getButtonPositionData(); + if (position) { + if (!settings.personal[sitename]) { + settings.personal[sitename] = {}; + } + settings.personal[sitename].position = position; + settings.personal[sitename].largeIcon = settings.largeIcon; + } + this.removeUserPositionForButton(); + return settings; + } + }]); +}(); +var upgradeHelper = new UpgradeHelper(); +/* harmony default export */ const src_upgradeHelper = (upgradeHelper); +;// ./src/gm.js +/* harmony default export */ const gm = ({}); +;// ./src/settings.js +function settings_typeof(o) { "@babel/helpers - typeof"; return settings_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, settings_typeof(o); } + + + + + + +/** + * Object that manages user settings. + * @returns {{ + * Constants: { + * MINIMUM_IE_SUPPORTED_VERSION: number, + * MINIMUM_VISIBLE_HEIGHT_TO_SHOW_BUTTON: number, + * BUTTON_POSITION_ITEM_NAME: string, + * IFRAME_ID: string, + * PREVIEW_STYLE_ID: string, + * BLOCKED_ELEMENTS_STYLE_ID: string + * }, + * MenuItemsNames: { + * DetailedMenu: string, + * SelectorMenu: string, + * SliderMenu: string, + * BlockPreview: string, + * SettingsMenu: string + * }, + * getSettings: getSettings, + * loadSettings: loadSettings, + * getWotData: getWotData, + * setWotData: setWotData, + * saveSettings: saveSettings, + * getUserPositionForButton: getUserPositionForButton, + * removeUserPositionForButton: removeUserPositionForButton, + * selectedElement: *, + * setAdguardSettings: setAdguardSettings, + * getAdguardSettings: getAdguardSettings + * }} + * @constructor + */ +function Settings() { + var Constants = { + MINIMUM_IE_SUPPORTED_VERSION: 10, + MINIMUM_VISIBLE_HEIGHT_TO_SHOW_BUTTON: 250, + IFRAME_ID: 'adguard-assistant-dialog', + PREVIEW_STYLE_ID: 'ag-preview-style-id', + BLOCKED_ELEMENTS_STYLE_ID: 'ag-hide-elements-style-id', + REPORT_URL: 'https://link.adtidy.org/forward.html?action=site_report_page&domain={0}&from=main_menu&app=assistant' + }; + var MenuItemsNames = { + DetailedMenu: 'mainMenu.html', + SelectorMenu: 'selectorMenu.html', + SliderMenu: 'sliderMenu.html', + BlockPreview: 'blockPreview.html', + SettingsMenu: 'settingsMenu.html' + }; + + /** + * Config data stored in GM storage + * @typedef {Object} DefaultConfig + * @property {boolean} buttonPositionTop - Static button position from top. + * @property {boolean} buttonPositionLeft - Static button position from left. + * @property {boolean} smallIcon - Button size. true - small, false - large. + * @property {boolean} personalConfig - Is the settings save for all + * sites or for each site individually. + * @property {number} scriptVersion - Version of scheme. 2 is set since assistant version 4.2. + * @property {object} personal - Object config that may includes the same properties, + * except `scriptVersion`, but for each site individually. + */ + var DefaultConfig = { + buttonPositionTop: false, + buttonPositionLeft: false, + smallIcon: false, + personalConfig: true, + scriptVersion: 2, + personal: {} + }; + var wotData = null; + var Config = null; + var adguardSettings = null; + var SITENAME = window.location.host; + var getSettings = function getSettings() { + return gm.getValue('settings').then(function (config) { + try { + return config && src_protectedApi.json.parse(config); + } catch (ex) { + src_log.error(ex); + return null; + } + }); + }; + var validateSettings = function validateSettings(settings) { + if (!settings) { + src_log.error('Invalid settings object'); + return false; + } + // eslint-disable-next-line no-restricted-syntax, prefer-const + for (var prop in settings) { + // eslint-disable-next-line no-prototype-builtins + if (!settings.hasOwnProperty(prop)) { + // eslint-disable-next-line no-continue + continue; + } + var property = DefaultConfig[prop]; + if (property && settings_typeof(property) !== settings_typeof(settings[prop])) { + src_log.error('Invalid settings object'); + return false; + } + } + if (settings.scriptVersion > DefaultConfig.scriptVersion) { + src_log.error('Invalid settings object'); + return false; + } + if (settings.scriptVersion < DefaultConfig.scriptVersion) { + src_log.info('Settings object is outdated. Updating...'); + // eslint-disable-next-line no-param-reassign + settings = src_upgradeHelper.upgradeGmStorage(settings, DefaultConfig.scriptVersion); + } + + // save to gm store position data from localStorage + // eslint-disable-next-line no-param-reassign + settings = src_upgradeHelper.upgradeLocalStorage(settings, SITENAME); + return settings; + }; + var loadSettings = function loadSettings(showButton) { + src_log.debug('Trying to get settings'); + + // getting config from gm storage + getSettings().then(function (config) { + // check and validate config data for prevent errors and backward compatibility + var checkedConfig = config && validateSettings(config); + if (checkedConfig) { + // saving existing settings to Config variable in the gm storage + Config = checkedConfig; + src_log.debug('Settings parsed successfully'); + } else { + // use default settings without saving + Config = DefaultConfig; + src_log.debug('No settings found'); + } + showButton(); + }); + }; + var saveSettings = function saveSettings(config) { + if (config) { + Config = config; + } + src_log.debug('Update settings...'); + src_log.debug(Config); + gm.setValue('settings', Config); + bypassCache(); + }; + var getWotData = wotData; + var setWotData = function setWotData(data) { + wotData = data; + }; + var setAdguardSettings = function setAdguardSettings(settings) { + if (typeof settings === 'undefined') { + src_log.info('No Adguard API Found'); + return; + } + adguardSettings = settings; + }; + var getAdguardSettings = function getAdguardSettings() { + return adguardSettings; + }; + var getUserPositionForButton = function getUserPositionForButton() { + var userPosition; + if (Config.personalConfig) { + if (Config.personal && Config.personal[SITENAME]) { + userPosition = Config.personal[SITENAME].position; + } + } else { + userPosition = Config.position; + } + if (userPosition) { + return userPosition; + } + return null; + }; + var setUserPositionForButton = function setUserPositionForButton(position) { + if (Config.personalConfig) { + if (!Config.personal[SITENAME]) { + Config.personal[SITENAME] = {}; + } + Config.personal[SITENAME].position = position; + } else { + Config.position = position; + } + saveSettings(Config); + }; + var setIconSize = function setIconSize(smallIcon) { + if (Config.personalConfig) { + Config.personal[SITENAME].smallIcon = smallIcon; + } else { + Config.smallIcon = smallIcon; + } + }; + var getIconSize = function getIconSize() { + if (Config.personalConfig && Config.personal && Config.personal[SITENAME]) { + return Config.personal[SITENAME].smallIcon; + } + return Config.smallIcon; + }; + + /** + * Set the parameters to which corner of the browser + * window the button position is placed by option (not drag) + */ + var setButtonSide = function setButtonSide(buttonSides) { + if (Config.personalConfig) { + delete Config.personal[SITENAME].position; + Config.personal[SITENAME].buttonPositionTop = buttonSides.top; + Config.personal[SITENAME].buttonPositionLeft = buttonSides.left; + } else { + delete Config.position; + Config.buttonPositionTop = buttonSides.top; + Config.buttonPositionLeft = buttonSides.left; + } + }; + + /** + * Save a setting that specifies how to save button settings: for all sites or only on this + */ + var setPersonalParam = function setPersonalParam(personalConfig) { + Config.personalConfig = personalConfig; + if (Config.personalConfig && !Config.personal) { + Config.personal = {}; + } + if (Config.personalConfig && !Config.personal[SITENAME]) { + Config.personal[SITENAME] = {}; + Config.personal[SITENAME].position = Config.position; + } + if (!Config.personalConfig && Config.personal) { + Config.position = Config.personal[SITENAME] && Config.personal[SITENAME].position; + delete Config.personal; + } + }; + + /** + * Get config that specifies how to save button settings: for all sites or only on this + */ + var getPersonalConfig = function getPersonalConfig() { + return Config.personalConfig; + }; + + /** + * Get the option to which corner of the browser window the button position is placed + * @return {Object} + */ + var getButtonSide = function getButtonSide() { + var config = Config; + if (config.personalConfig && config.personal && config.personal[SITENAME]) { + return { + top: config.personal[SITENAME].buttonPositionTop, + left: config.personal[SITENAME].buttonPositionLeft + }; + } + return { + top: config.buttonPositionTop, + left: config.buttonPositionLeft + }; + }; + return { + Constants: Constants, + MenuItemsNames: MenuItemsNames, + getSettings: getSettings, + loadSettings: loadSettings, + getWotData: getWotData, + setWotData: setWotData, + saveSettings: saveSettings, + getUserPositionForButton: getUserPositionForButton, + getButtonSide: getButtonSide, + setIconSize: setIconSize, + setUserPositionForButton: setUserPositionForButton, + setAdguardSettings: setAdguardSettings, + setPersonalParam: setPersonalParam, + setButtonSide: setButtonSide, + getAdguardSettings: getAdguardSettings, + getIconSize: getIconSize, + getPersonalConfig: getPersonalConfig + }; +} +var settings = new Settings(); +/* harmony default export */ const src_settings = (settings); +;// ./src/templates/button.html +// Module +var code = ` `; +// Exports +/* harmony default export */ const templates_button = (code); +;// ./src/templates/mainMenu.html +// Module +var mainMenu_code = `
`; +// Exports +/* harmony default export */ const mainMenu = (mainMenu_code); +;// ./src/templates/selectorMenu.html +// Module +var selectorMenu_code = `
`; +// Exports +/* harmony default export */ const selectorMenu = (selectorMenu_code); +;// ./src/templates/settingsMenu.html +// Module +var settingsMenu_code = `
`; +// Exports +/* harmony default export */ const settingsMenu = (settingsMenu_code); +;// ./src/templates/sliderMenu.html +// Module +var sliderMenu_code = `
`; +// Exports +/* harmony default export */ const sliderMenu = (sliderMenu_code); +;// ./src/templates/blockPreview.html +// Module +var blockPreview_code = `
`; +// Exports +/* harmony default export */ const blockPreview = (blockPreview_code); +;// ./src/templates/mobilePopup.html +// Module +var mobilePopup_code = `

`; +// Exports +/* harmony default export */ const mobilePopup = (mobilePopup_code); +;// ./src/templates/mobileMenu.html +// Module +var mobileMenu_code = ` `; +// Exports +/* harmony default export */ const mobileMenu = (mobileMenu_code); +;// ./src/templates/svgIcons.html +// Module +var svgIcons_code = ` `; +// Exports +/* harmony default export */ const svgIcons = (svgIcons_code); +// EXTERNAL MODULE: ./src/styles/base/base-common.less +var base_common = __nested_webpack_require_553913__(5640); +var base_common_default = /*#__PURE__*/__nested_webpack_require_553913__.n(base_common); +// EXTERNAL MODULE: ./src/styles/button.less +var styles_button = __nested_webpack_require_553913__(3623); +var button_default = /*#__PURE__*/__nested_webpack_require_553913__.n(styles_button); +// EXTERNAL MODULE: ./src/styles/menu.less +var menu = __nested_webpack_require_553913__(6644); +var menu_default = /*#__PURE__*/__nested_webpack_require_553913__.n(menu); +// EXTERNAL MODULE: ./src/styles/selector.less +var selector = __nested_webpack_require_553913__(4898); +var selector_default = /*#__PURE__*/__nested_webpack_require_553913__.n(selector); +// EXTERNAL MODULE: ./src/styles/mobile-style.less +var mobile_style = __nested_webpack_require_553913__(6501); +var mobile_style_default = /*#__PURE__*/__nested_webpack_require_553913__.n(mobile_style); +;// ./src/inline-resources.js + + + + + + + + + + + + + + +var CSS = { + common: (base_common_default()), + button: (button_default()), + iframe: (menu_default()), + selector: (selector_default()), + mobile: (mobile_style_default()) +}; +var HTML = { + button: templates_button, + detailed_menu: mainMenu, + selector_menu: selectorMenu, + settings_menu: settingsMenu, + slider_menu: sliderMenu, + preview: blockPreview, + popup: mobilePopup, + mobile_menu: mobileMenu, + svg_icons: svgIcons +}; +;// ./src/event.js +/** + * Custom event + * @returns {{attach: attach, notify: notify}} + * @constructor + */ +function CustomEvent() { + // jshint ignore:line + var listeners = []; + var attach = function attach(listener) { + listeners.push(listener); + }; + var notify = function notify(args) { + for (var i = 0; i < listeners.length; i += 1) { + listeners[i](args); + } + }; + return { + attach: attach, + notify: notify + }; +} +;// ./src/utils/dom-utils.js +function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); } +function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } +function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } } +function _arrayWithHoles(r) { if (Array.isArray(r)) return r; } +function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); } +function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } +function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } } +function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); } +function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); } +function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; } +/** + * Returns tag name for passed element + * @param {Element} element target element + */ +var getNodeName = function getNodeName(element) { + return element && element.nodeName ? element.nodeName.toUpperCase() : ''; +}; + +/** + * Returns arrays of parents for passed element + * @param {Element} element target element + */ +var getParentsLevel = function getParentsLevel(element) { + var parent = element; + var parentArr = []; + // eslint-disable-next-line no-cond-assign + while ((parent = parent.parentNode) && getNodeName(parent) !== 'BODY') { + parentArr.push(parent); + } + return parentArr; +}; + +/** + * Returns child element if it only one ELEMENT_NODE child + * @param {Element} element target element + */ +// eslint-disable-next-line consistent-return +var getSingleChildren = function getSingleChildren(element) { + var children = element.childNodes; + if (children) { + var count = 0; + var child; + for (var i = 0; i < children.length; i += 1) { + if (children[i].nodeType === 1) { + child = children[i]; + count += 1; + } + } + return count === 1 ? child : null; + } +}; + +/** + * Returns all children for target element + * @param {Element} element target element + */ +var getAllChildren = function getAllChildren(element) { + var childArray = []; + var child = element; + // eslint-disable-next-line no-cond-assign + while (child = getSingleChildren(child)) { + childArray.push(child); + } + return childArray; +}; + +/** + * Converts passed argument to array + * Usually used for transformatin NodeList to simple Array + * @param {any} elems + */ +var toArray = function toArray(elems) { + return elems && elems.length !== undefined ? Array.prototype.slice.call(elems) : [elems]; +}; + +/** + * Adds passed classes to target element + * @param {Element} elem target element + * @param {string} className string where classess must be separeted with space + */ +var addClass = function addClass(elem, className) { + var elems = toArray(elem); + elems.forEach(function (item) { + var classList = item.classList; + classList.add.apply(classList, _toConsumableArray(className.split(/\s/))); + }); +}; + +/** + * Removes passed classes from target element + * @param {Element} elem target element + * @param {string} className string where classess must be separeted with space + */ +var removeClass = function removeClass(elem, className) { + var elems = toArray(elem); + elems.forEach(function (item) { + var classList = item.classList; + classList.remove.apply(classList, _toConsumableArray(className.split(/\s/))); + }); +}; + +/** + * Checks whether class in target element + * @param {Element} elem target element + * @param {string} className target classname + */ +var hasClass = function hasClass(elem, className) { + var elems = toArray(elem); + var _elems = _slicedToArray(elems, 1), + target = _elems[0]; + return !!(target.classList && target.classList.contains(className)); +}; + +/** + * Makes element visible via style.display = block + * @param {Element} elem target element + */ +var show = function show(elem) { + var elems = toArray(elem); + elems.forEach(function (item) { + // eslint-disable-next-line no-param-reassign + item.style.display = 'block'; + }); +}; + +/** + * Makes element invisible via style.display = none + * @param {Element} elem target element + */ +var hide = function hide(elem) { + var elems = toArray(elem); + elems.forEach(function (item) { + // eslint-disable-next-line no-param-reassign + item.style.display = 'none'; + }); +}; + +/** + * Inlines css styles to target element + * @param {Element} elem target element + * @param {string} attr css name + * @param {string} value css value + */ +var addStyle = function addStyle(elem, attr, value) { + var elems = toArray(elem); + elems.forEach(function (item) { + // eslint-disable-next-line no-param-reassign + item.style[attr] = value; + }); +}; +// EXTERNAL MODULE: ./locales/index.js +var locales = __nested_webpack_require_553913__(8591); +;// ./src/localization.js +function localization_typeof(o) { "@babel/helpers - typeof"; return localization_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, localization_typeof(o); } +function localization_slicedToArray(r, e) { return localization_arrayWithHoles(r) || localization_iterableToArrayLimit(r, e) || localization_unsupportedIterableToArray(r, e) || localization_nonIterableRest(); } +function localization_nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } +function localization_unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return localization_arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? localization_arrayLikeToArray(r, a) : void 0; } } +function localization_arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; } +function localization_iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } } +function localization_arrayWithHoles(r) { if (Array.isArray(r)) return r; } +/* global AdguardSettings */ + + +var _require = __nested_webpack_require_553913__(6539), + _require2 = localization_slicedToArray(_require, 1), + BASE_LOCALE = _require2[0].base_locale; + +/** + * Object that manages localizations + * @returns {{getMessage: Function, translateElement: Function}} + * @constructor + */ +function Localization() { + var currentLocale = null; + var locale; + + // convert locales keys to lower case + var supportedLocales = Object.keys(locales["default"]).reduce(function (acc, key) { + var lowerCasedKey = key.toLowerCase(); + acc[lowerCasedKey] = locales["default"][key]; + return acc; + }, {}); + + /* + * In Edge, there is undocumented behavior. When you run the script + * through `executeScript`, the Edge browser blocks access to the + * `languages` property of the `navigator` object without displaying + * an error in the console and stopping the processing of the code. + * When you call `navigator.languages` manually from the console, + * there is no error and the correct value is returned. Therefore, + * it is necessary to check `typeof navigator.languages !== 'undefined'`. + * issue: https://github.com/AdguardTeam/AdguardBrowserExtension/issues/983 + */ + if (typeof AdguardSettings !== 'undefined') { + // eslint-disable-next-line prefer-destructuring + locale = AdguardSettings.locale; + } else if (typeof navigator.languages !== 'undefined') { + // eslint-disable-next-line prefer-destructuring + locale = navigator.languages[0]; + } else if (navigator.language) { + locale = navigator.language; + } else if (navigator.browserLanguage) { + locale = navigator.browserLanguage; + } else { + locale = BASE_LOCALE; + } + if (supportedLocales[locale]) { + currentLocale = locale; + } else if (supportedLocales[locale.toLowerCase()]) { + currentLocale = locale.toLowerCase(); + } else { + var langSplit = locale.split('-')[0]; + if (supportedLocales[langSplit]) { + currentLocale = langSplit; + } else { + currentLocale = BASE_LOCALE; + } + } + var getMessage = function getMessage(messageId) { + var message = supportedLocales[currentLocale][messageId]; + if (!message) { + return localization_typeof(supportedLocales[BASE_LOCALE][messageId]) === 'object' ? supportedLocales[BASE_LOCALE][messageId].message : supportedLocales[BASE_LOCALE][messageId] || ''; + } + return supportedLocales[currentLocale][messageId].message || supportedLocales[currentLocale][messageId]; + }; + var createElement = function createElement(tagName, attributes) { + var el = src_protectedApi.createElement(tagName); + if (!attributes) { + return el; + } + var attrs = attributes.split(/([a-z]+='[^']+')/); + for (var i = 0; i < attrs.length; i += 1) { + var attr = attrs[i].trim(); + if (!attr) { + // eslint-disable-next-line no-continue + continue; + } + var index = attr.indexOf('='); + var attrName = void 0; + var attrValue = void 0; + if (index > 0) { + attrName = attr.substring(0, index); + attrValue = attr.substring(index + 2, attr.length - 1); + } + if (attrName && attrValue) { + el.setAttribute(attrName, attrValue); + } + } + return el; + }; + var _processString = function processString(str, element) { + var el; + var match1 = /^([^]*?)<(a|strong|span|i)([^>]*)>(.*?)<\/\2>([^]*)$/m.exec(str); + var match2 = /^([^]*?)<(br|input)([^>]*)\/?>([^]*)$/m.exec(str); + if (match1) { + _processString(match1[1], element); + el = createElement(match1[2], match1[3]); + _processString(match1[4], el); + element.appendChild(el); + _processString(match1[5], element); + } else if (match2) { + _processString(match2[1], element); + el = createElement(match2[2], match2[3]); + element.appendChild(el); + _processString(match2[4], element); + } else { + element.appendChild(document.createTextNode(str.replace(/ /g, "\xA0"))); + } + }; + var translateElement = function translateElement(element, message) { + try { + while (element.lastChild) { + element.removeChild(element.lastChild); + } + _processString(message, element); + } catch (ex) { + // Ignore exceptions + } + }; + return { + getMessage: getMessage, + translateElement: translateElement + }; +} +var localization = new Localization(); +/* harmony default export */ const src_localization = (localization); +;// ./src/controllers/mainMenuController.js + + + + + + + + + +/** + * Main menu controller + * @param iframe + * @returns {{init: init}} + * @constructor + */ +function DetailedMenuController(iframe) { + var contentDocument = null; + var iframeCtrl = iframe; + var domain = null; + var FILTERING_STATE_LS_PROPERTY = '__adfstate'; + var CONFIDENCE_LEVEL = { + ZERO: { + from: 0, + to: 5 + }, + ONE: { + from: 6, + to: 11 + }, + TWO: { + from: 12, + to: 22 + }, + THREE: { + from: 23, + to: 33 + }, + FOUR: { + from: 34, + to: 44 + }, + FIVE: { + from: 45, + to: Infinity + } + }; + var setDomain = function setDomain() { + domain = decodeURIComponent(window.location.hostname); + contentDocument.getElementsByClassName('menu-head_name')[0].textContent = domain || 'unknown'; + }; + var truncateDecimals = function truncateDecimals(number) { + return Math[number < 0 ? 'ceil' : 'floor'](number); + }; + var getWotReputationSettings = function getWotReputationSettings(wotData) { + if (!wotData) { + return null; + } + var prefix = 'adg-wot-'; + var averageWot = wotData.reputation; + var wotRatingText = null; + var wotRating = null; + if (averageWot === 0) { + wotRatingText = src_localization.getMessage('wot_unknown_description'); + wotRating = "".concat(prefix, "unknown"); + return { + text: wotRatingText, + "class": wotRating + }; + } + var wotSettings = { + 0: { + color: 'red', + string: src_localization.getMessage('wot_bad_description') + }, + 1: { + color: 'lightRed', + string: src_localization.getMessage('wot_poor_description') + }, + 2: { + color: 'yellow', + string: src_localization.getMessage('wot_unsatisfactory_description') + }, + 3: { + color: 'lightGreen', + string: src_localization.getMessage('wot_good_description') + }, + 4: { + color: 'green', + string: src_localization.getMessage('wot_excellent_description') + }, + 5: { + color: 'green', + string: src_localization.getMessage('wot_excellent_description') + } + }; + var current = wotSettings[truncateDecimals(averageWot / 20)]; + wotRatingText = current.string; + wotRating = prefix + current.color; + return { + text: wotRatingText, + "class": wotRating + }; + }; + var getWotConfidenceClass = function getWotConfidenceClass(wotData) { + if (!wotData) { + return null; + } + var prefix = 'adg-wot-confidence-'; + var isThisLevel = function isThisLevel(num, level) { + return num >= level.from && num <= level.to; + }; + var confidenceWot = wotData.confidence; + if (isThisLevel(confidenceWot, CONFIDENCE_LEVEL.ZERO)) { + return "".concat(prefix, "0"); + } + if (isThisLevel(confidenceWot, CONFIDENCE_LEVEL.ONE)) { + return "".concat(prefix, "1"); + } + if (isThisLevel(confidenceWot, CONFIDENCE_LEVEL.TWO)) { + return "".concat(prefix, "2"); + } + if (isThisLevel(confidenceWot, CONFIDENCE_LEVEL.THREE)) { + return "".concat(prefix, "3"); + } + if (isThisLevel(confidenceWot, CONFIDENCE_LEVEL.FOUR)) { + return "".concat(prefix, "4"); + } + if (isThisLevel(confidenceWot, CONFIDENCE_LEVEL.FIVE)) { + return "".concat(prefix, "5"); + } + return undefined; + }; + var setWotData = function setWotData() { + var wotData = src_wot.getWotData(); + var wotReputationSettings = getWotReputationSettings(wotData); + if (!wotReputationSettings) { + return; + } + var wotIndication = contentDocument.querySelector('#WotIndication'); + addClass(wotIndication, wotReputationSettings["class"]); + wotIndication.dataset.title = src_localization.getMessage('menu_wot_reputation_indicator'); + var wotDescriptionText = contentDocument.querySelector('#WotDescriptionText'); + var wotLogo = ''; + src_protectedApi.setInnerHtml(wotDescriptionText, wotReputationSettings.text.replace('$1', wotLogo)); + var confidenceIndication = contentDocument.querySelector('#ConfidenceIndication'); + var wotConfidenceClass = getWotConfidenceClass(wotData); + addClass(confidenceIndication, wotConfidenceClass); + wotIndication.dataset.title = src_localization.getMessage('menu_wot_reputation_confidence_level'); + var wotLinkElem = contentDocument.querySelector('.wot-indicator'); + wotLinkElem.href = src_wot.getWotScorecardUrl(domain); + removeClass(contentDocument.querySelectorAll('.wot-hide'), 'wot-hide'); + }; + var startAdSelector = function startAdSelector() { + iframeCtrl.showSelectorMenu(); + }; + var goToWotUrl = function goToWotUrl() { + window.open(src_wot.WOT_URL, '_blank'); + }; + var doNotBlock = function doNotBlock() { + gm.ADG_temporaryDontBlock(30, function () { + reloadPageBypassCache(); + }); + }; + var reportAbuse = function reportAbuse() { + gm.ADG_sendAbuse(function () { + iframeCtrl.removeIframe(); + }); + }; + var goToSiteReport = function goToSiteReport() { + var url = src_settings.Constants.REPORT_URL.replace('{0}', domain); + window.open(url, '_blank'); + }; + var showHideBlockAdButton = function showHideBlockAdButton(isFilter) { + var blockAd = contentDocument.querySelector('#block-ad'); + if (isFilter) { + removeClass(blockAd, 'hidden'); + } else { + addClass(blockAd, 'hidden'); + } + iframeCtrl.resizeIframe(); + }; + + /** + * Storing the filtering state for quick initialization + * + * @param {Boolean} state on/off filtering state + */ + // eslint-disable-next-line consistent-return + var setFilteringStateToStore = function setFilteringStateToStore(state) { + try { + localStorage.setItem(FILTERING_STATE_LS_PROPERTY, src_protectedApi.json.stringify({ + state: state + })); + } catch (ex) { + src_log.error(ex); + return null; + } + }; + var onIsFilterChange = function onIsFilterChange() { + var isFilter = contentDocument.getElementById('is-filter').checked; + + // animate class for prevent animation while the state from the application is determined + addClass(contentDocument.querySelectorAll('.menu-filter_label'), 'animate'); + showHideBlockAdButton(isFilter); + setFilteringStateToStore(isFilter); + gm.ADG_changeFilteringState(isFilter, function () { + reloadPageBypassCache(); + }); + }; + var bindEvents = function bindEvents() { + var menuEvents = { + '.close': iframeCtrl.removeIframe, + '#block-ad': startAdSelector, + '#assistant-settings': iframeCtrl.showSettingsMenu, + '#WotLogo': goToWotUrl, + '#do-not-block-30-sec': doNotBlock, + '#report-abuse': reportAbuse, + '#site-report': goToSiteReport, + '#is-filter': onIsFilterChange + }; + Object.keys(menuEvents).forEach(function (item) { + var elems = contentDocument.querySelectorAll(item); + toArray(elems).forEach(function (elem) { + return elem.addEventListener('click', menuEvents[item]); + }); + }); + }; + + /** + * Getting the filtering state for quick initialization from the localStorage, + * while the state from the application is determined + * + * @returns {Boolean} on/off filtering state + */ + var getFilteringStateFromStore = function getFilteringStateFromStore() { + try { + var state = localStorage.getItem(FILTERING_STATE_LS_PROPERTY); + if (state) { + return src_protectedApi.json.parse(state).state; + } + return false; + } catch (ex) { + src_log.error(ex); + return false; + } + }; + var setInitFilteringState = function setInitFilteringState() { + var input = contentDocument.getElementById('is-filter'); + input.checked = getFilteringStateFromStore(); + gm.ADG_isFiltered(function (isFiltered) { + input.checked = isFiltered; + setFilteringStateToStore(isFiltered); + showHideBlockAdButton(isFiltered); + }); + }; + + /* + Called from IframeController._showMenuItem to initialize view + */ + // eslint-disable-next-line no-shadow + var init = function init(iframe) { + // eslint-disable-next-line prefer-destructuring + contentDocument = iframe.contentDocument; + setDomain(); + setWotData(); + bindEvents(); + setInitFilteringState(); + }; + return { + init: init + }; +} +;// ./src/adguard-selector.js +function adguard_selector_typeof(o) { "@babel/helpers - typeof"; return adguard_selector_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, adguard_selector_typeof(o); } +/* eslint-disable no-param-reassign, func-names */ + + + +/** + * Adguard selector + * @type {Function} + */ +function AdguardSelector() { + var api = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + var PLACEHOLDER_PREFIX = 'adguard-placeholder'; + var placeholdedElements = null; + var transparentPlaceholdedElement = null; + var restrictedElements = null; + var SELECTED_CLASS = 'adguard_sg_selected'; + var REJECTED_CLASS = 'adguard_sg_rejected'; + var IGNORED_CLASS = 'adguard_sg_ignore'; + var unbound = true; + var onElementSelectedHandler = null; + var ignoreTouchEvent = 0; + var selectionRenderer; + + // PRIVATE METHODS + + var removeClassName = function removeClassName(className) { + var elem = document.querySelectorAll(".".concat(className)); + removeClass(elem, className); + }; + var firstSelectedOrSuggestedParent = function firstSelectedOrSuggestedParent(element) { + if (hasClass(element, SELECTED_CLASS)) { + return element; + } + + // eslint-disable-next-line no-cond-assign, no-param-reassign + while (element.parentNode && (element = element.parentNode)) { + if (restrictedElements.indexOf(element) === -1) { + if (hasClass(element, SELECTED_CLASS)) { + return element; + } + } + } + return null; + }; + var px = function px(p) { + return "".concat(p, "px"); + }; + var getTagPath = function getTagPath(element) { + if (element.parentNode) { + return "".concat(element.parentNode.tagName.toLowerCase(), " ").concat(element.tagName.toLowerCase()); + } + return element.tagName.toLowerCase(); + }; + + /** ******** Events ************** */ + var sgMouseoverHandler = function sgMouseoverHandler(e) { + e.stopPropagation(); + if (unbound) { + return true; + } + if (this === document.documentElement || this === document.documentElement.parentNode) { + return false; + } + var parent = firstSelectedOrSuggestedParent(this); + if (parent !== null && parent !== this) { + selectionRenderer.add(parent); + } else { + selectionRenderer.add(this); + } + return false; + }; + + // e.isTrusted checking for prevent programmatically events + // see: https://github.com/AdguardTeam/AdguardAssistant/issues/134 + var sgMousedownHandler = function sgMousedownHandler(e) { + if (e && e.isTrusted === false) { + return false; + } + if (hasClass(e.target, IGNORED_CLASS)) { + return false; + } + e.preventDefault(); + e.stopImmediatePropagation(); + if (unbound) { + return true; + } + var elem = e.target; + var borders = elem === selectionRenderer.borderTop || elem === selectionRenderer.borderLeft || elem === selectionRenderer.borderRight || elem === selectionRenderer.borderBottom; + if (borders) { + // Clicked on one of our floating borders, target the element that we are bordering. + elem = elem.target_elem || elem; + } + if (elem === document.documentElement || elem === document.documentElement.parentNode) { + return undefined; + } + selectionRenderer.remove(); + onElementSelectedHandler(elem); + return false; + }; + + /** ******** Touch event handlers ************** */ + var touchElementSelectHandler = function touchElementSelectHandler(e) { + e.preventDefault(); + e.stopImmediatePropagation(); + sgMouseoverHandler.call(this, e); + sgMousedownHandler.call(this, e); + }; + var removeElementToPreventEvents = function removeElementToPreventEvents() { + if (!transparentPlaceholdedElement) { + return false; + } + transparentPlaceholdedElement.removeEventListener('click', touchElementSelectHandler); + transparentPlaceholdedElement.removeEventListener('touchstart', touchElementSelectHandler); + transparentPlaceholdedElement.removeEventListener('pointerdown', touchElementSelectHandler); + transparentPlaceholdedElement.parentNode.removeChild(transparentPlaceholdedElement); + transparentPlaceholdedElement = null; + return undefined; + }; + var clearSelected = function clearSelected() { + removeElementToPreventEvents(); + removeClassName(SELECTED_CLASS); + removeClassName(REJECTED_CLASS); + selectionRenderer.remove(); + }; + + /** + * Returns element offset coordinates extended with width and height values. + * + * @param elem + * @returns {{top: number, left: number, outerWidth: number, outerHeight: number}} + */ + var getOffsetExtended = function getOffsetExtended(elem) { + var bodyRect = document.documentElement.getBoundingClientRect(); + var elemRect = elem.getBoundingClientRect(); + var rectTop = elemRect.top - bodyRect.top; + var rectLeft = elemRect.left - bodyRect.left; + return { + top: rectTop, + left: rectLeft, + outerWidth: elem.offsetWidth, + outerHeight: elem.offsetHeight + }; + }; + + /** + * Adds borders to selected element. + * + * Default implementation of selection renderer. + * Can be overwritten with custom implementation as a parameter of init function. + * + * @param element + * @private + */ + // eslint-disable-next-line no-shadow + var BorderSelectionRenderer = function (api) { + var BORDER_WIDTH = 5; + var BORDER_PADDING = 2; + var BORDER_CSS = { + position: 'absolute', + background: 'white', + margin: '0px', + padding: '0px', + display: 'block', + "float": 'none', + border: '0', + outline: '0', + 'background-color': '#13a35e', + 'font-style': 'normal', + 'vertical-align': 'baseline', + 'text-align': 'left', + 'line-height': '12px', + 'box-sizing': 'content-box', + 'min-height': 'auto', + 'max-height': 'auto', + 'min-width': 'auto', + 'max-width': 'auto', + width: 0, + height: 0, + 'z-index': 2147483646, + 'border-radius': 0 + }; + var BORDER_BOTTOM_CSS = { + 'font-size': '10px', + 'font-weight': 'bold', + color: 'white', + padding: '2px 0px 2px 5px', + overflow: 'hidden' + }; + var borderTop = null; + var borderLeft = null; + var borderRight = null; + var borderBottom = null; + var showBorders = function showBorders() { + if (borderTop && borderBottom && borderLeft && borderRight) { + show(borderTop); + show(borderBottom); + show(borderLeft); + show(borderRight); + } + }; + var addBorderToDom = function addBorderToDom() { + document.documentElement.appendChild(borderTop); + document.documentElement.appendChild(borderBottom); + document.documentElement.appendChild(borderLeft); + document.documentElement.appendChild(borderRight); + }; + var addBorderCSS = function addBorderCSS() { + Object.keys(BORDER_CSS).forEach(function (item) { + borderTop.style[item] = BORDER_CSS[item]; + borderBottom.style[item] = BORDER_CSS[item]; + borderLeft.style[item] = BORDER_CSS[item]; + borderRight.style[item] = BORDER_CSS[item]; + }); + Object.keys(BORDER_BOTTOM_CSS).forEach(function (item) { + borderBottom.style[item] = BORDER_BOTTOM_CSS[item]; + }); + }; + var removeBorderFromDom = function removeBorderFromDom() { + if (borderTop) { + var parent = borderTop.parentNode; + if (parent) { + parent.removeChild(borderTop); + parent.removeChild(borderBottom); + parent.removeChild(borderLeft); + parent.removeChild(borderRight); + } + } + borderTop = null; + borderBottom = null; + borderRight = null; + borderLeft = null; + }; + + /** + * Preparing renderer. + */ + api.init = function () { + if (!borderTop) { + var width = px(BORDER_WIDTH); + var bottomHeight = px(BORDER_WIDTH + 6); + borderTop = src_protectedApi.createElement('div'); + borderBottom = src_protectedApi.createElement('div'); + borderLeft = src_protectedApi.createElement('div'); + borderRight = src_protectedApi.createElement('div'); + borderTop.addEventListener('click', sgMousedownHandler); + borderBottom.addEventListener('click', sgMousedownHandler); + borderLeft.addEventListener('click', sgMousedownHandler); + borderRight.addEventListener('click', sgMousedownHandler); + addStyle(borderTop, 'height', width); + addStyle(borderBottom, 'height', bottomHeight); + addStyle(borderLeft, 'width', width); + addStyle(borderRight, 'width', width); + hide(borderTop); + hide(borderBottom); + hide(borderLeft); + hide(borderRight); + + // eslint-disable-next-line prefer-destructuring + api.borderTop = borderTop; + // eslint-disable-next-line prefer-destructuring + api.borderBottom = borderBottom; + // eslint-disable-next-line prefer-destructuring + api.borderLeft = borderLeft; + // eslint-disable-next-line prefer-destructuring + api.borderRight = borderRight; + addBorderCSS(); + addBorderToDom(); + } + }; + + /** + * Clearing DOM and so on. + */ + api.finalize = function () { + removeBorderFromDom(); + }; + + /** + * Adds borders to specified element + * + * @param element + */ + api.add = function (element) { + api.remove(); + if (!element) { + return; + } + var p = getOffsetExtended(element); + var top = p.top; + var left = p.left; + var width = p.outerWidth; + var height = p.outerHeight; + addStyle(borderTop, 'width', px(width + BORDER_PADDING * 2 + BORDER_WIDTH * 2)); + addStyle(borderTop, 'height', px(5)); + addStyle(borderTop, 'top', px(top - BORDER_WIDTH - BORDER_PADDING)); + addStyle(borderTop, 'left', px(left - BORDER_PADDING - BORDER_WIDTH)); + addStyle(borderBottom, 'width', px(width + BORDER_PADDING * 2 + BORDER_WIDTH)); + addStyle(borderBottom, 'height', px(12)); + addStyle(borderBottom, 'top', px(top + height + BORDER_PADDING)); + addStyle(borderBottom, 'left', px(left - BORDER_PADDING - BORDER_WIDTH)); + addStyle(borderLeft, 'height', px(height + BORDER_PADDING * 2)); + addStyle(borderLeft, 'width', px(5)); + addStyle(borderLeft, 'top', px(top - BORDER_PADDING)); + addStyle(borderLeft, 'left', px(left - BORDER_PADDING - BORDER_WIDTH)); + addStyle(borderRight, 'height', px(height + BORDER_PADDING * 2)); + addStyle(borderRight, 'width', px(5)); + addStyle(borderRight, 'top', px(top - BORDER_PADDING)); + addStyle(borderRight, 'left', px(left + width + BORDER_PADDING)); + borderBottom.textContent = getTagPath(element); + borderRight.target_elem = element; + borderLeft.target_elem = element; + borderTop.target_elem = element; + borderBottom.target_elem = element; + showBorders(); + }; + + /** + * Removes borders + */ + api.remove = function () { + if (borderTop && borderBottom && borderLeft && borderRight) { + hide(borderTop); + hide(borderBottom); + hide(borderLeft); + hide(borderRight); + } + }; + return api; + // eslint-disable-next-line no-use-before-define + }(BorderSelectionRenderer || {}); + var linkHelper = src_protectedApi.createElement('a'); + var getHost = function getHost(url) { + if (!url) { + return ''; + } + linkHelper.href = url; + return linkHelper.hostname; + }; + var makePlaceholderImage = function makePlaceholderImage(element) { + var placeHolder = src_protectedApi.createElement('div'); + var style = window.getComputedStyle(element); + placeHolder.style.height = style.height; + placeHolder.style.width = style.width; + placeHolder.style.position = style.position; + placeHolder.style.top = style.top; + placeHolder.style.bottom = style.bottom; + placeHolder.style.left = style.left; + placeHolder.style.right = style.right; + placeHolder.className += "".concat(PLACEHOLDER_PREFIX, " ").concat(IGNORED_CLASS); + var icon = src_protectedApi.createElement('div'); + icon.className += "".concat(PLACEHOLDER_PREFIX, "-icon ").concat(IGNORED_CLASS); + var domain = src_protectedApi.createElement('div'); + domain.textContent = getHost(element.src); + domain.className += "".concat(PLACEHOLDER_PREFIX, "-domain ").concat(IGNORED_CLASS); + icon.appendChild(domain); + placeHolder.appendChild(icon); + return placeHolder; + }; + var removePlaceholders = function removePlaceholders() { + removeElementToPreventEvents(); + if (!placeholdedElements) { + return; + } + var elements = placeholdedElements; + for (var i = 0; i < elements.length; i += 1) { + var current = elements[i]; + var id = PLACEHOLDER_PREFIX + i; + var placeHolder = document.querySelector("#".concat(id)); + if (placeHolder) { + var parent = placeHolder.parentNode; + if (parent) { + parent.replaceChild(current, placeHolder); + } + } + } + placeholdedElements = null; + }; + var placeholderClick = function placeholderClick(element) { + selectionRenderer.remove(); + removePlaceholders(); + onElementSelectedHandler(element); + }; + + /** + * Making top level transparent layer to prevented events on emerging ad. + * see: https://github.com/AdguardTeam/AdguardAssistant/issues/220 + * + * @param element element where ad is added + */ + var preventEvents = function preventEvents(element) { + var placeHolder = src_protectedApi.createElement('div'); + var style = getOffsetExtended(element); + placeHolder.style.height = px(style.outerHeight); + placeHolder.style.width = px(style.outerWidth); + placeHolder.style.top = px(style.top); + placeHolder.style.left = px(style.left); + placeHolder.style.background = 'transparent'; + placeHolder.style.position = 'absolute'; + placeHolder.style['pointer-events'] = 'all'; + placeHolder.style['box-sizing'] = 'content-box'; + placeHolder.style['z-index'] = '2147483646'; + placeHolder.className += IGNORED_CLASS; + transparentPlaceholdedElement = placeHolder; + placeHolder.addEventListener('click', touchElementSelectHandler); + placeHolder.addEventListener('touchstart', touchElementSelectHandler); + placeHolder.addEventListener('pointerdown', touchElementSelectHandler); + document.documentElement.appendChild(placeHolder); + }; + var gestureEndHandler = function gestureEndHandler() { + ignoreTouchEvent = 2; + return true; + }; + var touchMoveHandler = function touchMoveHandler() { + ignoreTouchEvent = 1; + return true; + }; + var needIgnoreTouchEvent = function needIgnoreTouchEvent() { + if (ignoreTouchEvent > 0) { + ignoreTouchEvent -= 1; + return true; + } + return false; + }; + var makeIFrameAndEmbeddedSelector = function makeIFrameAndEmbeddedSelector() { + var iframeElements = document.querySelectorAll("iframe:not(.".concat(IGNORED_CLASS, "),embed,object")); + placeholdedElements = toArray(iframeElements).filter(function (elem) { + var isVisible = elem.style.display !== 'none'; + var isHaveSize = elem.offsetWidth !== 0 && elem.offsetHeight !== 0; + return isVisible && isHaveSize; + }); + var _loop = function _loop(i) { + var current = placeholdedElements[i]; + // eslint-disable-next-line no-shadow + (function (current) { + var placeHolder = makePlaceholderImage(current); + var id = PLACEHOLDER_PREFIX + i; + placeHolder.setAttribute('id', id); + var parent = current.parentNode; + if (parent) { + parent.replaceChild(placeHolder, current); + placeHolder.addEventListener('gestureend', gestureEndHandler); + placeHolder.addEventListener('touchmove', touchMoveHandler); + // eslint-disable-next-line consistent-return + placeHolder.addEventListener('touchend', function (e) { + e.preventDefault(); + if (needIgnoreTouchEvent()) { + return true; + } + placeholderClick(current); + }); + var elems = document.querySelectorAll("#".concat(id)); + toArray(elems).forEach(function (elem) { + elem.addEventListener('click', function (e) { + e.preventDefault(); + placeholderClick(current); + }); + }); + } + })(current); + }; + for (var i = 0; i < placeholdedElements.length; i += 1) { + _loop(i); + } + }; + var sgMouseoutHandler = function sgMouseoutHandler() { + if (unbound) { + return true; + } + if (this === document.documentElement || this === document.documentElement.parentNode) { + return false; + } + selectionRenderer.remove(); + return false; + }; + var elementTouchendHandler = function elementTouchendHandler(e) { + if (hasClass(e.target, IGNORED_CLASS)) { + return false; + } + e.stopPropagation(); + if (needIgnoreTouchEvent()) { + return true; + } + touchElementSelectHandler.call(this, e); + return false; + }; + var emptyEventHandler = function emptyEventHandler(e) { + e.stopPropagation(); + return false; + }; + var setupEventHandlers = function setupEventHandlers() { + makeIFrameAndEmbeddedSelector(); + var elements = document.querySelectorAll("body *:not(.".concat(IGNORED_CLASS, ")")); + toArray(elements).forEach(function (el) { + el.addEventListener('gestureend', gestureEndHandler); + el.addEventListener('touchmove', touchMoveHandler); + el.addEventListener('touchend', elementTouchendHandler, true); + el.addEventListener('touchstart', emptyEventHandler); + el.addEventListener('mouseover', sgMouseoverHandler); + el.addEventListener('mouseout', sgMouseoutHandler); + el.addEventListener('click', sgMousedownHandler, true); + }); + }; + var deleteEventHandlers = function deleteEventHandlers() { + removePlaceholders(); + var elements = document.querySelectorAll('body *'); + toArray(elements).forEach(function (el) { + el.removeEventListener('gestureend', gestureEndHandler); + el.removeEventListener('touchmove', touchMoveHandler); + el.removeEventListener('touchend', elementTouchendHandler, true); + el.removeEventListener('touchstart', emptyEventHandler); + el.removeEventListener('mouseover', sgMouseoverHandler); + el.removeEventListener('mouseout', sgMouseoutHandler); + el.removeEventListener('click', sgMousedownHandler, true); + }); + }; + + // Define default implementation of selection renderer. + selectionRenderer = BorderSelectionRenderer; + + // PUBLIC API + + /** + * Starts selector module. + * + * @param onElementSelected callback function + * @param selectionRenderImpl optional object contains selection presentation implementation + */ + api.init = function (onElementSelected, selectionRenderImpl) { + onElementSelectedHandler = onElementSelected; + if (selectionRenderImpl && adguard_selector_typeof(selectionRenderImpl) === 'object') { + selectionRenderer = selectionRenderImpl; + } + restrictedElements = ['html', 'body', 'head', 'base'].map(function (selector) { + return document.querySelector(selector); + }); + selectionRenderer.init(); + setupEventHandlers(); + unbound = false; + }; + + /** + * Resets state of selector. + * Clears current selection. + */ + api.reset = function () { + clearSelected(); + }; + + /** + * Destroys selector module. + * Removes all selector elements and unbinds event handlers. + */ + api.close = function () { + unbound = true; + selectionRenderer.finalize(); + deleteEventHandlers(); + }; + + /** + * Selects specified element. + * Marks element as selected and holds selection on it. + * + * @param element + */ + api.selectElement = function (element) { + selectionRenderer.add(element); + removePlaceholders(); + unbound = true; + preventEvents(element); + }; + + /** + Returns css class name. + If this class assigns to HTML element, then Adguard Selector ignores it. + */ + // eslint-disable-next-line func-names + api.ignoreClassName = function () { + return IGNORED_CLASS; + }; + return api; +} +var adguard_selector_selector = new AdguardSelector(); +/* harmony default export */ const adguard_selector = (adguard_selector_selector); +;// ./src/controllers/selectorMenuController.js + + + +/** + * Selector menu controller + * @returns {{init: init}} + * @constructor + */ +function SelectorMenuController(iframe) { + var contentDocument = null; + var iframeCtrl = iframe; + var close = function close() { + iframeCtrl.removeIframe(); + }; + var bindEvents = function bindEvents() { + var menuEvents = { + '.main_close': close, + '.btn-default': close + }; + Object.keys(menuEvents).forEach(function (item) { + var elems = contentDocument.querySelectorAll(item); + toArray(elems).forEach(function (elem) { + return elem.addEventListener('click', menuEvents[item]); + }); + }); + }; + var onElementSelected = function onElementSelected(element) { + iframeCtrl.showSliderMenu(element); + }; + var startSelector = function startSelector() { + adguard_selector.reset(); + adguard_selector.init(onElementSelected); + }; + + /* + Called from IframeController._showMenuItem to initialize view + */ + // eslint-disable-next-line no-shadow + var init = function init(iframe) { + // eslint-disable-next-line prefer-destructuring + contentDocument = iframe.contentDocument; + bindEvents(); + startSelector(); + }; + iframeCtrl.onCloseMenu.attach(adguard_selector.close); + return { + init: init, + startSelector: startSelector + }; +} +;// ./src/slider-widget.js + + +/** + * Slider widget + * @type {Function} + */ +function SliderWidget() { + var api = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + var CLUE_CLASS = 'adg-slide_clue'; + var CLUE_MIN_CLASS = "".concat(CLUE_CLASS, " ").concat(CLUE_CLASS, "--min"); + var CLUE_MAX_CLASS = "".concat(CLUE_CLASS, " ").concat(CLUE_CLASS, "--max"); + var TRACK_CLASS = 'adg-slide_track'; + var HANDLE_CLASS = 'adg-slide_handle'; + var TICK_CLASS = 'adg-slide_tick'; + var TICK_ACTIVE_CLASS = "".concat(TICK_CLASS, " ").concat(TICK_CLASS, "--active"); + + // Horizontal padding of the track, should match with .adg-slide_track class in CSS + var TRACK_OFFSET = 28; + var placeholder = null; + var clueMin = null; + var clueMax = null; + var track = null; + var handle = null; + var ticks = null; + var min = 0; + var max = 1; + var value = 0; + var onValueChanged = null; + + /* + * Updates slider UI. + * + * @param {number} newValue Value to set for slider. + */ + var updateSliderUi = function updateSliderUi(newValue) { + // Clamp the new value between min and max + if (newValue < min) { + value = min; + } else if (newValue > max) { + value = max; + } else { + value = newValue; + } + + // Update handle position + var trackWidth = track.offsetWidth - TRACK_OFFSET * 2; + var valueRange = max - min; + var valuePercentage = (value - min) / valueRange; + var handlePosition = valuePercentage * trackWidth + TRACK_OFFSET; + handle.style.left = "".concat(handlePosition, "px"); + + // Activate all ticks up to the new value + for (var i = 0; i < ticks.length; i += 1) { + // Add `min`, because ticks are 0-based, but values are starts from `min` + if (i + min < value) { + ticks[i].setAttribute('class', TICK_ACTIVE_CLASS); + } else { + ticks[i].setAttribute('class', TICK_CLASS); + } + } + }; + + /* + * Checks if value changed, updates slider and fires value changed event. + * + * @param {number} newValue Value to set for slider. + */ + var activateValue = function activateValue(newValue) { + // Do nothing if the value is the same + if (newValue === value) { + return; + } + updateSliderUi(newValue); + onValueChanged(value); + }; + var render = function render() { + // Render clue min + clueMin = src_protectedApi.createElement('div'); + clueMin.setAttribute('class', CLUE_MIN_CLASS); + clueMin.textContent = 'Min'; + placeholder.appendChild(clueMin); + + // Render clue max + clueMax = src_protectedApi.createElement('div'); + clueMax.setAttribute('class', CLUE_MAX_CLASS); + clueMax.textContent = 'Max'; + placeholder.appendChild(clueMax); + + // Render handle + handle = src_protectedApi.createElement('div'); + handle.setAttribute('class', HANDLE_CLASS); + + // Render track + track = src_protectedApi.createElement('div'); + track.setAttribute('class', TRACK_CLASS); + track.appendChild(handle); + placeholder.appendChild(track); + + // Render ticks + var tickCount = max - min; + ticks = []; + for (var i = 0; i < tickCount; i += 1) { + var tick = src_protectedApi.createElement('div'); + tick.setAttribute('class', TICK_CLASS); + track.appendChild(tick); + ticks.push(tick); + } + }; + var bindEvents = function bindEvents() { + clueMin.addEventListener('click', function () { + activateValue(min); + }); + clueMax.addEventListener('click', function () { + activateValue(max); + }); + + // Track dragging logic using pointer events with pointer capture + track.addEventListener('pointerdown', function (pointerDownEvent) { + // Prevent default behavior to avoid text selection during dragging + pointerDownEvent.preventDefault(); + + // Set pointer capture to the track element + track.setPointerCapture(pointerDownEvent.pointerId); + + // Flag to track active dragging + var isDragging = true; + + // Calculate the value based on pointer position + var calculateValueFromPosition = function calculateValueFromPosition(clientX) { + var trackRect = track.getBoundingClientRect(); + var trackWidth = trackRect.width - TRACK_OFFSET * 2; + var valueRange = max - min; + + // Calculate the offset within the track, accounting for padding + var offsetX = clientX - trackRect.left - TRACK_OFFSET; + + // Keep offset within bounds + if (offsetX < 0) { + offsetX = 0; + } + if (offsetX > trackWidth) { + offsetX = trackWidth; + } + + // Calculate value based on position + var valuePercentage = offsetX / trackWidth; + var newValue = min + valuePercentage * valueRange; + + // Round to nearest value + return Math.round(newValue); + }; + + // Set initial value based on where the user clicked + activateValue(calculateValueFromPosition(pointerDownEvent.clientX)); + + // Handle pointer movement + var handlePointerMove = function handlePointerMove(pointerMoveEvent) { + if (!isDragging) { + return; + } + + // Prevent default to avoid unwanted side effects + pointerMoveEvent.preventDefault(); + + // Update value based on pointer position + activateValue(calculateValueFromPosition(pointerMoveEvent.clientX)); + }; + + // Handle pointer up - cleanup + var _handlePointerUp = function handlePointerUp(pointerUpEvent) { + // Release pointer capture + if (track.hasPointerCapture(pointerUpEvent.pointerId)) { + track.releasePointerCapture(pointerUpEvent.pointerId); + } + + // Set dragging flag to false + isDragging = false; + + // Remove event listeners + track.removeEventListener('pointermove', handlePointerMove); + track.removeEventListener('pointerup', _handlePointerUp); + track.removeEventListener('pointercancel', _handlePointerUp); + track.removeEventListener('pointerleave', _handlePointerUp); + }; + + // Add pointer event listeners + track.addEventListener('pointermove', handlePointerMove); + track.addEventListener('pointerup', _handlePointerUp); + track.addEventListener('pointercancel', _handlePointerUp); + track.addEventListener('pointerleave', _handlePointerUp); + }); + }; + + /** + * @param placeholderElement + * @param options + */ + // eslint-disable-next-line no-param-reassign + api.init = function (placeholderElement, options) { + placeholder = placeholderElement; + // eslint-disable-next-line prefer-destructuring + min = options.min; + // eslint-disable-next-line prefer-destructuring + max = options.max; + // eslint-disable-next-line prefer-destructuring + value = options.value; + // eslint-disable-next-line prefer-destructuring + onValueChanged = options.onValueChanged; + render(); + bindEvents(); + + // Defer visual update to ensure DOM is fully rendered + requestAnimationFrame(function () { + updateSliderUi(value); + }); + }; + + // eslint-disable-next-line no-param-reassign + api.getValue = function () { + return value; + }; + return api; +} +var sliderWidget = new SliderWidget(); +/* harmony default export */ const slider_widget = (sliderWidget); +;// ./src/libs/css.escape.js +/*! https://mths.be/cssescape v1.5.1 by @mathias | MIT license */ + +// https://drafts.csswg.org/cssom/#serialize-an-identifier +function cssEscape(value) { + if (arguments.length === 0) { + throw new TypeError('`CSS.escape` requires an argument.'); + } + var string = String(value); + var length = string.length; + var index = -1; + var codeUnit; + var result = ''; + var firstCodeUnit = string.charCodeAt(0); + // eslint-disable-next-line no-plusplus + while (++index < length) { + codeUnit = string.charCodeAt(index); + // Note: there’s no need to special-case astral symbols, surrogate + // pairs, or lone surrogates. + + // If the character is NULL (U+0000), then the REPLACEMENT CHARACTER + // (U+FFFD). + if (codeUnit === 0x0000) { + result += "\uFFFD"; + // eslint-disable-next-line no-continue + continue; + } + if ( + // If the character is in the range [\1-\1F] (U+0001 to U+001F) or is + // U+007F, […] + // eslint-disable-next-line eqeqeq + codeUnit >= 0x0001 && codeUnit <= 0x001F || codeUnit == 0x007F + // If the character is the first character and is in the range [0-9] + // (U+0030 to U+0039), […] + || index === 0 && codeUnit >= 0x0030 && codeUnit <= 0x0039 + // If the character is the second character and is in the range [0-9] + // (U+0030 to U+0039) and the first character is a `-` (U+002D), […] + || index === 1 && codeUnit >= 0x0030 && codeUnit <= 0x0039 + // eslint-disable-next-line eqeqeq + && firstCodeUnit == 0x002D) { + // https://drafts.csswg.org/cssom/#escape-a-character-as-code-point + result += "\\".concat(codeUnit.toString(16), " "); + // eslint-disable-next-line no-continue + continue; + } + if ( + // If the character is the first character and is a `-` (U+002D), and + // there is no second character, […] + index === 0 && length === 1 + // eslint-disable-next-line eqeqeq + && codeUnit == 0x002D) { + result += "\\".concat(string.charAt(index)); + // eslint-disable-next-line no-continue + continue; + } + + // If the character is not handled by one of the above rules and is + // greater than or equal to U+0080, is `-` (U+002D) or `_` (U+005F), or + // is in one of the ranges [0-9] (U+0030 to U+0039), [A-Z] (U+0041 to + // U+005A), or [a-z] (U+0061 to U+007A), […] + if (codeUnit >= 0x0080 + // eslint-disable-next-line eqeqeq + || codeUnit == 0x002D + // eslint-disable-next-line eqeqeq + || codeUnit == 0x005F || codeUnit >= 0x0030 && codeUnit <= 0x0039 || codeUnit >= 0x0041 && codeUnit <= 0x005A || codeUnit >= 0x0061 && codeUnit <= 0x007A) { + // the character itself + result += string.charAt(index); + // eslint-disable-next-line no-continue + continue; + } + + // Otherwise, the escaped character. + // https://drafts.csswg.org/cssom/#escape-a-character + result += "\\".concat(string.charAt(index)); + } + return result; +} +;// ./src/adguard-rules-constructor.js + + + +/** + * Adguard rules constructor + * @type {Function} + */ +function AdguardRulesConstructorLib() { + var api = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + var CSS_RULE_MARK = '##'; + var RULE_OPTIONS_MARK = '$'; + var URLBLOCK_ATTRIBUTES = ['src', 'data']; + var linkHelper = src_protectedApi.createElement('a'); + + /** + * Constructs css selector by combining classes by AND + * @param classList + * @returns {string} + */ + var constructClassCssSelectorByAND = function constructClassCssSelectorByAND(classList) { + var selectors = []; + if (classList) { + for (var i = 0; i < classList.length; i += 1) { + selectors.push(".".concat(cssEscape(classList[i]))); + } + } + return selectors.join(''); + }; + + /** + * Constructs css selector for element using tag name, + * id and classed, like: tagName#id.class1.class2 + * + * @param element Element + * @param classList Override element classes + * (If classList is null, element classes will be used) + * @param excludeTagName Omit tag name in selector + * @param excludeId Omit element id in selector + * @returns {string} + */ + var makeDefaultCssFilter = function makeDefaultCssFilter(element, classList, excludeTagName, excludeId) { + var cssSelector = excludeTagName ? '' : element.tagName.toLowerCase(); + if (element.id && !excludeId) { + cssSelector += "#".concat(cssEscape(element.id)); + } + cssSelector += constructClassCssSelectorByAND(classList || element.classList); + return cssSelector; + }; + + /** + * Constructs css selector for element using parent elements + * and nth-child (first-child, last-child) pseudo classes. + * + * @param element Element + * @param options Construct options. + * For example: {excludeTagName: false, excludeId: false, classList: []} + * @returns {string} + */ + var makeCssNthChildFilter = function makeCssNthChildFilter(element, options) { + // eslint-disable-next-line no-param-reassign + options = options || {}; + var _options = options, + classList = _options.classList, + excludeTagName = _options.excludeTagName, + excludeId = _options.excludeId; + var excludeTagNameOverride = 'excludeTagName' in options; + var excludeIdOverride = 'excludeId' in options; + var path = []; + var el = element; + while (el.parentNode) { + var nodeName = el && el.nodeName ? el.nodeName.toUpperCase() : ''; + if (nodeName === 'BODY') { + break; + } + if (el.id) { + /** + * Be default we don't include tag name and classes + * to selector for element with id attribute + */ + var cssSelector = ''; + if (el === element) { + cssSelector = makeDefaultCssFilter(el, classList || [], excludeTagNameOverride ? excludeTagName : true, excludeIdOverride ? excludeId : false); + } else { + cssSelector = makeDefaultCssFilter(el, [], true, false); + } + path.unshift(cssSelector); + break; + } else { + var c = 1; + for (var e = el; e.previousSibling; e = e.previousSibling) { + if (e.previousSibling.nodeType === 1) { + c += 1; + } + } + var cldCount = 0; + for (var i = 0; el.parentNode && i < el.parentNode.childNodes.length; i += 1) { + cldCount += el.parentNode.childNodes[i].nodeType === 1 ? 1 : 0; + } + var ch = void 0; + if (cldCount === 0 || cldCount === 1) { + ch = ''; + } else if (c === 1) { + ch = ':first-child'; + } else if (c === cldCount) { + ch = ':last-child'; + } else { + ch = ":nth-child(".concat(c, ")"); + } + + /** + * By default we include tag name and + * element classes to selector for element without id attribute + */ + if (el === element) { + var p = makeDefaultCssFilter(el, classList, excludeId, excludeTagNameOverride ? excludeTagName : false); + p += ch; + path.unshift(p); + } else { + path.unshift(makeDefaultCssFilter(el, el.classList, false, false) + ch); + } + el = el.parentNode; + } + } + return path.join(' > '); + }; + + /** + * Constructs css selector by combining classes by OR + * @param classList + * @returns {string} + */ + var constructClassCssSelectorByOR = function constructClassCssSelectorByOR(classList) { + var selectors = []; + if (classList) { + for (var i = 0; i < classList.length; i += 1) { + selectors.push(".".concat(cssEscape(classList[i]))); + } + } + return selectors.join(', '); + }; + + /** + * Constructs element selector for matching elements + * that contain any of classes in original element. + * For example => .cl1, .cl2, .cl3 + * + * @param element Element + * @param classList Override element classes + * (If classList is null, element classes will be used) + * @returns {string} + */ + var makeSimilarCssFilter = function makeSimilarCssFilter(element, classList) { + return constructClassCssSelectorByOR(classList || element.classList); + }; + + /** + * Creates css rule text + * @param element Element + * @param options Construct options. + * For example: { + * cssSelectorType: 'STRICT_FULL', + * excludeTagName: false, + * excludeId: false, classList: [] + * } + * @returns {string} + */ + var constructCssRuleText = function constructCssRuleText(element, options) { + if (!element) { + return; + } + + // eslint-disable-next-line no-param-reassign + options = options || {}; + var cssSelectorType = options.cssSelectorType || 'STRICT_FULL'; + var selector; + switch (cssSelectorType) { + case 'STRICT_FULL': + selector = makeCssNthChildFilter(element, options); + break; + case 'STRICT': + selector = makeDefaultCssFilter(element, options.classList, options.excludeTagName, options.excludeId); + break; + case 'SIMILAR': + selector = makeSimilarCssFilter(element, options.classList, true); + break; + default: + break; + } + + // eslint-disable-next-line consistent-return + return selector ? CSS_RULE_MARK + selector : ''; + }; + var constructUrlBlockRuleText = function constructUrlBlockRuleText(element, urlBlockAttribute, oneDomain, domain) { + if (!urlBlockAttribute) { + return null; + } + var blockUrlRuleText = urlBlockAttribute.replace(/^http:\/\/(www\.)?/, '||'); + if (blockUrlRuleText.indexOf('.') === 0) { + blockUrlRuleText = blockUrlRuleText.substring(1); + } + if (!oneDomain) { + blockUrlRuleText = "".concat(blockUrlRuleText).concat(RULE_OPTIONS_MARK, "domain=").concat(domain); + } + return blockUrlRuleText; + }; + var isValidUrl = function isValidUrl(value) { + if (value) { + linkHelper.href = value; + if (linkHelper.hostname) { + return true; + } + } + return false; + }; + var getUrlBlockAttribute = function getUrlBlockAttribute(element) { + if (!element || !element.getAttribute) { + return null; + } + for (var i = 0; i < URLBLOCK_ATTRIBUTES.length; i += 1) { + var attr = URLBLOCK_ATTRIBUTES[i]; + var value = element.getAttribute(attr); + if (isValidUrl(value)) { + return value; + } + } + return null; + }; + var haveUrlBlockParameter = function haveUrlBlockParameter(element) { + var value = getUrlBlockAttribute(element); + return value && value !== ''; + }; + var haveClassAttribute = function haveClassAttribute(element) { + return element.classList && element.classList.length > 0; + }; + var haveIdAttribute = function haveIdAttribute(element) { + return element.id && element.id.trim() !== ''; + }; + var getUrl = function getUrl(url) { + var pattern = '^(([^:/\\?#]+):)?(//(([^:/\\?#]*)(?::([^/\\?#]*))?))?([^\\?#]*)(\\?([^#]*))?(#(.*))?$'; + var rx = new RegExp(pattern); + var parts = rx.exec(url); + return { + host: parts[4] || '', + path: parts[7] || '' + }; + }; + var cropDomain = function cropDomain(url) { + var domain = getUrl(url).host; + return domain.replace('www.', '').replace(/:\d+/, ''); + }; + + /** + * Utility method + * + * @param element + * @returns {string} + */ + // eslint-disable-next-line no-param-reassign + api.makeCssNthChildFilter = makeCssNthChildFilter; + + /** + * Returns detailed element info + * + * @param element + */ + // eslint-disable-next-line no-param-reassign + api.getElementInfo = function (element) { + // Convert attributes to array + var attributes = []; + var elementAttributes = element.attributes; + if (elementAttributes) { + for (var i = 0; i < elementAttributes.length; i += 1) { + var attr = elementAttributes[i]; + attributes.push({ + name: attr.name, + value: attr.value + }); + } + } + return { + tagName: element.tagName, + attributes: attributes, + urlBlockAttributeValue: getUrlBlockAttribute(element), + haveUrlBlockParameter: haveUrlBlockParameter(element), + haveClassAttribute: haveClassAttribute(element), + haveIdAttribute: haveIdAttribute(element) + }; + }; + + /** + * Constructs css selector for specified rule + * + * @param ruleText rule text + * @returns {string} css style selector + */ + // eslint-disable-next-line no-param-reassign + api.constructRuleCssSelector = function (ruleText) { + if (!ruleText) { + return null; + } + var index = ruleText.indexOf(CSS_RULE_MARK); + var optionsIndex = ruleText.indexOf(RULE_OPTIONS_MARK); + if (index >= 0) { + return ruleText.substring(index + CSS_RULE_MARK.length, optionsIndex >= 0 ? optionsIndex : ruleText.length); + } + var s = ruleText.substring(0, optionsIndex); + s = s.replace(/[|]|[\^]/g, ''); + if (isValidUrl(s)) { + return "[src*=\"".concat(s, "\"]"); + } + return null; + }; + + /** + * Constructs adguard rule text from element node and specified options + * + * const options = { + * urlMask: url block attributes, + * isBlockOneDomain: boolean, + * url: url, + * attributes: attributesSelectorText, + * ruleType: (URL, CSS) + * cssSelectorType: (STRICT_FULL, STRICT, SIMILAR), + * excludeTagName: false, (Exclude element tag name from selector) + * excludeId: false, (Exclude element identifier from selector) + * classList: [] + * (Override element classes (If classList is null, element classes will be used)) + * } + * + * @param element + * @param options + * @returns {*} + */ + // eslint-disable-next-line no-param-reassign + api.constructRuleText = function (element, options) { + var croppedDomain = cropDomain(options.url); + var ruleType = options.ruleType; + if (ruleType === 'URL') { + var blockUrlRuleText = constructUrlBlockRuleText(element, options.urlMask, options.isBlockOneDomain, croppedDomain); + if (blockUrlRuleText) { + return blockUrlRuleText; + } + } + var result; + if (ruleType === 'CSS') { + result = constructCssRuleText(element, options); + + // Append html attributes to css selector + if (options.attributes) { + result = (result || CSS_RULE_MARK + result) + options.attributes; + } + } + if (!options.isBlockOneDomain) { + result = croppedDomain + result; + } + return result; + }; + return api; +} +var adguardRulesConstructor = new AdguardRulesConstructorLib(); +/* harmony default export */ const adguard_rules_constructor = (adguardRulesConstructor); +;// ./src/controllers/sliderMenuController.js + + + + + + +/** + * Slider menu controller + * @param addRule + * @returns {{init: init}} + * @constructor + */ +function SliderMenuController(addRule, iframe) { + var contentDocument = null; + var selectedElement = null; + var startElement = null; + var currentElement = null; + var iframeCtrl = iframe; + var getFilterRuleInputText = function getFilterRuleInputText() { + return contentDocument.getElementById('filter-rule').value; + }; + var close = function close() { + iframeCtrl.removeIframe(); + }; + var expandAdvanced = function expandAdvanced() { + var advancedSettings = contentDocument.querySelector('#advanced-settings'); + var extendedSettingsText = contentDocument.querySelector('#ExtendedSettingsText'); + var extendedSettingsTextMobile = contentDocument.querySelector('#ExtendedSettingsTextMobile'); + var hidden = !hasClass(advancedSettings, 'open'); + if (hidden) { + addClass(advancedSettings, 'open'); + addClass(extendedSettingsText, 'active'); + addClass(extendedSettingsTextMobile, 'active'); + iframeCtrl.resizeSliderMenuToAdvanced(); + } else { + removeClass(advancedSettings, 'open'); + removeClass(extendedSettingsText, 'active'); + removeClass(extendedSettingsTextMobile, 'active'); + iframeCtrl.resizeSliderMenuToNormal(); + } + }; + var showPreview = function showPreview() { + var options = { + isBlockByUrl: contentDocument.getElementById('block-by-url-checkbox').checked, + isBlockSimilar: contentDocument.getElementById('block-similar-checkbox').checked, + isBlockOneDomain: contentDocument.getElementById('one-domain-checkbox').checked, + // Slider widget value is inverted + sliderValue: slider_widget.getValue() + }; + iframeCtrl.showBlockPreview(selectedElement, getFilterRuleInputText(), startElement, options); + }; + var blockElement = function blockElement() { + var path = getFilterRuleInputText(); + iframeCtrl.blockElement(path, addRule); + }; + var handleShowBlockSettings = function handleShowBlockSettings(showBlockByUrl, showBlockSimilar) { + var blockByUrlBlock = contentDocument.querySelector('#block-by-url-checkbox-block'); + var blockSimilarBlock = contentDocument.querySelector('#block-similar-checkbox-block'); + if (showBlockByUrl) { + show(blockByUrlBlock); + } else { + contentDocument.getElementById('block-by-url-checkbox').checked = false; + hide(blockByUrlBlock); + } + if (showBlockSimilar) { + show(blockSimilarBlock); + } else { + contentDocument.getElementById('block-similar-checkbox').checked = false; + hide(blockSimilarBlock); + } + }; + var getUrlBlockAttribute = function getUrlBlockAttribute(element) { + var urlBlockAttributes = ['src', 'data']; + for (var i = 0; i < urlBlockAttributes.length; i += 1) { + var attr = urlBlockAttributes[i]; + var value = element.getAttribute(attr); + if (value) { + return value; + } + } + return null; + }; + var haveUrlBlockParameter = function haveUrlBlockParameter(element) { + var value = getUrlBlockAttribute(element); + return value && value !== ''; + }; + var haveClassAttribute = function haveClassAttribute(element) { + var className = element.className; + return className && typeof className === 'string' && className.trim() !== ''; + }; + var setFilterRuleInputText = function setFilterRuleInputText(ruleText) { + contentDocument.getElementById('filter-rule').value = ruleText; + }; + var onScopeChange = function onScopeChange() { + var isBlockByUrl = contentDocument.getElementById('block-by-url-checkbox').checked; + var isBlockSimilar = contentDocument.getElementById('block-similar-checkbox').checked; + var isBlockOneDomain = contentDocument.getElementById('one-domain-checkbox').checked; + handleShowBlockSettings(haveUrlBlockParameter(selectedElement) && !isBlockSimilar, haveClassAttribute(selectedElement) && !isBlockByUrl); + var options = { + urlMask: getUrlBlockAttribute(selectedElement), + cssSelectorType: isBlockSimilar ? 'SIMILAR' : 'STRICT_FULL', + isBlockOneDomain: isBlockOneDomain, + url: document.location, + ruleType: isBlockByUrl ? 'URL' : 'CSS' + }; + var ruleText = adguard_rules_constructor.constructRuleText(selectedElement, options); + setFilterRuleInputText(ruleText); + iframeCtrl.resizeIframe(); + }; + var bindEvents = function bindEvents() { + var menuEvents = { + '.main_close': close, + '#ExtendedSettingsText': expandAdvanced, + '#ExtendedSettingsTextMobile': expandAdvanced, + '#adg-cancel': iframeCtrl.showSelectorMenu, + '#adg-preview': showPreview, + '#adg-accept': blockElement, + '#block-by-url-checkbox-block': onScopeChange, + '#one-domain-checkbox-block': onScopeChange, + '#block-similar-checkbox-block': onScopeChange + }; + Object.keys(menuEvents).forEach(function (item) { + var elems = contentDocument.querySelectorAll(item); + toArray(elems).forEach(function (elem) { + return elem.addEventListener('click', menuEvents[item]); + }); + }); + }; + var makeDefaultCheckboxesForDetailedMenu = function makeDefaultCheckboxesForDetailedMenu(options) { + contentDocument.getElementById('block-by-url-checkbox').checked = options && options.isBlockByUrl; + contentDocument.getElementById('block-similar-checkbox').checked = options && options.isBlockSimilar; + contentDocument.getElementById('one-domain-checkbox').checked = options && options.isBlockOneDomain; + if (options && (options.isBlockByUrl || options.isBlockSimilar)) { + handleShowBlockSettings(options.isBlockByUrl, options.isBlockSimilar); + } + }; + var onSliderMove = function onSliderMove(element) { + selectedElement = element; + adguard_selector.selectElement(element); + makeDefaultCheckboxesForDetailedMenu(); + onScopeChange(); + handleShowBlockSettings(haveUrlBlockParameter(element), haveClassAttribute(element)); + }; + var createSlider = function createSlider(setElement, savedSliderValue) { + var parents = getParentsLevel(selectedElement); + var children = getAllChildren(selectedElement); + var value = Math.abs(parents.length + 1); + var max = parents.length + children.length + 1; + var min = 1; + var options = { + value: value, + min: min, + max: max + }; + var slider = contentDocument.querySelector('#slider'); + if (min === max) { + // hide slider text + hide(slider); + hide(contentDocument.querySelectorAll('.element-rule_text')); + expandAdvanced(); + } + options.onSliderMove = function (delta) { + var elem; + if (delta > 0) { + elem = parents[delta - 1]; + } + if (delta === 0) { + elem = startElement; + } + if (delta < 0) { + elem = children[Math.abs(delta + 1)]; + } + onSliderMove(elem); + }; + var currentVal = options.value; + var isReversedValue = false; + + // set slider position after returning from preview mode + if (savedSliderValue !== undefined && savedSliderValue !== null) { + currentVal = savedSliderValue; + // savedSliderValue comes from getValue() which returns the UI value (already reversed) + isReversedValue = true; + } else if (setElement) { + var setElementParents = getParentsLevel(setElement); + currentVal = setElementParents.length + 1; + } + + // Convert to reversed slider value (slider is inverted) only if not already reversed + var reversedValue = isReversedValue ? currentVal : options.max - currentVal + options.min; + slider_widget.init(slider, { + min: options.min, + max: options.max, + value: reversedValue, + // eslint-disable-next-line no-shadow + onValueChanged: function onValueChanged(value) { + // max - value + min is because we have reversed slider + var delta = options.value - (options.max - value + options.min); + options.onSliderMove(delta); + } + }); + }; + + /* + Called from IframeController._showMenuItem to initialize view + */ + // eslint-disable-next-line no-shadow + var init = function init(iframe, options) { + selectedElement = options.element; + startElement = selectedElement; + // eslint-disable-next-line prefer-destructuring + contentDocument = iframe.contentDocument; + // eslint-disable-next-line prefer-destructuring + currentElement = options.currentElement; + bindEvents(); + var savedSliderValue = options.options && options.options.sliderValue; + createSlider(currentElement, savedSliderValue); + onScopeChange(); + adguard_selector.selectElement(selectedElement); + + // select current element after returning from preview mode + if (currentElement) { + onSliderMove(currentElement); + } + + // make input clickable with right mouse button for text editing + events.add(contentDocument.getElementById('filter-rule'), 'contextmenu', function (e) { + e.stopPropagation(); + }); + if (options.path) { + setFilterRuleInputText(options.path); + expandAdvanced(); + } + if (options.options) { + makeDefaultCheckboxesForDetailedMenu(options.options); + } + }; + return { + init: init + }; +} +;// ./src/controllers/blockPreviewController.js + + + + + +/** + * Block preview controller + * @param addRule + * @param iframe + * @returns {{init: init}} + * @constructor + */ +function BlockPreviewController(addRule, iframe) { + var contentDocument = null; + var currentElement = null; + var selectedElement = null; + var selectedPath = null; + var optionsState = null; + var iframeCtrl = iframe; + var previewStyleID = src_settings.Constants.PREVIEW_STYLE_ID; + var showElement = function showElement() { + iframeCtrl.showHiddenElements(previewStyleID); + }; + var close = function close() { + showElement(); + iframeCtrl.removeIframe(); + }; + var selectAnotherElement = function selectAnotherElement() { + showElement(); + iframeCtrl.showSelectorMenu(); + }; + var blockElement = function blockElement(e) { + e.stopPropagation(); + // NOTE: preview style cleanup is handled inside iframeCtrl.blockElement + // → removeIframe() → showHiddenElements(previewStyleID), which runs + // synchronously right before hideElementsByPath re-hides the element. + // Calling showElement() here would remove the preview style now, making + // the element visible until the async GM callback re-hides it (flash). + iframeCtrl.blockElement(selectedPath, addRule); + }; + var showDetailedMenu = function showDetailedMenu() { + showElement(); + iframeCtrl.showSliderMenu(currentElement, selectedElement, selectedPath, optionsState); + }; + var bindEvents = function bindEvents() { + var menuEvents = { + '.main_close': close, + '#select-another-element': selectAnotherElement, + '#end-preview': showDetailedMenu, + '#block-element': blockElement + }; + Object.keys(menuEvents).forEach(function (item) { + var elems = contentDocument.querySelectorAll(item); + toArray(elems).forEach(function (elem) { + return elem.addEventListener('click', menuEvents[item]); + }); + }); + }; + var hideElement = function hideElement() { + if (!selectedPath) { + src_log.error('Can`t block element: `selector` path is empty'); + return; + } + iframeCtrl.hideElementsByPath(selectedPath, previewStyleID); + }; + + /* + Called from IframeController.showMenuItem to initialize view + */ + // eslint-disable-next-line no-shadow + var init = function init(iframe, options) { + selectedElement = options.element; + selectedPath = options.path; + // eslint-disable-next-line prefer-destructuring + currentElement = options.currentElement; + // eslint-disable-next-line prefer-destructuring + contentDocument = iframe.contentDocument; + optionsState = options.options; + adguard_selector.reset(); + bindEvents(); + hideElement(); + }; + return { + init: init + }; +} +;// ./src/utils/ui-validation-utils.js + + + +/** + * Utils that checks environment for compatibility with assistant + * @returns {{ + * checkVisibleAreaSize: checkVisibleAreaSize, + * validateBrowser: validateBrowser, + * validatePage: validatePage, + * getViewPort: getViewPort + * }} + * @constructor + */ +function UIValidationUtils() { + var _window = window, + document = _window.document; + var getViewPort = function getViewPort() { + var width = window.innerWidth; + var height = window.innerHeight; + return { + width: width, + height: height + }; + }; + + /** + * Check if visible area are enough to show menu. + * @returns boolean. True if area enough + */ + var checkVisibleAreaSize = function checkVisibleAreaSize() { + var viewPort = getViewPort(); + // eslint-disable-next-line max-len + var visibleAreaSize = viewPort.height > src_settings.Constants.MINIMUM_VISIBLE_HEIGHT_TO_SHOW_BUTTON; + if (!visibleAreaSize) { + src_log.error("Viewport height is too small: ".concat(viewPort.height)); + } + return visibleAreaSize; + }; + + /** + * Checks if browser is valid for Adguard assistant + * @returns boolean. True if browser valid + */ + var validateBrowser = function validateBrowser() { + var valid = !document.documentMode || document.documentMode > src_settings.Constants.MINIMUM_IE_SUPPORTED_VERSION; + if (!valid) { + src_log.error("IE version is ".concat(document.documentMode)); + } + return valid; + }; + + /** + * Checks if page is valid for Adguard assistant to work here. + */ + var validatePage = function validatePage() { + // Assistant do not work in iframes + if (window.window !== window.top) { + return false; + } + return true; + }; + return { + checkVisibleAreaSize: checkVisibleAreaSize, + validateBrowser: validateBrowser, + validatePage: validatePage, + getViewPort: getViewPort + }; +} +var uiValidationUtils = new UIValidationUtils(); +/* harmony default export */ const ui_validation_utils = (uiValidationUtils); +;// ./src/utils/ui-utils.js + + + + +/** + * UI utils + * @returns {{ + * makeElementDraggable: Function, + * makeIframeDraggable: Function, + * moveElementTo: Function, +`* setAnchorPosition: Function, + * checkElementPosition: Function, + * }} + * @constructor + */ +function UIUtils() { + var elWidth; + var elHeight; + var windowWidth; + var windowHeight; + + // Stored button anchor position + var storedAnchor = {}; + + /** + * Get original event object for touch + * devices to getting current coordinates + * @param {Object} + * @returns {Object} + */ + var getOriginalEvent = function getOriginalEvent(e) { + return e.targetTouches ? e.targetTouches[0] : e; + }; + var outsidePosition = { + top: function top(pos) { + return storedAnchor.top && (pos.y + elHeight > windowHeight || pos.y < 0); + }, + bottom: function bottom(pos) { + return !storedAnchor.top && (Math.abs(pos.y) + elHeight > windowHeight || pos.y > 0); + }, + left: function left(pos) { + return storedAnchor.left && (pos.x + elWidth > windowWidth || pos.x < 0); + }, + right: function right(pos) { + return !storedAnchor.left && (Math.abs(pos.x) + elWidth > windowWidth || pos.x > 0); + } + }; + + /** + * Set transition css property for drag + * translate3d is for better rendering performance + * see: https://www.html5rocks.com/en/tutorials/speed/layers/ + */ + var moveElementTo = function moveElementTo(el, x, y) { + var transform = "translate3d(".concat(x, "px,").concat(y, "px, 0px)"); + // eslint-disable-next-line no-param-reassign + el.style.webkitTransform = transform; + // eslint-disable-next-line no-param-reassign + el.style.mozTransform = transform; + // eslint-disable-next-line no-param-reassign + el.style.msTransform = transform; + // eslint-disable-next-line no-param-reassign + el.style.oTransform = transform; + // eslint-disable-next-line no-param-reassign + el.style.transform = transform; + }; + + // getting screen width and height without scroll bars + var getWindowSize = function getWindowSize() { + return { + width: Math.min(document.documentElement.clientWidth, window.innerWidth || window.screen.width), + height: Math.min(document.documentElement.clientHeight, window.innerHeight || window.screen.height) + }; + }; + + /** + * Functions for saving left/top anchors and setting class position + * + * @param {Object} element button element + * @param {Boolean} anchor anchors positions `true` for top/left or `false` for bottom/right + */ + var setAnchorPosition = { + positionY: function positionY(element, anchor) { + storedAnchor.top = anchor; + if (storedAnchor.top) { + addClass(element, 'adguard-assistant-button-top'); + removeClass(element, 'adguard-assistant-button-bottom'); + } else { + addClass(element, 'adguard-assistant-button-bottom'); + removeClass(element, 'adguard-assistant-button-top'); + } + }, + positionX: function positionX(element, anchor) { + storedAnchor.left = anchor; + if (storedAnchor.left) { + addClass(element, 'adguard-assistant-button-left'); + removeClass(element, 'adguard-assistant-button-right'); + } else { + addClass(element, 'adguard-assistant-button-right'); + removeClass(element, 'adguard-assistant-button-left'); + } + } + }; + + /** + * Make element draggable + * @param element + * @param onDragEnd + * @param onClick + */ + function makeElementDraggable(element, onDragEnd, onClick) { + var coords; + var shiftX; + var shiftY; + + /** + * Prevent text selection + * With cursor drag + */ + var pauseEvent = function pauseEvent(e) { + e.stopPropagation(); + e.preventDefault(); + e.cancelBubble = true; + e.returnValue = false; + return false; + }; + var onMouseMove = function onMouseMove(e) { + pauseEvent(e); + // eslint-disable-next-line no-use-before-define + moveAt(e); + }; + var preventedEvent = function preventedEvent(e) { + e.preventDefault(); + }; + var getCoords = function getCoords(elem) { + var box = elem.getBoundingClientRect(); + return { + top: box.top, + left: box.left, + bottom: box.bottom, + right: box.right + }; + }; + + /** + * On mouse up event + * @param {Object} e event object + * @param {Boolean|undefined} doNotOpenIframe do not open the iframe if true. + * This is necessary when the cursor is out of bounds + */ + var _onMouseUp = function onMouseUp(e, doNotOpenIframe) { + e.stopPropagation(); + + // make scroll availalbe + events.remove(document.documentElement, 'wheel mousewheel', preventedEvent); + + // When a user finishes dragging icon, we set icon anchor + // depending on the icon position, i.e. which quarter + // of the screen it belongs. + var lastX; + var lastY; + var lastCoords = getCoords(element); + var topHalf = lastCoords.top < windowHeight / 2; + var leftHalf = lastCoords.left < windowWidth / 2; + setAnchorPosition.positionY(element, topHalf); + setAnchorPosition.positionX(element, leftHalf); + if (topHalf) { + lastY = lastCoords.top; + } else { + lastY = lastCoords.bottom - windowHeight; + } + if (leftHalf) { + lastX = lastCoords.left; + } else { + lastX = lastCoords.right - windowWidth; + } + moveElementTo(element, lastX, lastY); + + // Open the frame if the button has been shifted by no more than 5 pixels + if (Math.abs(coords.left - lastCoords.left) > 5 || Math.abs(coords.top - lastCoords.top) > 5) { + if (onDragEnd) { + var store = { + x: lastX, + y: lastY, + storedAnchor: storedAnchor + }; + onDragEnd(store); + } + } else if (onClick && !doNotOpenIframe) { + onClick(e); + } + events.remove(document.documentElement, 'mouseup touchend pointerup', _onMouseUp); + events.remove(document.documentElement, 'mousemove touchmove pointermove', onMouseMove); + }; + var moveAt = function moveAt(e) { + var position = { + x: getOriginalEvent(e).pageX - shiftX, + y: getOriginalEvent(e).pageY - shiftY + }; + + // disable mousemove if button element outside the screen + var out = outsidePosition.top(position) || outsidePosition.left(position) || outsidePosition.bottom(position) || outsidePosition.right(position); + if (out) { + _onMouseUp(e, true); + } else { + moveElementTo(element, position.x, position.y); + } + }; + var mouseDown = function mouseDown(e) { + pauseEvent(e); + + // prevent browser scroll + events.add(document.documentElement, 'wheel mousewheel', preventedEvent); + + // prevent right button mousedown + if (e.button > 0) return; + elWidth = element.clientWidth; + elHeight = element.clientWidth; + windowWidth = getWindowSize().width; + windowHeight = getWindowSize().height; + coords = getCoords(element); + if (storedAnchor.top) { + shiftY = getOriginalEvent(e).pageY - coords.top; + } else { + shiftY = windowHeight - (coords.bottom - getOriginalEvent(e).pageY); + } + if (storedAnchor.left) { + shiftX = getOriginalEvent(e).pageX - coords.left; + } else { + shiftX = windowWidth - (coords.right - getOriginalEvent(e).pageX); + } + + /** + * binding both mouse and touch/pointer events simultaneously + * see: http://www.html5rocks.com/en/mobile/touchandmouse/ + */ + events.add(document.documentElement, 'mouseup touchend pointerup', _onMouseUp); + events.add(document.documentElement, 'mousemove touchmove pointermove', onMouseMove); + }; + events.add(element, 'mousedown touchstart', src_protectedApi.functionBind.call(mouseDown, this)); + events.add(element, 'dragstart', function () {}); + } + + /** + * Makes iframe draggable + * + * @param iframe + * @param handleElement + */ + var makeIframeDraggable = function makeIframeDraggable(iframe, handleElement) { + var iframeDoc = iframe.contentDocument; + var offset = Object.create(null); + + /** + * Function that does actual "dragging" + * + * @param x + * @param y + */ + var drag = function drag(x, y) { + // eslint-disable-next-line no-param-reassign + iframe.style.left = "".concat(x, "px"); + // eslint-disable-next-line no-param-reassign + iframe.style.top = "".concat(y, "px"); + }; + var cancelIFrameSelection = function cancelIFrameSelection(e) { + e.preventDefault(); + e.stopPropagation(); + }; + var onMouseMove = function onMouseMove(e) { + var eventPosition = getOriginalEvent(e); + drag(eventPosition.screenX + offset.x, eventPosition.screenY + offset.y); + }; + var onMouseDown = function onMouseDown(e) { + var eventPosition = getOriginalEvent(e); + var rect = iframe.getBoundingClientRect(); + offset.x = rect.left + handleElement.offsetLeft - eventPosition.screenX; + offset.y = rect.top + handleElement.offsetTop - eventPosition.screenY; + events.add(iframeDoc, 'mousemove touchmove pointermove', onMouseMove); + events.add(iframeDoc, 'selectstart', cancelIFrameSelection); + }; + var onMouseUp = function onMouseUp() { + events.remove(iframeDoc, 'mousemove touchmove pointermove', onMouseMove); + events.remove(iframeDoc, 'selectstart', cancelIFrameSelection); + }; + + // prevent iframe dragging while browser tabs is switching + document.addEventListener('visibilitychange', onMouseUp); + events.add(handleElement, 'mousedown touchstart', onMouseDown); + events.add(iframeDoc, 'mouseup touchend pointerup', onMouseUp); + events.add(iframeDoc, 'contextmenu', function (e) { + e.preventDefault(); + return false; + }); + }; + var checkElementPosition = function checkElementPosition(element, pos) { + var position = pos; + windowWidth = getWindowSize().width; + windowHeight = getWindowSize().height; + elWidth = element.clientWidth; + elHeight = element.clientHeight; + if (outsidePosition.top(position)) position.y = windowHeight - 60; + if (outsidePosition.bottom(position)) position.y = -windowHeight + 60; + if (outsidePosition.left(position)) position.x = windowWidth - 60; + if (outsidePosition.right(position)) position.x = -windowWidth + 60; + moveElementTo(element, position.x, position.y); + }; + return { + makeElementDraggable: makeElementDraggable, + makeIframeDraggable: makeIframeDraggable, + moveElementTo: moveElementTo, + setAnchorPosition: setAnchorPosition, + checkElementPosition: checkElementPosition + }; +} +var uiUtils = new UIUtils(); +/* harmony default export */ const ui_utils = (uiUtils); +;// ./src/button.js + + + + + + + + + +/** + * Adguard assistant button + * @returns {{show: show, remove: remove}} + * @constructor + */ +function UIButton() { + var button = null; + var buttonElement = null; + var isFullScreenEventsRegistered = false; + var iframeController = null; + + // Important attribute for all inline stylesheets. + // It needs for Content-Security-Policy. + var getStyleNonce = function getStyleNonce() { + var adgSettings = src_settings.getAdguardSettings(); + if (adgSettings === null) { + return ''; + } + return adgSettings.nonce; + }; + var isButtonAlreadyInDOM = function isButtonAlreadyInDOM() { + var alert = document.querySelector('.adguard-alert'); + if (alert) { + src_log.error('Assistant button is already in DOM'); + return true; + } + return false; + }; + + /** + * Checking browser and other requirements. + * @private + */ + var checkRequirements = function checkRequirements() { + if (!ui_validation_utils.validateBrowser()) { + return false; + } + if (!ui_validation_utils.validatePage()) { + return false; + } + if (!ui_validation_utils.checkVisibleAreaSize()) { + return false; + } + if (isButtonAlreadyInDOM()) { + return false; + } + return true; + }; + + /** + * Set a special classes for the pages on which + * under the button there are important elements + * issue: https://github.com/AdguardTeam/AdguardAssistant/issues/32 + */ + var respectPageElements = function respectPageElements(btn) { + var buttonInRightBottom = hasClass(btn, 'adguard-assistant-button-bottom') && hasClass(btn, 'adguard-assistant-button-right'); + if (buttonInRightBottom && document.location.hostname.indexOf('vk.com') >= 0) { + addClass(btn, 'adguard-assistant-button-respect adguard-assistant-button-respect-vk'); + } + if (buttonInRightBottom && document.location.hostname.indexOf('facebook.com') >= 0) { + addClass(btn, 'adguard-assistant-button-respect adguard-assistant-button-respect-fb'); + } + return false; + }; + var setPositionSettingsToButton = function setPositionSettingsToButton(btn) { + var position = src_settings.getUserPositionForButton(); + if (src_settings.getIconSize()) { + addClass(btn, 'logo-small'); + } + + // The anchor determines from which side of the + // browser the positions of `position.x`, `position.y`. + // If `position` parameter is not defined, + // so the position of the button is set in the corners of the browser + if (position && position.storedAnchor) { + ui_utils.setAnchorPosition.positionY(btn, position.storedAnchor.top); + ui_utils.setAnchorPosition.positionX(btn, position.storedAnchor.left); + ui_utils.moveElementTo(btn, position.x, position.y); + ui_utils.checkElementPosition(btn, position); + return false; + } + + // Getting the corner of the browser where the button is placed + var side = src_settings.getButtonSide(); + if (side) { + ui_utils.setAnchorPosition.positionY(btn, side.top); + ui_utils.setAnchorPosition.positionX(btn, side.left); + respectPageElements(btn); + } + return undefined; + }; + + /** + * Get center button position + * @returns {{left: *, top: *}} + * @private + */ + var getButtonPosition = function getButtonPosition(btn) { + var box = btn.getBoundingClientRect(); + return { + top: box.top + btn.offsetHeight / 2, + left: box.left + btn.offsetWidth / 2 + }; + }; + var hideButton = function hideButton() { + if (!button) { + return; + } + button.style.setProperty('display', 'none', 'important'); + }; + var showButton = function showButton() { + if (!button) { + return; + } + button.style.setProperty('display', 'block', 'important'); + }; + var hideRestoreOnFullScreen = function hideRestoreOnFullScreen() { + if (isFullScreenEventsRegistered) { + return; + } + var isFullScreen = false; + var onFullScreen = function onFullScreen() { + if (!isFullScreen) { + hideButton(); + isFullScreen = true; + } else { + showButton(); + isFullScreen = false; + } + }; + document.addEventListener('webkitfullscreenchange', onFullScreen); + document.addEventListener('mozfullscreenchange', onFullScreen); + document.addEventListener('fullscreenchange', onFullScreen); + isFullScreenEventsRegistered = true; + }; + var registerEvents = function registerEvents(btn) { + var onDragEnd = function onDragEnd(data) { + src_settings.setUserPositionForButton(data); + }; + var openMenu = function openMenu() { + iframeController.setButtonPosition(getButtonPosition(btn)); + iframeController.showDetailedMenu(); + }; + ui_utils.makeElementDraggable(btn, onDragEnd, openMenu); + hideRestoreOnFullScreen(); + }; + + /** + * Shows Adguard initial button + */ + var show = function show() { + // TODO: get rid of it + iframeController = src_ioc.get('iframeController'); + iframeController.onCloseMenu.attach(showButton); + iframeController.onShowMenuItem.attach(hideButton); + if (!checkRequirements()) { + src_log.info('Environment doesn\'t satisfy requirements, so don\'t show Adguard'); + return; + } + if (button) { + return; + } + src_log.debug('Requirements checked, all ok'); + buttonElement = src_protectedApi.createElement('div'); + src_protectedApi.setInnerHtml(buttonElement, HTML.button); + button = buttonElement.firstChild; + var adgStylesButton; + if (src_protectedApi.checkShadowDomSupport()) { + var shadowbuttonElement = buttonElement.attachShadow({ + mode: 'closed' + }); + adgStylesButton = src_protectedApi.createStylesElement(CSS.common + CSS.button, getStyleNonce()); + shadowbuttonElement.appendChild(adgStylesButton); + shadowbuttonElement.appendChild(button); + document.documentElement.appendChild(buttonElement); + } else { + adgStylesButton = src_protectedApi.createStylesElement(CSS.button, getStyleNonce(), 'adg-styles-button'); + if (adgStylesButton) { + document.documentElement.appendChild(adgStylesButton); + } + document.documentElement.appendChild(button); + buttonElement = button; + } + setPositionSettingsToButton(button); + registerEvents(button); + }; + var removeButton = function removeButton() { + if (!button) { + return; + } + document.documentElement.removeChild(buttonElement); + button = null; + }; + return { + show: show, + remove: removeButton + }; +} +var button_button = new UIButton(); +/* harmony default export */ const src_button = (button_button); +;// ./src/controllers/settingsMenuController.js + + + + +/** + * Settings menu controller + * @returns {{init: init}} + * @constructor + */ +function SettingsMenuController(iframe) { + var contentDocument = null; + var iframeCtrl = iframe; + var buttonSides = { + 'position-bottom-right': { + top: false, + left: false + }, + 'position-bottom-left': { + top: false, + left: true + }, + 'position-top-right': { + top: true, + left: false + }, + 'position-top-left': { + top: true, + left: true + } + }; + var close = function close() { + iframeCtrl.removeIframe(); + }; + var setIconSize = function setIconSize() { + var smallIcon = contentDocument.getElementById('size-small').checked; + src_settings.setIconSize(smallIcon); + }; + var setPersonalParam = function setPersonalParam() { + var personalConfig = contentDocument.getElementById('this-site').checked; + src_settings.setPersonalParam(personalConfig); + }; + var setButtonSide = function setButtonSide() { + var sideItem = null; + Object.keys(buttonSides).forEach(function (item) { + if (contentDocument.getElementById(item).checked) { + sideItem = item; + } + }); + if (sideItem) { + src_settings.setButtonSide(buttonSides[sideItem]); + } + }; + var setDefaultSettings = function setDefaultSettings() { + if (src_settings.getIconSize()) { + contentDocument.getElementById('size-small').checked = true; + } else { + contentDocument.getElementById('size-big').checked = true; + } + if (src_settings.getPersonalConfig()) { + contentDocument.getElementById('this-site').checked = true; + } else { + contentDocument.getElementById('all-site').checked = true; + } + var position = src_settings.getUserPositionForButton(); + if (position) { + return; + } + var sideFromSettings = src_settings.getButtonSide(); + Object.keys(buttonSides).forEach(function (item) { + var sideItem = buttonSides[item]; + if (sideItem.left === sideFromSettings.left && sideItem.top === sideFromSettings.top) { + contentDocument.getElementById(item).checked = true; + } + }); + }; + var saveSettings = function saveSettings() { + setPersonalParam(); + setIconSize(); + setButtonSide(); + src_settings.saveSettings(); + close(); + src_button.remove(); + src_button.show(); + }; + var bindEvents = function bindEvents() { + var menuEvents = { + '.close': close, + '#cancel': iframeCtrl.showDetailedMenu, + '#save-settings': saveSettings + }; + Object.keys(menuEvents).forEach(function (item) { + var elems = contentDocument.querySelectorAll(item); + toArray(elems).forEach(function (elem) { + return elem.addEventListener('click', menuEvents[item]); + }); + }); + }; + + /* + Called from IframeController._showMenuItem to initialize view + */ + // eslint-disable-next-line no-shadow + var init = function init(iframe) { + // eslint-disable-next-line prefer-destructuring + contentDocument = iframe.contentDocument; + bindEvents(); + setDefaultSettings(); + }; + return { + init: init + }; +} +;// ./src/iframe.js + + + + + + + + + + + + + + + + + + +/** + * Manages iframe and it's content + * @returns {{ + * showDetailedMenu: showDetailedMenu, + * showSelectorMenu: showSelectorMenu, + * showSliderMenu: showSliderMenu, + * showBlockPreview: showBlockPreview, + * showSettingsMenu: showSettingsMenu, + * setButtonPosition: setButtonPosition, + * onCloseMenu: CustomEvent, + * onShowMenuItem: CustomEvent, + * removeIframe: removeIframe, + * resizeSliderMenuToAdvanced: resizeSliderMenuToAdvanced, + * resizeSliderMenuToNormal: resizeSliderMenuToNormal + * }} + * @constructor + */ +function IframeController() { + var iframe = null; + var iframeAnchor = null; + var currentItem = null; + var iframeMaxWidth = 320; + var iframeMaxHeight = 407; + var menuMaxWidth = 600; + var menuMaxHeight = 640; + var menuInitialHeight = 252; + var detailedMenuInitialHeight = 355; + var settingsMaxWidth = 458; + var iframePositionOffset = 20; + var buttonPosition = null; + var blockedElementsStyleID = src_settings.Constants.BLOCKED_ELEMENTS_STYLE_ID; + var previewStyleID = src_settings.Constants.PREVIEW_STYLE_ID; + var views = {}; + views[src_settings.MenuItemsNames.DetailedMenu] = HTML.detailed_menu; + views[src_settings.MenuItemsNames.SelectorMenu] = HTML.selector_menu; + views[src_settings.MenuItemsNames.SliderMenu] = HTML.slider_menu; + views[src_settings.MenuItemsNames.BlockPreview] = HTML.preview; + views[src_settings.MenuItemsNames.SettingsMenu] = HTML.settings_menu; + if (window.innerWidth < menuMaxWidth) menuMaxWidth = window.innerWidth; + if (window.innerWidth < settingsMaxWidth) settingsMaxWidth = window.innerWidth; + var onCloseMenu = new CustomEvent(); + var onShowMenuItem = new CustomEvent(); + + // Important attribute for all inline stylesheets. + // It needs for Content-Security-Policy. + var getStyleNonce = function getStyleNonce() { + var adgSettings = src_settings.getAdguardSettings(); + if (adgSettings === null) { + return ''; + } + return adgSettings.nonce; + }; + var createShadowRootElement = function createShadowRootElement(iframeAnc) { + var shadowiframeAnchor = iframeAnc.attachShadow({ + mode: 'closed' + }); + var stylesElement = src_protectedApi.createStylesElement(CSS.common + CSS.iframe, getStyleNonce()); + shadowiframeAnchor.appendChild(stylesElement); + return shadowiframeAnchor; + }; + var createIframe = function createIframe(onIframeLoadCallback) { + src_log.debug('Creating iframe'); + iframe = src_protectedApi.createElement('iframe'); + + // IE hack for prevent access denied error + // see: https://stackoverflow.com/questions/1886547/access-is-denied-javascript-error-when-trying-to-access-the-document-object-of + if (navigator.userAgent.match(/msie/i)) { + iframe.src = "javascript:''"); + } + var attributes = { + id: src_settings.Constants.IFRAME_ID, + "class": adguard_selector.ignoreClassName(), + frameBorder: 0, + allowTransparency: 'true' + }; + Object.keys(attributes).forEach(function (item) { + iframe.setAttribute(item, attributes[item]); + }); + var iframeAlreadyLoaded = false; + iframe.addEventListener('load', function () { + if (iframeAlreadyLoaded) { + // IE calls load each time when we use document.close + return; + } + iframeAlreadyLoaded = true; + onIframeLoadCallback(); + }); + if (src_protectedApi.checkShadowDomSupport()) { + iframeAnchor = src_protectedApi.createElement('div'); + createShadowRootElement(iframeAnchor).appendChild(iframe); + } else { + iframeAnchor = iframe; + } + document.documentElement.appendChild(iframeAnchor); + }; + var getIframePosition = function getIframePosition() { + var maxHeight = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : iframeMaxHeight; + var viewPort = ui_validation_utils.getViewPort(); + if (!buttonPosition) { + return { + left: iframe.offsetLeft <= 0 ? window.innerWidth : iframe.offsetLeft, + top: parseInt(iframe.style.top, 10) || iframePositionOffset + }; + } + var defaultPosition = { + left: buttonPosition.left, + top: buttonPosition.top + }; + var sides = [{ + // left top + left: buttonPosition.left - iframeMaxWidth - iframePositionOffset, + top: buttonPosition.top - maxHeight - iframePositionOffset + }, { + // right top + left: buttonPosition.left + iframePositionOffset, + checkLeft: buttonPosition.left + iframeMaxWidth + iframePositionOffset, + top: buttonPosition.top - maxHeight - iframePositionOffset + }, { + // bottom right + left: buttonPosition.left + iframePositionOffset, + checkLeft: buttonPosition.left + iframeMaxWidth + iframePositionOffset, + checkTop: buttonPosition.top + maxHeight + iframePositionOffset, + top: buttonPosition.top + iframePositionOffset + }, { + // bottom left + left: buttonPosition.left - iframeMaxWidth - iframePositionOffset, + checkTop: buttonPosition.top + maxHeight + iframePositionOffset, + top: buttonPosition.top + iframePositionOffset + }]; + for (var i = 0; i < sides.length; i += 1) { + var currentSide = sides[i]; + var left = currentSide.checkLeft ? currentSide.checkLeft : currentSide.left; + var top = currentSide.checkTop ? currentSide.checkTop : currentSide.top; + if (left < 0 || left > viewPort.width) { + // eslint-disable-next-line no-continue + continue; + } + if (top < 0 || top > viewPort.height) { + // eslint-disable-next-line no-continue + continue; + } + return currentSide; + } + return defaultPosition; + }; + var specifyIframePosition = function specifyIframePosition() { + var viewPort = ui_validation_utils.getViewPort(); + if (iframe.offsetLeft + iframe.offsetWidth > viewPort.width) { + iframe.style.left = "".concat(Math.max(0, viewPort.width - iframe.offsetWidth - iframePositionOffset), "px"); + } + if (iframe.offsetLeft < 0) { + iframe.style.left = "".concat(iframePositionOffset, "px"); + } + if (iframe.offsetTop + iframe.offsetHeight > viewPort.height) { + iframe.style.top = "".concat(Math.max(0, viewPort.height - iframe.offsetHeight - iframePositionOffset), "px"); + } + if (iframe.offsetHeight < 0) { + iframe.style.top = "".concat(iframePositionOffset, "px"); + } + }; + var appendContent = function appendContent(view) { + var body = iframe.contentDocument.body; + for (var i = 0; i < body.children.length; i += 1) { + body.removeChild(body.children[i]); + } + body.appendChild(view); + }; + var localize = function localize() { + var elements = iframe.contentDocument.querySelectorAll('[i18n]'); + for (var i = 0; i < elements.length; i += 1) { + var message = src_localization.getMessage(elements[i].getAttribute('i18n')); + src_localization.translateElement(elements[i], message); + } + }; + var resizeIframe = function resizeIframe(width, height) { + var frame = iframe; + + // setting iframe height dynamically based on inner content + if (height === 'auto' || !height) { + // eslint-disable-next-line no-param-reassign + height = frame.contentWindow.document.body.querySelector('.main').clientHeight || iframeMaxHeight; + } + if (width) { + frame.width = width; + frame.style.setProperty('width', "".concat(width, "px"), 'important'); + } + if (height) { + frame.height = height; + frame.style.setProperty('height', "".concat(height, "px"), 'important'); + } + }; + var showMenuItem = function showMenuItem(viewName, controller, width, height, options) { + src_log.debug("Showing menu item: ".concat(viewName)); + if (currentItem === viewName) { + return; + } + var onIframeLoad = function onIframeLoad() { + var frameElement = iframe; + var view = src_protectedApi.createElement(views[viewName]); + var stylesElement = src_protectedApi.createStylesElement(CSS.common + CSS.button + CSS.iframe, getStyleNonce()); + view.appendChild(stylesElement); + appendContent(view); + localize(); + if (!options) { + // eslint-disable-next-line no-param-reassign + options = {}; + } + // eslint-disable-next-line no-param-reassign + options.iframeAnchor = iframeAnchor; + controller.init(frameElement, options); + currentItem = viewName; + onShowMenuItem.notify(); + if (options.dragElement) { + ui_utils.makeIframeDraggable(iframe, iframe.contentDocument.querySelector(options.dragElement)); + } + if (options.includeSvgIcons) { + var icons = src_protectedApi.createElement(HTML.svg_icons); + view.appendChild(icons); + } + + // make iframe size as like internal content size + resizeIframe(width, height); + var iframePosition = getIframePosition(options.maxHeight || iframeMaxHeight); + iframe.style.left = "".concat(iframePosition.left, "px"); + iframe.style.top = "".concat(iframePosition.top, "px"); + + // fixing iframe position after resize, to avoid iframe outside of the viewport + specifyIframePosition(); + }; + if (!iframe) { + var adgStylesSelector = src_protectedApi.createStylesElement(CSS.selector, getStyleNonce(), 'adg-styles-selector'); + if (adgStylesSelector) { + document.documentElement.appendChild(adgStylesSelector); + } + createIframe(onIframeLoad); + return; + } + onIframeLoad(); + }; + var setButtonPosition = function setButtonPosition(coords) { + buttonPosition = coords; + }; + + /** + * Removes a style element that was hiding elements by path. + * @param {string} [styleID] Style element ID. Defaults to the + * blocked-elements style so previously blocked elements reappear. + */ + var showHiddenElements = function showHiddenElements() { + var styleID = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : blockedElementsStyleID; + var stylesElement = document.documentElement.querySelector("#".concat(styleID)); + if (stylesElement) { + stylesElement.parentNode.removeChild(stylesElement); + } + }; + + // e.isTrusted checking for prevent programmatically events + // see: https://github.com/AdguardTeam/AdguardAssistant/issues/134 + var _removeIframe = function removeIframe(e) { + if (e && e.isTrusted === false) { + return false; + } + if (!iframeAnchor) { + return false; + } + document.removeEventListener('click', _removeIframe); + + // Remove the preview style so an unblocked previewed element reappears. + // NOTE: the blocked-elements style is intentionally kept so blocked + // elements stay hidden until the extension filter takes over. + showHiddenElements(previewStyleID); + document.documentElement.removeChild(iframeAnchor); + iframe = null; + iframeAnchor = null; + currentItem = null; + adguard_selector.close(); + onCloseMenu.notify(); + return undefined; + }; + var setCloseEventIfNotHitIframe = function setCloseEventIfNotHitIframe(setEvent) { + document.removeEventListener('click', _removeIframe); + if (setEvent) { + window.setTimeout(function () { + document.addEventListener('click', _removeIframe); + }, 150); + } + }; + var showDetailedMenu = function showDetailedMenu() { + var controller = new DetailedMenuController(src_ioc.get('iframeController')); + var options = { + dragElement: '.menu-head', + maxHeight: detailedMenuInitialHeight + }; + showMenuItem(src_settings.MenuItemsNames.DetailedMenu, controller, iframeMaxWidth, 'auto', options); + setCloseEventIfNotHitIframe(true); + }; + var showSelectorMenu = function showSelectorMenu() { + var controller = new SelectorMenuController(src_ioc.get('iframeController')); + var options = { + dragElement: '.head', + includeSvgIcons: true, + maxHeight: menuMaxHeight + }; + showMenuItem(src_settings.MenuItemsNames.SelectorMenu, controller, menuMaxWidth, menuInitialHeight, options); + setCloseEventIfNotHitIframe(false); + }; + var showSliderMenu = function showSliderMenu(initElement, currentElement, path, optionsState) { + var controller = new SliderMenuController(src_ioc.get('addRule'), src_ioc.get('iframeController')); + var options = { + path: path, + currentElement: currentElement, + element: initElement, + dragElement: '.head', + options: optionsState, + includeSvgIcons: true, + maxHeight: menuMaxHeight + }; + showMenuItem(src_settings.MenuItemsNames.SliderMenu, controller, menuMaxWidth, 'auto', options); + setCloseEventIfNotHitIframe(true); + }; + var showBlockPreview = function showBlockPreview(initElement, path, currentElement, optionsState) { + var controller = new BlockPreviewController(src_ioc.get('addRule'), src_ioc.get('iframeController')); + var options = { + path: path, + currentElement: currentElement, + element: initElement, + dragElement: '.head', + options: optionsState, + includeSvgIcons: true, + maxHeight: menuMaxHeight + }; + showMenuItem(src_settings.MenuItemsNames.BlockPreview, controller, menuMaxWidth, 'auto', options); + setCloseEventIfNotHitIframe(true); + }; + var showSettingsMenu = function showSettingsMenu() { + var controller = new SettingsMenuController(src_ioc.get('iframeController')); + var options = { + dragElement: '.head' + }; + showMenuItem(src_settings.MenuItemsNames.SettingsMenu, controller, 400, 468, options); + setCloseEventIfNotHitIframe(true); + }; + var resizeSliderMenuToAdvanced = function resizeSliderMenuToAdvanced() { + resizeIframe(null, null); + }; + var resizeSliderMenuToNormal = function resizeSliderMenuToNormal() { + resizeIframe(null, null); + }; + var hideElementsByPath = function hideElementsByPath(selectedPath) { + var styleID = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : blockedElementsStyleID; + if (!selectedPath) { + return false; + } + var slctr; + var style; + if (selectedPath.indexOf('://') > 0) { + // all images by src + slctr = "[src*=\"".concat(selectedPath.split('$domain=')[0], "\"]"); + } else { + // eslint-disable-next-line prefer-destructuring + slctr = selectedPath.split('##')[1]; + } + if (slctr) { + style = "".concat(slctr, "{display:none!important}"); + } else { + src_log.error('Can`t block element: `selector` path is empty'); + return false; + } + var stylesElement = document.documentElement.querySelector("#".concat(styleID)); + if (stylesElement) { + stylesElement.appendChild(document.createTextNode(" ".concat(style))); + } else { + document.documentElement.appendChild(src_protectedApi.createStylesElement(style, getStyleNonce(), styleID)); + } + + // do not hide assistant div if the user wrote a rule + // that blocks all div or iframe elements + if (iframeAnchor) { + iframeAnchor.style.setProperty('display', 'block', 'important'); + } + return undefined; + }; + var blockElement = function blockElement(path, addRule) { + if (gm.ADG_addRule) { + gm.ADG_addRule(path, function () { + _removeIframe(); + hideElementsByPath(path); + bypassCache(); + }); + } else { + if (!addRule) { + src_log.error('Callback function `addRule` can\'t be undefined!'); + } + addRule(path); + _removeIframe(); + hideElementsByPath(path); + bypassCache(); + } + }; + return { + showDetailedMenu: showDetailedMenu, + showSelectorMenu: showSelectorMenu, + showSliderMenu: showSliderMenu, + showBlockPreview: showBlockPreview, + showSettingsMenu: showSettingsMenu, + setButtonPosition: setButtonPosition, + onCloseMenu: onCloseMenu, + onShowMenuItem: onShowMenuItem, + removeIframe: _removeIframe, + resizeSliderMenuToAdvanced: resizeSliderMenuToAdvanced, + resizeSliderMenuToNormal: resizeSliderMenuToNormal, + resizeIframe: resizeIframe, + hideElementsByPath: hideElementsByPath, + showHiddenElements: showHiddenElements, + blockElement: blockElement + }; +} +/* harmony default export */ const iframe = (IframeController); +;// ./src/controllers/sliderMenuControllerMobile.js + + + + +/** + * Slider menu controller mobile + * @param addRule + * @param iframe + * @returns {{init: init}} + * @constructor + */ +function SliderMenuControllerMobile(addRule, iframe) { + var contentDocument = null; + var selectedElement = null; + var iframeCtrl = iframe; + var nodeParentsCount = 0; + var nodeChildsCount = 0; + var parents; + var children; + var nodeNumber = 0; + function showPreview() { + adguard_selector.reset(); + if (this.classList.contains('active')) { + removeClass(selectedElement, 'sg_hide_element'); + removeClass(this, 'active'); + adguard_selector.selectElement(selectedElement); + contentDocument.querySelector('.adg-plus').removeAttribute('disabled'); + contentDocument.querySelector('.adg-minus').removeAttribute('disabled'); + contentDocument.querySelector('.adg-close').removeAttribute('disabled'); + } else { + addClass(selectedElement, 'sg_hide_element'); + addClass(this, 'active'); + contentDocument.querySelector('.adg-plus').setAttribute('disabled', 'disabled'); + contentDocument.querySelector('.adg-minus').setAttribute('disabled', 'disabled'); + contentDocument.querySelector('.adg-close').setAttribute('disabled', 'disabled'); + } + } + var getUrlBlockAttribute = function getUrlBlockAttribute(element) { + var urlBlockAttributes = ['src', 'data']; + for (var i = 0; i < urlBlockAttributes.length; i += 1) { + var attr = urlBlockAttributes[i]; + var value = element.getAttribute(attr); + if (value) { + return value; + } + } + return null; + }; + var getFilterText = function getFilterText() { + var options = { + urlMask: getUrlBlockAttribute(selectedElement), + cssSelectorType: 'STRICT_FULL', + isBlockOneDomain: false, + url: document.location, + ruleType: 'CSS' + }; + return adguard_rules_constructor.constructRuleText(selectedElement, options); + }; + var blockElement = function blockElement() { + selectedElement.classList.remove('sg_hide_element'); + selectedElement.style.display = 'none'; + addRule(getFilterText()); + iframeCtrl.removeIframe(); + }; + var onSliderMove = function onSliderMove(element) { + selectedElement = element; + adguard_selector.selectElement(element); + }; + var plus = function plus() { + nodeNumber = nodeNumber + 1 > nodeParentsCount ? nodeNumber : nodeNumber + 1; + if (nodeNumber >= 0) { + if (parents[nodeNumber]) onSliderMove(parents[nodeNumber]); + // eslint-disable-next-line no-bitwise + } else if (children[~nodeNumber]) onSliderMove(children[~nodeNumber]); + }; + var minus = function minus() { + // TODO: rewrite this + // eslint-disable-next-line no-unused-expressions, no-self-assign + nodeNumber <= -nodeChildsCount ? nodeNumber = nodeNumber : nodeNumber -= 1; + if (nodeNumber >= 0) { + if (parents[nodeNumber]) onSliderMove(parents[nodeNumber]); + // eslint-disable-next-line no-bitwise + } else if (children[~nodeNumber]) onSliderMove(children[~nodeNumber]); + }; + var bindEvents = function bindEvents() { + var menuEvents = { + '.adg-close': iframeCtrl.showSelectorMenu, + '.adg-preview': showPreview, + '.adg-accept': blockElement, + '.adg-plus': plus, + '.adg-minus': minus + }; + Object.keys(menuEvents).forEach(function (item) { + var elems = contentDocument.querySelectorAll(item); + toArray(elems).forEach(function (elem) { + return elem.addEventListener('click', menuEvents[item]); + }); + }); + window.addEventListener('orientationchange', iframeCtrl.showSelectorMenu); + }; + + /* + Called from IframeController._showMenuItem to initialize view + */ + // eslint-disable-next-line no-shadow + var init = function init(iframe, options) { + selectedElement = options.element; + // eslint-disable-next-line prefer-destructuring + contentDocument = iframe.contentDocument; + bindEvents(); + adguard_selector.selectElement(selectedElement); + children = getAllChildren(selectedElement); + parents = getParentsLevel(selectedElement); + parents.splice(0, 0, selectedElement); + nodeParentsCount = parents.length; + nodeChildsCount = children.length; + }; + return { + init: init + }; +} +;// ./package.json +const package_namespaceObject = {"rE":"4.4.13"}; +;// ./src/iframe.mobile.js +function iframe_mobile_typeof(o) { "@babel/helpers - typeof"; return iframe_mobile_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, iframe_mobile_typeof(o); } +function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } +function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } +function _defineProperty(e, r, t) { return (r = iframe_mobile_toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; } +function iframe_mobile_toPropertyKey(t) { var i = iframe_mobile_toPrimitive(t, "string"); return "symbol" == iframe_mobile_typeof(i) ? i : i + ""; } +function iframe_mobile_toPrimitive(t, r) { if ("object" != iframe_mobile_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != iframe_mobile_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } + + + + + + + + + + + +/** + * Manages iframe and it's content + * @returns {{ + * showSelectorMenu: showSelectorMenu, + * showSliderMenu: showSliderMenu, + * setButtonPosition: setButtonPosition, + * onCloseMenu: CustomEvent, + * onShowMenuItem: CustomEvent, + * removeIframe: removeIframe + * }} + * @constructor + */ +function IframeControllerMobile() { + var iframe = null; + var iframeElement = null; + var currentItem = null; + var onCloseMenu = new CustomEvent(); + var onShowMenuItem = new CustomEvent(); + var views = {}; + views['mobilePopup.html'] = HTML.popup; + views['mobileMenu.html'] = HTML.mobile_menu; + var defaultCSS = { + clip: 'auto', + 'z-index': 2147483647 + }; + var defaultAttributes = { + "class": adguard_selector.ignoreClassName(), + frameBorder: 0, + allowTransparency: 'true', + id: 'iframe-x2eRYVVQRsG9' + }; + var updateIframeAttrs = function updateIframeAttrs(attrs) { + iframe.removeAttribute('style'); + iframe.removeAttribute('height'); + var attributes = _objectSpread(_objectSpread({}, defaultAttributes), attrs); + Object.keys(attributes).forEach(function (item) { + iframe.setAttribute(item, attributes[item]); + }); + }; + var updateIframeStyles = function updateIframeStyles(styles) { + var css = _objectSpread(_objectSpread({}, defaultCSS), styles); + Object.keys(css).forEach(function (item) { + iframe.style[item] = css[item]; + }); + }; + var createIframe = function createIframe(onIframeLoadCallback, styles, attrs) { + src_log.debug('Creating iframe'); + if (document.querySelector("#".concat(defaultAttributes.id))) { + src_log.error('Iframe already added'); + return; + } + iframe = src_protectedApi.createElement('iframe'); + iframe.addEventListener('load', function () { + onIframeLoadCallback(); + updateIframeAttrs(attrs); + updateIframeStyles(styles); + }); + iframeElement = iframe; + var adgStylesSelector = src_protectedApi.createStylesElement(CSS.selector, 'adg-styles-selector'); + if (adgStylesSelector) { + document.documentElement.appendChild(adgStylesSelector); + } + document.documentElement.appendChild(iframeElement); + }; + var appendContent = function appendContent(view) { + var body = iframe.contentDocument.body; + for (var i = 0; i < body.children.length; i += 1) { + body.removeChild(body.children[i]); + } + body.appendChild(view); + }; + var localize = function localize() { + var elements = iframe.contentDocument.querySelectorAll('[i18n]'); + for (var i = 0; i < elements.length; i += 1) { + var message = src_localization.getMessage(elements[i].getAttribute('i18n')); + src_localization.translateElement(elements[i], message); + } + var elementsWithTitle = iframe.contentDocument.querySelectorAll('[i18n-title]'); + for (var j = 0; j < elementsWithTitle.length; j += 1) { + var title = src_localization.getMessage(elementsWithTitle[j].getAttribute('i18n-title')); + elementsWithTitle[j].setAttribute('title', title); + } + }; + var hideIframe = function hideIframe() { + if (iframe) { + iframe.style.display = 'none'; + } + }; + var showIframe = function showIframe() { + if (iframe) { + iframe.style.display = 'block'; + } + }; + var showMenuItem = function showMenuItem(viewName, controller, options, styles, attrs) { + if (currentItem === viewName) { + return; + } + var onIframeLoad = function onIframeLoad() { + var frameElement = iframe; + var view = src_protectedApi.createElement(views[viewName]); + var iframeStyles = CSS.common + CSS.mobile; + view.appendChild(src_protectedApi.createStylesElement(iframeStyles)); + appendContent(view); + localize(); + if (!options) { + // eslint-disable-next-line no-param-reassign + options = {}; + } + if (controller) { + controller.init(frameElement, options); + } + updateIframeAttrs(attrs); + updateIframeStyles(styles); + currentItem = viewName; + onShowMenuItem.notify(); + showIframe(); + }; + if (!iframe) { + var adgStylesSelector = src_protectedApi.createStylesElement(CSS.selector, 'adg-styles-selector'); + if (adgStylesSelector) { + document.documentElement.appendChild(adgStylesSelector); + } + createIframe(onIframeLoad, styles, attrs); + return; + } + onIframeLoad(); + }; + var startSelect = function startSelect() { + hideIframe(); + var controller = new SelectorMenuController(src_ioc.get('iframeController')); + controller.startSelector(); + }; + var showSelectorMenu = function showSelectorMenu() { + hideIframe(); + adguard_selector.close(); + var styles = { + position: 'fixed', + left: 0, + top: 0, + right: 0, + bottom: 0, + margin: 'auto', + 'border-radius': '2px', + background: 'transparent', + width: '40vmax', + height: '40vmax' + }; + + // eslint-disable-next-line no-use-before-define + showMenuItem('mobilePopup.html', mobilePopupButtonsInit(), null, styles); + }; + + // e.isTrusted checking for prevent programmatically events + // see: https://github.com/AdguardTeam/AdguardAssistant/issues/134 + var _removeIframe = function removeIframe(e) { + if (e && e.isTrusted === false) { + return false; + } + if (!iframeElement) { + return false; + } + document.removeEventListener('click', _removeIframe); + window.removeEventListener('orientationchange', showSelectorMenu); + document.documentElement.removeChild(iframeElement); + iframe = null; + iframeElement = null; + currentItem = null; + adguard_selector.close(); + onCloseMenu.notify(); + return undefined; + }; + var mobilePopupButtonsInit = function mobilePopupButtonsInit() { + return { + init: function init() { + var startSelectMode = iframe.contentDocument.querySelector('.start-select-mode'); + var cancelSelectMode = iframe.contentDocument.querySelector('.cancel-select-mode'); + var appVersionElem = iframe.contentDocument.querySelector('#appVersion'); + startSelectMode.addEventListener('click', startSelect); + cancelSelectMode.addEventListener('click', _removeIframe); + appVersionElem.innerText = "v".concat(package_namespaceObject.rE); + } + }; + }; + var showSliderMenu = function showSliderMenu(element) { + var controller = new SliderMenuControllerMobile(src_ioc.get('addRule'), src_ioc.get('iframeController')); + var options = { + element: element + }; + var styles = { + position: 'fixed', + bottom: 0, + left: '50%', + transform: 'translateX(-50%)', + width: '70vw', + height: '27vw' + }; + showMenuItem('mobileMenu.html', controller, options, styles); + }; + return { + showSelectorMenu: showSelectorMenu, + showSliderMenu: showSliderMenu, + onCloseMenu: onCloseMenu, + onShowMenuItem: onShowMenuItem, + removeIframe: _removeIframe, + startSelect: startSelect + }; +} +;// ./src/embedded.js +/* global AdguardSettings */ + + + + + + + + +/* embedded script for extensions */ +/* + * adguardAssistantExtended main function is for desktop browsers + */ +function adguardAssistantExtended() { + var adguardSettings = typeof AdguardSettings === 'undefined' ? null : AdguardSettings; + src_wot.registerWotEventHandler(); + src_settings.setAdguardSettings(adguardSettings); + var iframeController = new iframe(); + src_ioc.register('iframeController', iframeController); + return { + start: function start(element, callback) { + src_ioc.register('addRule', src_protectedApi.functionBind.call(callback, this)); + if (element) { + iframeController.showSelectorMenu(); + iframeController.showSliderMenu(element); + } else { + iframeController.showSelectorMenu(); + } + }, + close: function close() { + iframeController.removeIframe(); + } + }; +} + +/* + * adguardAssistantMini function is for mobile browsers + */ +function adguardAssistantMini() { + var iframeController = new IframeControllerMobile(); + src_ioc.register('iframeController', iframeController); + return { + start: function start(element, callback) { + src_ioc.register('addRule', src_protectedApi.functionBind.call(callback, this)); + if (element) { + iframeController.showSelectorMenu(); + iframeController.showSliderMenu(element); + } else { + iframeController.showSelectorMenu(); + } + }, + close: function close() { + iframeController.removeIframe(); + } + }; +} +;// ./src/helpers.js +// eslint-disable-next-line max-len +var mobileReg = /(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|ipad|iris|kindle|Android|Silk|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i; +var isMobile = function isMobile(ua) { + return mobileReg.test(ua); +}; +;// ./src/index.js + + +var adguardAssistant = isMobile(navigator.userAgent) ? adguardAssistantMini : adguardAssistantExtended; +})(); + +/******/ return __nested_webpack_exports__; +/******/ })() +; +}); + +}, +28467(module, __unused_webpack_exports, __webpack_require__) { +/* module decorator */ module = __webpack_require__.nmd(module); +(function (global, factory) { + if (typeof define === "function" && define.amd) { + define("webextension-polyfill", ["module"], factory); + } else if (true) { + factory(module); + } else { var mod } +})(typeof globalThis !== "undefined" ? globalThis : typeof self !== "undefined" ? self : this, function (module) { + /* webextension-polyfill - v0.12.0 - Tue May 14 2024 18:01:29 */ + /* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */ + /* vim: set sts=2 sw=2 et tw=80: */ + /* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + "use strict"; + + if (!(globalThis.chrome && globalThis.chrome.runtime && globalThis.chrome.runtime.id)) { + throw new Error("This script should only be loaded in a browser extension."); + } + if (!(globalThis.browser && globalThis.browser.runtime && globalThis.browser.runtime.id)) { + const CHROME_SEND_MESSAGE_CALLBACK_NO_RESPONSE_MESSAGE = "The message port closed before a response was received."; + + // Wrapping the bulk of this polyfill in a one-time-use function is a minor + // optimization for Firefox. Since Spidermonkey does not fully parse the + // contents of a function until the first time it's called, and since it will + // never actually need to be called, this allows the polyfill to be included + // in Firefox nearly for free. + const wrapAPIs = extensionAPIs => { + // NOTE: apiMetadata is associated to the content of the api-metadata.json file + // at build time by replacing the following "include" with the content of the + // JSON file. + const apiMetadata = { + "alarms": { + "clear": { + "minArgs": 0, + "maxArgs": 1 + }, + "clearAll": { + "minArgs": 0, + "maxArgs": 0 + }, + "get": { + "minArgs": 0, + "maxArgs": 1 + }, + "getAll": { + "minArgs": 0, + "maxArgs": 0 + } + }, + "bookmarks": { + "create": { + "minArgs": 1, + "maxArgs": 1 + }, + "get": { + "minArgs": 1, + "maxArgs": 1 + }, + "getChildren": { + "minArgs": 1, + "maxArgs": 1 + }, + "getRecent": { + "minArgs": 1, + "maxArgs": 1 + }, + "getSubTree": { + "minArgs": 1, + "maxArgs": 1 + }, + "getTree": { + "minArgs": 0, + "maxArgs": 0 + }, + "move": { + "minArgs": 2, + "maxArgs": 2 + }, + "remove": { + "minArgs": 1, + "maxArgs": 1 + }, + "removeTree": { + "minArgs": 1, + "maxArgs": 1 + }, + "search": { + "minArgs": 1, + "maxArgs": 1 + }, + "update": { + "minArgs": 2, + "maxArgs": 2 + } + }, + "browserAction": { + "disable": { + "minArgs": 0, + "maxArgs": 1, + "fallbackToNoCallback": true + }, + "enable": { + "minArgs": 0, + "maxArgs": 1, + "fallbackToNoCallback": true + }, + "getBadgeBackgroundColor": { + "minArgs": 1, + "maxArgs": 1 + }, + "getBadgeText": { + "minArgs": 1, + "maxArgs": 1 + }, + "getPopup": { + "minArgs": 1, + "maxArgs": 1 + }, + "getTitle": { + "minArgs": 1, + "maxArgs": 1 + }, + "openPopup": { + "minArgs": 0, + "maxArgs": 0 + }, + "setBadgeBackgroundColor": { + "minArgs": 1, + "maxArgs": 1, + "fallbackToNoCallback": true + }, + "setBadgeText": { + "minArgs": 1, + "maxArgs": 1, + "fallbackToNoCallback": true + }, + "setIcon": { + "minArgs": 1, + "maxArgs": 1 + }, + "setPopup": { + "minArgs": 1, + "maxArgs": 1, + "fallbackToNoCallback": true + }, + "setTitle": { + "minArgs": 1, + "maxArgs": 1, + "fallbackToNoCallback": true + } + }, + "browsingData": { + "remove": { + "minArgs": 2, + "maxArgs": 2 + }, + "removeCache": { + "minArgs": 1, + "maxArgs": 1 + }, + "removeCookies": { + "minArgs": 1, + "maxArgs": 1 + }, + "removeDownloads": { + "minArgs": 1, + "maxArgs": 1 + }, + "removeFormData": { + "minArgs": 1, + "maxArgs": 1 + }, + "removeHistory": { + "minArgs": 1, + "maxArgs": 1 + }, + "removeLocalStorage": { + "minArgs": 1, + "maxArgs": 1 + }, + "removePasswords": { + "minArgs": 1, + "maxArgs": 1 + }, + "removePluginData": { + "minArgs": 1, + "maxArgs": 1 + }, + "settings": { + "minArgs": 0, + "maxArgs": 0 + } + }, + "commands": { + "getAll": { + "minArgs": 0, + "maxArgs": 0 + } + }, + "contextMenus": { + "remove": { + "minArgs": 1, + "maxArgs": 1 + }, + "removeAll": { + "minArgs": 0, + "maxArgs": 0 + }, + "update": { + "minArgs": 2, + "maxArgs": 2 + } + }, + "cookies": { + "get": { + "minArgs": 1, + "maxArgs": 1 + }, + "getAll": { + "minArgs": 1, + "maxArgs": 1 + }, + "getAllCookieStores": { + "minArgs": 0, + "maxArgs": 0 + }, + "remove": { + "minArgs": 1, + "maxArgs": 1 + }, + "set": { + "minArgs": 1, + "maxArgs": 1 + } + }, + "devtools": { + "inspectedWindow": { + "eval": { + "minArgs": 1, + "maxArgs": 2, + "singleCallbackArg": false + } + }, + "panels": { + "create": { + "minArgs": 3, + "maxArgs": 3, + "singleCallbackArg": true + }, + "elements": { + "createSidebarPane": { + "minArgs": 1, + "maxArgs": 1 + } + } + } + }, + "downloads": { + "cancel": { + "minArgs": 1, + "maxArgs": 1 + }, + "download": { + "minArgs": 1, + "maxArgs": 1 + }, + "erase": { + "minArgs": 1, + "maxArgs": 1 + }, + "getFileIcon": { + "minArgs": 1, + "maxArgs": 2 + }, + "open": { + "minArgs": 1, + "maxArgs": 1, + "fallbackToNoCallback": true + }, + "pause": { + "minArgs": 1, + "maxArgs": 1 + }, + "removeFile": { + "minArgs": 1, + "maxArgs": 1 + }, + "resume": { + "minArgs": 1, + "maxArgs": 1 + }, + "search": { + "minArgs": 1, + "maxArgs": 1 + }, + "show": { + "minArgs": 1, + "maxArgs": 1, + "fallbackToNoCallback": true + } + }, + "extension": { + "isAllowedFileSchemeAccess": { + "minArgs": 0, + "maxArgs": 0 + }, + "isAllowedIncognitoAccess": { + "minArgs": 0, + "maxArgs": 0 + } + }, + "history": { + "addUrl": { + "minArgs": 1, + "maxArgs": 1 + }, + "deleteAll": { + "minArgs": 0, + "maxArgs": 0 + }, + "deleteRange": { + "minArgs": 1, + "maxArgs": 1 + }, + "deleteUrl": { + "minArgs": 1, + "maxArgs": 1 + }, + "getVisits": { + "minArgs": 1, + "maxArgs": 1 + }, + "search": { + "minArgs": 1, + "maxArgs": 1 + } + }, + "i18n": { + "detectLanguage": { + "minArgs": 1, + "maxArgs": 1 + }, + "getAcceptLanguages": { + "minArgs": 0, + "maxArgs": 0 + } + }, + "identity": { + "launchWebAuthFlow": { + "minArgs": 1, + "maxArgs": 1 + } + }, + "idle": { + "queryState": { + "minArgs": 1, + "maxArgs": 1 + } + }, + "management": { + "get": { + "minArgs": 1, + "maxArgs": 1 + }, + "getAll": { + "minArgs": 0, + "maxArgs": 0 + }, + "getSelf": { + "minArgs": 0, + "maxArgs": 0 + }, + "setEnabled": { + "minArgs": 2, + "maxArgs": 2 + }, + "uninstallSelf": { + "minArgs": 0, + "maxArgs": 1 + } + }, + "notifications": { + "clear": { + "minArgs": 1, + "maxArgs": 1 + }, + "create": { + "minArgs": 1, + "maxArgs": 2 + }, + "getAll": { + "minArgs": 0, + "maxArgs": 0 + }, + "getPermissionLevel": { + "minArgs": 0, + "maxArgs": 0 + }, + "update": { + "minArgs": 2, + "maxArgs": 2 + } + }, + "pageAction": { + "getPopup": { + "minArgs": 1, + "maxArgs": 1 + }, + "getTitle": { + "minArgs": 1, + "maxArgs": 1 + }, + "hide": { + "minArgs": 1, + "maxArgs": 1, + "fallbackToNoCallback": true + }, + "setIcon": { + "minArgs": 1, + "maxArgs": 1 + }, + "setPopup": { + "minArgs": 1, + "maxArgs": 1, + "fallbackToNoCallback": true + }, + "setTitle": { + "minArgs": 1, + "maxArgs": 1, + "fallbackToNoCallback": true + }, + "show": { + "minArgs": 1, + "maxArgs": 1, + "fallbackToNoCallback": true + } + }, + "permissions": { + "contains": { + "minArgs": 1, + "maxArgs": 1 + }, + "getAll": { + "minArgs": 0, + "maxArgs": 0 + }, + "remove": { + "minArgs": 1, + "maxArgs": 1 + }, + "request": { + "minArgs": 1, + "maxArgs": 1 + } + }, + "runtime": { + "getBackgroundPage": { + "minArgs": 0, + "maxArgs": 0 + }, + "getPlatformInfo": { + "minArgs": 0, + "maxArgs": 0 + }, + "openOptionsPage": { + "minArgs": 0, + "maxArgs": 0 + }, + "requestUpdateCheck": { + "minArgs": 0, + "maxArgs": 0 + }, + "sendMessage": { + "minArgs": 1, + "maxArgs": 3 + }, + "sendNativeMessage": { + "minArgs": 2, + "maxArgs": 2 + }, + "setUninstallURL": { + "minArgs": 1, + "maxArgs": 1 + } + }, + "sessions": { + "getDevices": { + "minArgs": 0, + "maxArgs": 1 + }, + "getRecentlyClosed": { + "minArgs": 0, + "maxArgs": 1 + }, + "restore": { + "minArgs": 0, + "maxArgs": 1 + } + }, + "storage": { + "local": { + "clear": { + "minArgs": 0, + "maxArgs": 0 + }, + "get": { + "minArgs": 0, + "maxArgs": 1 + }, + "getBytesInUse": { + "minArgs": 0, + "maxArgs": 1 + }, + "remove": { + "minArgs": 1, + "maxArgs": 1 + }, + "set": { + "minArgs": 1, + "maxArgs": 1 + } + }, + "managed": { + "get": { + "minArgs": 0, + "maxArgs": 1 + }, + "getBytesInUse": { + "minArgs": 0, + "maxArgs": 1 + } + }, + "sync": { + "clear": { + "minArgs": 0, + "maxArgs": 0 + }, + "get": { + "minArgs": 0, + "maxArgs": 1 + }, + "getBytesInUse": { + "minArgs": 0, + "maxArgs": 1 + }, + "remove": { + "minArgs": 1, + "maxArgs": 1 + }, + "set": { + "minArgs": 1, + "maxArgs": 1 + } + } + }, + "tabs": { + "captureVisibleTab": { + "minArgs": 0, + "maxArgs": 2 + }, + "create": { + "minArgs": 1, + "maxArgs": 1 + }, + "detectLanguage": { + "minArgs": 0, + "maxArgs": 1 + }, + "discard": { + "minArgs": 0, + "maxArgs": 1 + }, + "duplicate": { + "minArgs": 1, + "maxArgs": 1 + }, + "executeScript": { + "minArgs": 1, + "maxArgs": 2 + }, + "get": { + "minArgs": 1, + "maxArgs": 1 + }, + "getCurrent": { + "minArgs": 0, + "maxArgs": 0 + }, + "getZoom": { + "minArgs": 0, + "maxArgs": 1 + }, + "getZoomSettings": { + "minArgs": 0, + "maxArgs": 1 + }, + "goBack": { + "minArgs": 0, + "maxArgs": 1 + }, + "goForward": { + "minArgs": 0, + "maxArgs": 1 + }, + "highlight": { + "minArgs": 1, + "maxArgs": 1 + }, + "insertCSS": { + "minArgs": 1, + "maxArgs": 2 + }, + "move": { + "minArgs": 2, + "maxArgs": 2 + }, + "query": { + "minArgs": 1, + "maxArgs": 1 + }, + "reload": { + "minArgs": 0, + "maxArgs": 2 + }, + "remove": { + "minArgs": 1, + "maxArgs": 1 + }, + "removeCSS": { + "minArgs": 1, + "maxArgs": 2 + }, + "sendMessage": { + "minArgs": 2, + "maxArgs": 3 + }, + "setZoom": { + "minArgs": 1, + "maxArgs": 2 + }, + "setZoomSettings": { + "minArgs": 1, + "maxArgs": 2 + }, + "update": { + "minArgs": 1, + "maxArgs": 2 + } + }, + "topSites": { + "get": { + "minArgs": 0, + "maxArgs": 0 + } + }, + "webNavigation": { + "getAllFrames": { + "minArgs": 1, + "maxArgs": 1 + }, + "getFrame": { + "minArgs": 1, + "maxArgs": 1 + } + }, + "webRequest": { + "handlerBehaviorChanged": { + "minArgs": 0, + "maxArgs": 0 + } + }, + "windows": { + "create": { + "minArgs": 0, + "maxArgs": 1 + }, + "get": { + "minArgs": 1, + "maxArgs": 2 + }, + "getAll": { + "minArgs": 0, + "maxArgs": 1 + }, + "getCurrent": { + "minArgs": 0, + "maxArgs": 1 + }, + "getLastFocused": { + "minArgs": 0, + "maxArgs": 1 + }, + "remove": { + "minArgs": 1, + "maxArgs": 1 + }, + "update": { + "minArgs": 2, + "maxArgs": 2 + } + } + }; + if (Object.keys(apiMetadata).length === 0) { + throw new Error("api-metadata.json has not been included in browser-polyfill"); + } + + /** + * A WeakMap subclass which creates and stores a value for any key which does + * not exist when accessed, but behaves exactly as an ordinary WeakMap + * otherwise. + * + * @param {function} createItem + * A function which will be called in order to create the value for any + * key which does not exist, the first time it is accessed. The + * function receives, as its only argument, the key being created. + */ + class DefaultWeakMap extends WeakMap { + constructor(createItem, items = undefined) { + super(items); + this.createItem = createItem; + } + get(key) { + if (!this.has(key)) { + this.set(key, this.createItem(key)); + } + return super.get(key); + } + } + + /** + * Returns true if the given object is an object with a `then` method, and can + * therefore be assumed to behave as a Promise. + * + * @param {*} value The value to test. + * @returns {boolean} True if the value is thenable. + */ + const isThenable = value => { + return value && typeof value === "object" && typeof value.then === "function"; + }; + + /** + * Creates and returns a function which, when called, will resolve or reject + * the given promise based on how it is called: + * + * - If, when called, `chrome.runtime.lastError` contains a non-null object, + * the promise is rejected with that value. + * - If the function is called with exactly one argument, the promise is + * resolved to that value. + * - Otherwise, the promise is resolved to an array containing all of the + * function's arguments. + * + * @param {object} promise + * An object containing the resolution and rejection functions of a + * promise. + * @param {function} promise.resolve + * The promise's resolution function. + * @param {function} promise.reject + * The promise's rejection function. + * @param {object} metadata + * Metadata about the wrapped method which has created the callback. + * @param {boolean} metadata.singleCallbackArg + * Whether or not the promise is resolved with only the first + * argument of the callback, alternatively an array of all the + * callback arguments is resolved. By default, if the callback + * function is invoked with only a single argument, that will be + * resolved to the promise, while all arguments will be resolved as + * an array if multiple are given. + * + * @returns {function} + * The generated callback function. + */ + const makeCallback = (promise, metadata) => { + return (...callbackArgs) => { + if (extensionAPIs.runtime.lastError) { + promise.reject(new Error(extensionAPIs.runtime.lastError.message)); + } else if (metadata.singleCallbackArg || callbackArgs.length <= 1 && metadata.singleCallbackArg !== false) { + promise.resolve(callbackArgs[0]); + } else { + promise.resolve(callbackArgs); + } + }; + }; + const pluralizeArguments = numArgs => numArgs == 1 ? "argument" : "arguments"; + + /** + * Creates a wrapper function for a method with the given name and metadata. + * + * @param {string} name + * The name of the method which is being wrapped. + * @param {object} metadata + * Metadata about the method being wrapped. + * @param {integer} metadata.minArgs + * The minimum number of arguments which must be passed to the + * function. If called with fewer than this number of arguments, the + * wrapper will raise an exception. + * @param {integer} metadata.maxArgs + * The maximum number of arguments which may be passed to the + * function. If called with more than this number of arguments, the + * wrapper will raise an exception. + * @param {boolean} metadata.singleCallbackArg + * Whether or not the promise is resolved with only the first + * argument of the callback, alternatively an array of all the + * callback arguments is resolved. By default, if the callback + * function is invoked with only a single argument, that will be + * resolved to the promise, while all arguments will be resolved as + * an array if multiple are given. + * + * @returns {function(object, ...*)} + * The generated wrapper function. + */ + const wrapAsyncFunction = (name, metadata) => { + return function asyncFunctionWrapper(target, ...args) { + if (args.length < metadata.minArgs) { + throw new Error(`Expected at least ${metadata.minArgs} ${pluralizeArguments(metadata.minArgs)} for ${name}(), got ${args.length}`); + } + if (args.length > metadata.maxArgs) { + throw new Error(`Expected at most ${metadata.maxArgs} ${pluralizeArguments(metadata.maxArgs)} for ${name}(), got ${args.length}`); + } + return new Promise((resolve, reject) => { + if (metadata.fallbackToNoCallback) { + // This API method has currently no callback on Chrome, but it return a promise on Firefox, + // and so the polyfill will try to call it with a callback first, and it will fallback + // to not passing the callback if the first call fails. + try { + target[name](...args, makeCallback({ + resolve, + reject + }, metadata)); + } catch (cbError) { + console.warn(`${name} API method doesn't seem to support the callback parameter, ` + "falling back to call it without a callback: ", cbError); + target[name](...args); + + // Update the API method metadata, so that the next API calls will not try to + // use the unsupported callback anymore. + metadata.fallbackToNoCallback = false; + metadata.noCallback = true; + resolve(); + } + } else if (metadata.noCallback) { + target[name](...args); + resolve(); + } else { + target[name](...args, makeCallback({ + resolve, + reject + }, metadata)); + } + }); + }; + }; + + /** + * Wraps an existing method of the target object, so that calls to it are + * intercepted by the given wrapper function. The wrapper function receives, + * as its first argument, the original `target` object, followed by each of + * the arguments passed to the original method. + * + * @param {object} target + * The original target object that the wrapped method belongs to. + * @param {function} method + * The method being wrapped. This is used as the target of the Proxy + * object which is created to wrap the method. + * @param {function} wrapper + * The wrapper function which is called in place of a direct invocation + * of the wrapped method. + * + * @returns {Proxy} + * A Proxy object for the given method, which invokes the given wrapper + * method in its place. + */ + const wrapMethod = (target, method, wrapper) => { + return new Proxy(method, { + apply(targetMethod, thisObj, args) { + return wrapper.call(thisObj, target, ...args); + } + }); + }; + let hasOwnProperty = Function.call.bind(Object.prototype.hasOwnProperty); + + /** + * Wraps an object in a Proxy which intercepts and wraps certain methods + * based on the given `wrappers` and `metadata` objects. + * + * @param {object} target + * The target object to wrap. + * + * @param {object} [wrappers = {}] + * An object tree containing wrapper functions for special cases. Any + * function present in this object tree is called in place of the + * method in the same location in the `target` object tree. These + * wrapper methods are invoked as described in {@see wrapMethod}. + * + * @param {object} [metadata = {}] + * An object tree containing metadata used to automatically generate + * Promise-based wrapper functions for asynchronous. Any function in + * the `target` object tree which has a corresponding metadata object + * in the same location in the `metadata` tree is replaced with an + * automatically-generated wrapper function, as described in + * {@see wrapAsyncFunction} + * + * @returns {Proxy} + */ + const wrapObject = (target, wrappers = {}, metadata = {}) => { + let cache = Object.create(null); + let handlers = { + has(proxyTarget, prop) { + return prop in target || prop in cache; + }, + get(proxyTarget, prop, receiver) { + if (prop in cache) { + return cache[prop]; + } + if (!(prop in target)) { + return undefined; + } + let value = target[prop]; + if (typeof value === "function") { + // This is a method on the underlying object. Check if we need to do + // any wrapping. + + if (typeof wrappers[prop] === "function") { + // We have a special-case wrapper for this method. + value = wrapMethod(target, target[prop], wrappers[prop]); + } else if (hasOwnProperty(metadata, prop)) { + // This is an async method that we have metadata for. Create a + // Promise wrapper for it. + let wrapper = wrapAsyncFunction(prop, metadata[prop]); + value = wrapMethod(target, target[prop], wrapper); + } else { + // This is a method that we don't know or care about. Return the + // original method, bound to the underlying object. + value = value.bind(target); + } + } else if (typeof value === "object" && value !== null && (hasOwnProperty(wrappers, prop) || hasOwnProperty(metadata, prop))) { + // This is an object that we need to do some wrapping for the children + // of. Create a sub-object wrapper for it with the appropriate child + // metadata. + value = wrapObject(value, wrappers[prop], metadata[prop]); + } else if (hasOwnProperty(metadata, "*")) { + // Wrap all properties in * namespace. + value = wrapObject(value, wrappers[prop], metadata["*"]); + } else { + // We don't need to do any wrapping for this property, + // so just forward all access to the underlying object. + Object.defineProperty(cache, prop, { + configurable: true, + enumerable: true, + get() { + return target[prop]; + }, + set(value) { + target[prop] = value; + } + }); + return value; + } + cache[prop] = value; + return value; + }, + set(proxyTarget, prop, value, receiver) { + if (prop in cache) { + cache[prop] = value; + } else { + target[prop] = value; + } + return true; + }, + defineProperty(proxyTarget, prop, desc) { + return Reflect.defineProperty(cache, prop, desc); + }, + deleteProperty(proxyTarget, prop) { + return Reflect.deleteProperty(cache, prop); + } + }; + + // Per contract of the Proxy API, the "get" proxy handler must return the + // original value of the target if that value is declared read-only and + // non-configurable. For this reason, we create an object with the + // prototype set to `target` instead of using `target` directly. + // Otherwise we cannot return a custom object for APIs that + // are declared read-only and non-configurable, such as `chrome.devtools`. + // + // The proxy handlers themselves will still use the original `target` + // instead of the `proxyTarget`, so that the methods and properties are + // dereferenced via the original targets. + let proxyTarget = Object.create(target); + return new Proxy(proxyTarget, handlers); + }; + + /** + * Creates a set of wrapper functions for an event object, which handles + * wrapping of listener functions that those messages are passed. + * + * A single wrapper is created for each listener function, and stored in a + * map. Subsequent calls to `addListener`, `hasListener`, or `removeListener` + * retrieve the original wrapper, so that attempts to remove a + * previously-added listener work as expected. + * + * @param {DefaultWeakMap} wrapperMap + * A DefaultWeakMap object which will create the appropriate wrapper + * for a given listener function when one does not exist, and retrieve + * an existing one when it does. + * + * @returns {object} + */ + const wrapEvent = wrapperMap => ({ + addListener(target, listener, ...args) { + target.addListener(wrapperMap.get(listener), ...args); + }, + hasListener(target, listener) { + return target.hasListener(wrapperMap.get(listener)); + }, + removeListener(target, listener) { + target.removeListener(wrapperMap.get(listener)); + } + }); + const onRequestFinishedWrappers = new DefaultWeakMap(listener => { + if (typeof listener !== "function") { + return listener; + } + + /** + * Wraps an onRequestFinished listener function so that it will return a + * `getContent()` property which returns a `Promise` rather than using a + * callback API. + * + * @param {object} req + * The HAR entry object representing the network request. + */ + return function onRequestFinished(req) { + const wrappedReq = wrapObject(req, {} /* wrappers */, { + getContent: { + minArgs: 0, + maxArgs: 0 + } + }); + listener(wrappedReq); + }; + }); + const onMessageWrappers = new DefaultWeakMap(listener => { + if (typeof listener !== "function") { + return listener; + } + + /** + * Wraps a message listener function so that it may send responses based on + * its return value, rather than by returning a sentinel value and calling a + * callback. If the listener function returns a Promise, the response is + * sent when the promise either resolves or rejects. + * + * @param {*} message + * The message sent by the other end of the channel. + * @param {object} sender + * Details about the sender of the message. + * @param {function(*)} sendResponse + * A callback which, when called with an arbitrary argument, sends + * that value as a response. + * @returns {boolean} + * True if the wrapped listener returned a Promise, which will later + * yield a response. False otherwise. + */ + return function onMessage(message, sender, sendResponse) { + let didCallSendResponse = false; + let wrappedSendResponse; + let sendResponsePromise = new Promise(resolve => { + wrappedSendResponse = function (response) { + didCallSendResponse = true; + resolve(response); + }; + }); + let result; + try { + result = listener(message, sender, wrappedSendResponse); + } catch (err) { + result = Promise.reject(err); + } + const isResultThenable = result !== true && isThenable(result); + + // If the listener didn't returned true or a Promise, or called + // wrappedSendResponse synchronously, we can exit earlier + // because there will be no response sent from this listener. + if (result !== true && !isResultThenable && !didCallSendResponse) { + return false; + } + + // A small helper to send the message if the promise resolves + // and an error if the promise rejects (a wrapped sendMessage has + // to translate the message into a resolved promise or a rejected + // promise). + const sendPromisedResult = promise => { + promise.then(msg => { + // send the message value. + sendResponse(msg); + }, error => { + // Send a JSON representation of the error if the rejected value + // is an instance of error, or the object itself otherwise. + let message; + if (error && (error instanceof Error || typeof error.message === "string")) { + message = error.message; + } else { + message = "An unexpected error occurred"; + } + sendResponse({ + __mozWebExtensionPolyfillReject__: true, + message + }); + }).catch(err => { + // Print an error on the console if unable to send the response. + console.error("Failed to send onMessage rejected reply", err); + }); + }; + + // If the listener returned a Promise, send the resolved value as a + // result, otherwise wait the promise related to the wrappedSendResponse + // callback to resolve and send it as a response. + if (isResultThenable) { + sendPromisedResult(result); + } else { + sendPromisedResult(sendResponsePromise); + } + + // Let Chrome know that the listener is replying. + return true; + }; + }); + const wrappedSendMessageCallback = ({ + reject, + resolve + }, reply) => { + if (extensionAPIs.runtime.lastError) { + // Detect when none of the listeners replied to the sendMessage call and resolve + // the promise to undefined as in Firefox. + // See https://github.com/mozilla/webextension-polyfill/issues/130 + if (extensionAPIs.runtime.lastError.message === CHROME_SEND_MESSAGE_CALLBACK_NO_RESPONSE_MESSAGE) { + resolve(); + } else { + reject(new Error(extensionAPIs.runtime.lastError.message)); + } + } else if (reply && reply.__mozWebExtensionPolyfillReject__) { + // Convert back the JSON representation of the error into + // an Error instance. + reject(new Error(reply.message)); + } else { + resolve(reply); + } + }; + const wrappedSendMessage = (name, metadata, apiNamespaceObj, ...args) => { + if (args.length < metadata.minArgs) { + throw new Error(`Expected at least ${metadata.minArgs} ${pluralizeArguments(metadata.minArgs)} for ${name}(), got ${args.length}`); + } + if (args.length > metadata.maxArgs) { + throw new Error(`Expected at most ${metadata.maxArgs} ${pluralizeArguments(metadata.maxArgs)} for ${name}(), got ${args.length}`); + } + return new Promise((resolve, reject) => { + const wrappedCb = wrappedSendMessageCallback.bind(null, { + resolve, + reject + }); + args.push(wrappedCb); + apiNamespaceObj.sendMessage(...args); + }); + }; + const staticWrappers = { + devtools: { + network: { + onRequestFinished: wrapEvent(onRequestFinishedWrappers) + } + }, + runtime: { + onMessage: wrapEvent(onMessageWrappers), + onMessageExternal: wrapEvent(onMessageWrappers), + sendMessage: wrappedSendMessage.bind(null, "sendMessage", { + minArgs: 1, + maxArgs: 3 + }) + }, + tabs: { + sendMessage: wrappedSendMessage.bind(null, "sendMessage", { + minArgs: 2, + maxArgs: 3 + }) + } + }; + const settingMetadata = { + clear: { + minArgs: 1, + maxArgs: 1 + }, + get: { + minArgs: 1, + maxArgs: 1 + }, + set: { + minArgs: 1, + maxArgs: 1 + } + }; + apiMetadata.privacy = { + network: { + "*": settingMetadata + }, + services: { + "*": settingMetadata + }, + websites: { + "*": settingMetadata + } + }; + return wrapObject(extensionAPIs, staticWrappers, apiMetadata); + }; + + // The build process adds a UMD wrapper around this file, which makes the + // `module` variable available. + module.exports = wrapAPIs(chrome); + } else { + module.exports = globalThis.browser; + } +}); + + +}, + +}); +// The module cache +var __webpack_module_cache__ = {}; + +// The require function +function __webpack_require__(moduleId) { + +// Check if module is in cache +var cachedModule = __webpack_module_cache__[moduleId]; +if (cachedModule !== undefined) { +return cachedModule.exports; +} +// Create a new module (and put it into the cache) +var module = (__webpack_module_cache__[moduleId] = { +id: moduleId, +loaded: false, +exports: {} +}); +// Execute the module function +__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__); + +// Flag the module as loaded +module.loaded = true; +// Return the exports of the module +return module.exports; + +} + +// webpack/runtime/node_module_decorator +(() => { +__webpack_require__.nmd = (module) => { + module.paths = []; + if (!module.children) module.children = []; + return module; +}; +})(); +// webpack/runtime/rspack_version +(() => { +__webpack_require__.rv = () => ("1.6.6") +})(); +// webpack/runtime/rspack_unique_id +(() => { +__webpack_require__.ruid = "bundler=rspack@1.6.6"; +})(); +// This entry needs to be wrapped in an IIFE because it needs to be in strict mode. +(() => { +"use strict"; + +// EXTERNAL MODULE: ./node_modules/.pnpm/webextension-polyfill@0.12.0/node_modules/webextension-polyfill/dist/browser-polyfill.js +var browser_polyfill = __webpack_require__(28467); +// EXTERNAL MODULE: ./node_modules/.pnpm/@adguard+assistant@4.4.13/node_modules/@adguard/assistant/dist/assistant.js +var assistant = __webpack_require__(37190); +;// CONCATENATED MODULE: ./node_modules/.pnpm/@adguard+tswebextension@5.0.3_@adguard+re2-wasm@1.2.0_typescript@5.6.3/node_modules/@adguard/tswebextension/dist/common/message-constants.js +/** + * @file + * This file contains constants for communication between background and content scripts. + * This constants are separated from message.ts to reduce bundle size, + * because rollup cannot tree-shake tswebextension library code. + */ +/** + * Name of the message handler. + * It is needed for determining specific tswebextension message from other messages. + */ +const MESSAGE_HANDLER_NAME = 'tsWebExtension'; +/** + * Message types for communication between background and content scripts. + */ +var message_constants_MessageType; +(function (MessageType) { + MessageType["ProcessShouldCollapse"] = "processShouldCollapse"; + MessageType["GetCosmeticData"] = "getCosmeticData"; + MessageType["GetCookieRules"] = "getCookieRules"; + MessageType["SaveCookieLogEvent"] = "saveCookieLogEvent"; + MessageType["InitAssistant"] = "initAssistant"; + MessageType["CloseAssistant"] = "closeAssistant"; + MessageType["AssistantCreateRule"] = "assistantCreateRule"; + MessageType["SaveCssHitsStats"] = "saveCssHitsStats"; +})(message_constants_MessageType || (message_constants_MessageType = {})); + + + +;// CONCATENATED MODULE: ./node_modules/.pnpm/@adguard+logger@2.0.0/node_modules/@adguard/logger/dist/es/index.mjs +/** + * Checks if error has message. + * + * @param error Error object. + * + * @returns True if error has message. + */ +function isErrorWithMessage(error) { + return (typeof error === 'object' + && error !== null + && 'message' in error + && typeof error.message === 'string'); +} +/** + * Converts error to the error with a message. + * + * @param maybeError Possible error. + * + * @returns Error with a message. + */ +function toErrorWithMessage(maybeError) { + if (isErrorWithMessage(maybeError)) { + return maybeError; + } + try { + return new Error(JSON.stringify(maybeError)); + } + catch { + // fallback in case there's an error stringifying the maybeError + // like with circular references, for example. + return new Error(String(maybeError)); + } +} +/** + * Converts an error object to an error with a message. This method might be helpful to handle thrown errors. + * + * @param error Error object. + * + * @returns Message of the error. + */ +function getErrorMessage(error) { + return toErrorWithMessage(error).message; +} + +/** + * Pads a number with leading zeros. + * + * @param num The number to pad. + * @param size The number of digits to pad to. + * + * @returns The padded number. + */ +const pad = (num, size = 2) => { + return num.toString().padStart(size, '0'); +}; +/** + * Formats a date into an ISO 8601-like string with milliseconds. + * + * @param {Date|number} date The date object or timestamp to format. + * + * @returns {string} The formatted date string. + */ +const formatTime = (date) => { + const d = (date instanceof Date) ? date : new Date(date); + const year = d.getFullYear(); + const month = pad(d.getMonth() + 1); // Months are 0-based + const day = pad(d.getDate()); + const hour = pad(d.getHours()); + const minute = pad(d.getMinutes()); + const second = pad(d.getSeconds()); + const millisecond = pad(d.getMilliseconds(), 3); // Milliseconds are 3 digits + return `${year}-${month}-${day}T${hour}:${minute}:${second}:${millisecond}`; +}; + +/** + * String presentation of log levels, for convenient users usage. + * Ordered in the same way as LogLevelNumeric. + * + * First three levels will be shown to users, and the last two are for developers. + */ +var es_LogLevel; +(function (LogLevel) { + /** + * For errors. + */ + LogLevel["Error"] = "error"; + /** + * For not critical errors. + */ + LogLevel["Warn"] = "warn"; + /** + * For important information. + * Use for general operational messages. + */ + LogLevel["Info"] = "info"; + /** + * For debugging purposes, e.g. Inside conditions, loops or some edge cases. + */ + LogLevel["Debug"] = "debug"; + /** + * For ultra-detailed, step-by-step traces (like stack traces or flow tracking). + */ + LogLevel["Verbose"] = "verbose"; +})(es_LogLevel || (es_LogLevel = {})); +/** + * Log levels map, which maps number level to string level. + * Ordered in the same way as LogLevelNumeric. + */ +const levelMapNumToString = { + [1 /* LogLevelNumeric.Error */]: es_LogLevel.Error, + [2 /* LogLevelNumeric.Warn */]: es_LogLevel.Warn, + [3 /* LogLevelNumeric.Info */]: es_LogLevel.Info, + [4 /* LogLevelNumeric.Debug */]: es_LogLevel.Debug, + [5 /* LogLevelNumeric.Verbose */]: es_LogLevel.Verbose, +}; +/** + * Log levels map, which maps string level to number level. + */ +const levelMapStringToNum = Object.entries(levelMapNumToString) + .reduce((acc, [key, value]) => { + // Here, key is originally a string since Object.entries() returns [string, string][]. + // We need to cast the key to LogLevelNumeric correctly without causing type mismatches. + const numericKey = Number(key); + if (!Number.isNaN(numericKey)) { + acc[value] = numericKey; + } + return acc; +}, {}); +/** + * Methods supported by console. Used to manage levels. + * Ordered in the same way as LogLevelNumeric. + */ +var es_LogMethod; +(function (LogMethod) { + LogMethod["Error"] = "error"; + LogMethod["Warn"] = "warn"; + LogMethod["Info"] = "info"; + LogMethod["Debug"] = "debug"; + LogMethod["Trace"] = "trace"; +})(es_LogMethod || (es_LogMethod = {})); +/** + * Simple logger with log levels. + */ +class Logger { + currentLevelValue = 3 /* LogLevelNumeric.Info */; + writer; + /** + * Constructor. + * + * @param writer Writer object. + */ + constructor(writer = console) { + this.writer = writer; + // bind the logging methods to avoid losing context + this.error = this.error.bind(this); + this.warn = this.warn.bind(this); + this.info = this.info.bind(this); + this.debug = this.debug.bind(this); + this.trace = this.trace.bind(this); + } + /** + * Print error messages. + * Use when something went wrong. + * + * @param args Printed arguments. + */ + error(...args) { + this.print(1 /* LogLevelNumeric.Error */, es_LogMethod.Error, args); + } + /** + * Print warn messages. + * Use when Something might go wrong. + * + * @param args Printed arguments. + */ + warn(...args) { + this.print(2 /* LogLevelNumeric.Warn */, es_LogMethod.Warn, args); + } + /** + * Print messages you want to disclose to users. + * Use for general operational messages. + * + * @param args Printed arguments. + */ + info(...args) { + this.print(3 /* LogLevelNumeric.Info */, es_LogMethod.Info, args); + } + /** + * Print debug messages. Usually used for technical information. + * + * @param args Printed arguments. + */ + debug(...args) { + this.print(4 /* LogLevelNumeric.Debug */, es_LogMethod.Debug, args); + } + /** + * Print trace messages. + * Ultra-detailed, step-by-step traces (like stack traces or flow tracking). + * + * @param args Printed arguments. + */ + trace(...args) { + this.print(5 /* LogLevelNumeric.Verbose */, es_LogMethod.Trace, args); + } + /** + * Getter for log level. + * + * @returns Logger level. + */ + get currentLevel() { + return levelMapNumToString[this.currentLevelValue]; + } + /** + * Setter for log level. With this method log level can be updated dynamically. + * + * @param logLevel Logger level. + * + * @throws Error if log level is not supported. + */ + set currentLevel(logLevel) { + const level = levelMapStringToNum[logLevel]; + if (level === undefined) { + throw new Error(`Logger supports only the following levels: ${[Object.values(es_LogLevel).join(', ')]}`); + } + this.currentLevelValue = level; + } + /** + * Converts error to string, and adds stack trace. + * + * @param error Error to print. + * + * @returns Error message. + */ + static errorToString(error) { + const message = getErrorMessage(error); + return `${message}\nStack trace:\n${error.stack}`; + } + /** + * Prints error message with stack trace. + * It prints the message with the stack trace in a collapsed group. + * This is useful for debugging purposes, as it allows to see the stack trace + * without cluttering the console with too many messages. + * + * @param formattedTime Formatted time. + * @param formattedArgs Formatted arguments. + */ + printWithStackTrace(formattedTime, formattedArgs) { + // If grouping is not supported, print just expanded trace, but this + // leads to a lot of dirty logs in the console, since the stack trace + // will be printed for every message. + if (!this.writer.groupCollapsed || !this.writer.groupEnd) { + // Print expanded trace + this.writer.trace(formattedTime, ...formattedArgs); + return; + } + // Print collapsed trace to make logs more readable and access to stack + // trace by clicking on the group. + this.writer.groupCollapsed(formattedTime, ...formattedArgs); + this.writer.trace(); + this.writer.groupEnd(); + } + /** + * Wrapper over log methods. + * + * @param level Logger level. + * @param method Logger method. + * @param args Printed arguments. + */ + print(level, method, args) { + // Skip writing if the basic conditions are not met. + if (this.currentLevelValue < level) { + return; + } + // Do not print if no arguments are passed. + if (!args || args.length === 0 || !args[0]) { + return; + } + const formattedArgs = args.map((value) => { + if (value instanceof Error) { + return Logger.errorToString(value); + } + if (value && typeof value.message === 'string') { + return value.message; + } + if (typeof value === 'object' && value !== null) { + return JSON.stringify(value); + } + return String(value); + }); + const formattedTime = `${formatTime(new Date())}:`; + /** + * If current log level is Debug or Verbose, print all channels with stack + * trace via using writer.trace method to help identify the location of the + * log. + * + * Exception is Error method, because it is already contains build-in + * stack trace. + */ + if (this.currentLevelValue >= levelMapStringToNum[es_LogLevel.Debug] + && method !== es_LogMethod.Error) { + this.printWithStackTrace(formattedTime, formattedArgs); + return; + } + // Otherwise just print with requested method of writer. + this.writer[method](formattedTime, ...formattedArgs); + } +} + + + +;// CONCATENATED MODULE: ./node_modules/.pnpm/@adguard+tswebextension@5.0.3_@adguard+re2-wasm@1.2.0_typescript@5.6.3/node_modules/@adguard/tswebextension/dist/common/logger.js + + +/** + * Export logger implementation. + */ +const logger = new Logger(console); +/** + * Stringify object via JSON.stringify without specified keys. + * + * @param obj Object to stringify. + * @param excludedKeys Keys to exclude. + * + * @returns Stringified object without excludedKeys (checking nested keys too). + */ +const stringifyObjectWithoutKeys = (obj, excludedKeys) => { + return JSON.stringify(obj, (key, value) => (excludedKeys.includes(key) ? undefined : value), 2); +}; + + + +;// CONCATENATED MODULE: ./node_modules/.pnpm/@adguard+tswebextension@5.0.3_@adguard+re2-wasm@1.2.0_typescript@5.6.3/node_modules/@adguard/tswebextension/dist/common/send-app-message.js + + + +// TODO check if we can return typed message here +/** + * Sends message to the background page. + * + * @param message Message to send. + * @param message.payload Payload of the message. + * @param message.type Message type. + * + * @returns Promise resolved with response from the background page. + */ +// eslint-disable-next-line @typescript-eslint/no-explicit-any +const sendAppMessage = async (message) => { + return browser_polyfill.runtime.sendMessage({ handlerName: MESSAGE_HANDLER_NAME, ...message }); +}; + + + +;// CONCATENATED MODULE: ./node_modules/.pnpm/@adguard+tswebextension@5.0.3_@adguard+re2-wasm@1.2.0_typescript@5.6.3/node_modules/@adguard/tswebextension/dist/assistant-inject.js + + + + + + + +/** + * @file Contains simple type guards to prevent bundle zod library, because + * content-script should be as tiny as possible to fastest injection. + */ +/** + * Checks if the given message has a 'type' field. + * + * @param message The message to check. + * + * @returns `true` if the message is an object with a 'type' field, otherwise `false`. + */ +const hasTypeField = (message) => { + return typeof message === 'object' && message !== null && 'type' in message; +}; +/** + * Checks if the given message has a 'handlerName' field matching {@link MESSAGE_HANDLER_NAME}. + * + * @param message The message to check. + * + * @returns `true` if the message has the expected handlerName, otherwise `false`. + */ +const isAssistantMessage = (message) => { + return typeof message === 'object' + && message !== null + && 'handlerName' in message + && message.handlerName === MESSAGE_HANDLER_NAME; +}; + +/** + * @typedef {import('./assistant').Assistant} AssistantRef + */ +/** + * @file + * IMPORTANT: This file should be listed inside 'sideEffects' field + * in the package.json, because it has side effects: we do not export anything + * from it outside, just evaluate the code (via injection). + * + * In the content script, we need access to @adguard/assistant only when + * the user clicks 'block ad manually'. + * Therefore, we exclude @adguard/assistant from the bundled content-script code + * and load it on-demand. We also added a required field to the configuration + * object to ensure the assistant is bundled inside the final extension, + * allowing tswebextension to load it on-demand. + * + * Schema: + * - Buildtime: + * -- [tswebext] Script to inject assistant from the URL provided by the extension. <--- current file. + * -- [tswebext] Assistant management script for interacting with the assistant. + * -- [extension] Entry point script for injecting the assistant + * - Runtime: + * -- [tswebext] Content script injects into every new tab without the assistant. + * -- [tswebext] On-demand content script dynamically injects the assistant and creates a message listener. + * -- [tswebext] After injection, the content script interacts with the assistant. + * + * Reference code: ASSISTANT_INJECT. + * + * Injection will be done by {@link AssistantRef.openAssistant}. + */ +/** + * Creates handlers for assistant messages. + * + * Safe to call multiple times: checks for old listener before adding + * a new one so that re-injection of the dynamically loaded assistant always + * results in a working message channel. + */ +const createAssistantMessageListener = () => { + // Check, that script executed in the top frame + if (window.top !== window || !(document.documentElement instanceof HTMLElement)) { + return; + } + // If the listener is present on previous isolated world it won't be visible here. + if (window.assistantMessageListener) { + return; + } + const listener = async (message) => { + if (!isAssistantMessage(message)) { + // silently ignore messages that are not assistant messages + return; + } + if (!hasTypeField(message)) { + logger.warn('[tsweb.assistant-inject]: message does not contain required field "type": ', message); + return; + } + switch (message.type) { + case message_constants_MessageType.InitAssistant: { + // If there is no assistant on the window after execute + // loading script - throw error. + if (window.adguardAssistant === undefined) { + throw new Error('adguardAssistant not found in the window object.'); + } + else { + window.adguardAssistant.close(); + } + window.adguardAssistant.start(null, async (ruleText) => { + const res = await sendAppMessage({ + type: message_constants_MessageType.AssistantCreateRule, + payload: { ruleText }, + }); + if (!res) { + logger.warn(`[tsweb.assistant-inject]: rule '${ruleText}' has not been applied.`); + } + }); + break; + } + case message_constants_MessageType.CloseAssistant: { + if (window.adguardAssistant) { + window.adguardAssistant.close(); + } + break; + } + default: { + logger.error(`[tsweb.assistant-inject]: not found handler for message type '${message.type}'`); + } + } + }; + browser_polyfill.runtime.onMessage.addListener(listener); + window.assistantMessageListener = listener; +}; +if (!window.adguardAssistant) { + window.adguardAssistant = (0,assistant.adguardAssistant)(); +} +/** + * Register the listener on every injection so that it works even when + * the assistant is re-injected into a new isolated world (e.g. after + * an extension update on already-open tabs). + */ +createAssistantMessageListener(); + +;// CONCATENATED MODULE: ./Extension/pages/assistant-inject/index.ts +/** + * Copyright (c) 2015-2026 Adguard Software Ltd. + * + * @file + * This file is part of AdGuard Browser Extension (https://github.com/AdguardTeam/AdguardBrowserExtension). + * + * AdGuard Browser Extension is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * AdGuard Browser Extension is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with AdGuard Browser Extension. If not, see . + */ /** + * In the content script of tswebextension, we need access to @adguard/assistant + * only when the user clicks 'block ad manually'. + * Therefore, we exclude @adguard/assistant from the bundled content-script code + * and load it on-demand. We also added a required field to the configuration + * object to ensure the assistant is bundled inside the final extension, + * allowing tswebextension to load it on-demand. + * + * Schema: + * - Buildtime: + * -- [tswebext] Script to inject assistant from the URL provided by the extension. + * -- [tswebext] Assistant management script for interacting with the assistant. + * -- [tswebext] Assistant messages listener on the content-script side. + * -- [extension] Entry point script for injecting the assistant <--- current file. + * - Runtime: + * -- [tswebext] Content script injects into every new tab without the assistant. + * -- [tswebext] On-demand content script dynamically injects the assistant. + * -- [tswebext] After injection, the content script interacts with the assistant. + * + * Reference code: ASSISTANT_INJECT. + */ + +})(); + +})() +; \ No newline at end of file diff --git a/raveos-app-installer/data/configs/vivaldi/Default/Extensions/bgnkhhnnamicmpeenaelnjfhikgbkllg/5.5.2.40_0/pages/background.js b/raveos-app-installer/data/configs/vivaldi/Default/Extensions/bgnkhhnnamicmpeenaelnjfhikgbkllg/5.5.2.40_0/pages/background.js new file mode 100644 index 0000000..6f5a204 --- /dev/null +++ b/raveos-app-installer/data/configs/vivaldi/Default/Extensions/bgnkhhnnamicmpeenaelnjfhikgbkllg/5.5.2.40_0/pages/background.js @@ -0,0 +1,208132 @@ +(() => { +var __webpack_modules__ = ({ +82500(__unused_webpack_module, exports, __webpack_require__) { +var asn1 = exports; + +asn1.bignum = __webpack_require__(91939); + +asn1.define = (__webpack_require__(73903)/* .define */.define); +asn1.base = __webpack_require__(70373); +asn1.constants = __webpack_require__(48205); +asn1.decoders = __webpack_require__(55889); +asn1.encoders = __webpack_require__(40137); + + +}, +73903(__unused_webpack_module, exports, __webpack_require__) { +var asn1 = __webpack_require__(82500); +var inherits = __webpack_require__(86040); + +var api = exports; + +api.define = function define(name, body) { + return new Entity(name, body); +}; + +function Entity(name, body) { + this.name = name; + this.body = body; + + this.decoders = {}; + this.encoders = {}; +}; + +Entity.prototype._createNamed = function createNamed(base) { + var named; + try { + named = (__webpack_require__(46879)/* .runInThisContext */.runInThisContext)( + '(function ' + this.name + '(entity) {\n' + + ' this._initNamed(entity);\n' + + '})' + ); + } catch (e) { + named = function (entity) { + this._initNamed(entity); + }; + } + inherits(named, base); + named.prototype._initNamed = function initnamed(entity) { + base.call(this, entity); + }; + + return new named(this); +}; + +Entity.prototype._getDecoder = function _getDecoder(enc) { + enc = enc || 'der'; + // Lazily create decoder + if (!this.decoders.hasOwnProperty(enc)) + this.decoders[enc] = this._createNamed(asn1.decoders[enc]); + return this.decoders[enc]; +}; + +Entity.prototype.decode = function decode(data, enc, options) { + return this._getDecoder(enc).decode(data, options); +}; + +Entity.prototype._getEncoder = function _getEncoder(enc) { + enc = enc || 'der'; + // Lazily create encoder + if (!this.encoders.hasOwnProperty(enc)) + this.encoders[enc] = this._createNamed(asn1.encoders[enc]); + return this.encoders[enc]; +}; + +Entity.prototype.encode = function encode(data, enc, /* internal */ reporter) { + return this._getEncoder(enc).encode(data, reporter); +}; + + +}, +32407(__unused_webpack_module, exports, __webpack_require__) { +var inherits = __webpack_require__(86040); +var Reporter = (__webpack_require__(70373)/* .Reporter */.Reporter); +var Buffer = (__webpack_require__(75334)/* .Buffer */.Buffer); + +function DecoderBuffer(base, options) { + Reporter.call(this, options); + if (!Buffer.isBuffer(base)) { + this.error('Input not Buffer'); + return; + } + + this.base = base; + this.offset = 0; + this.length = base.length; +} +inherits(DecoderBuffer, Reporter); +exports.DecoderBuffer = DecoderBuffer; + +DecoderBuffer.prototype.save = function save() { + return { offset: this.offset, reporter: Reporter.prototype.save.call(this) }; +}; + +DecoderBuffer.prototype.restore = function restore(save) { + // Return skipped data + var res = new DecoderBuffer(this.base); + res.offset = save.offset; + res.length = this.offset; + + this.offset = save.offset; + Reporter.prototype.restore.call(this, save.reporter); + + return res; +}; + +DecoderBuffer.prototype.isEmpty = function isEmpty() { + return this.offset === this.length; +}; + +DecoderBuffer.prototype.readUInt8 = function readUInt8(fail) { + if (this.offset + 1 <= this.length) + return this.base.readUInt8(this.offset++, true); + else + return this.error(fail || 'DecoderBuffer overrun'); +} + +DecoderBuffer.prototype.skip = function skip(bytes, fail) { + if (!(this.offset + bytes <= this.length)) + return this.error(fail || 'DecoderBuffer overrun'); + + var res = new DecoderBuffer(this.base); + + // Share reporter state + res._reporterState = this._reporterState; + + res.offset = this.offset; + res.length = this.offset + bytes; + this.offset += bytes; + return res; +} + +DecoderBuffer.prototype.raw = function raw(save) { + return this.base.slice(save ? save.offset : this.offset, this.length); +} + +function EncoderBuffer(value, reporter) { + if (Array.isArray(value)) { + this.length = 0; + this.value = value.map(function(item) { + if (!(item instanceof EncoderBuffer)) + item = new EncoderBuffer(item, reporter); + this.length += item.length; + return item; + }, this); + } else if (typeof value === 'number') { + if (!(0 <= value && value <= 0xff)) + return reporter.error('non-byte EncoderBuffer value'); + this.value = value; + this.length = 1; + } else if (typeof value === 'string') { + this.value = value; + this.length = Buffer.byteLength(value); + } else if (Buffer.isBuffer(value)) { + this.value = value; + this.length = value.length; + } else { + return reporter.error('Unsupported type: ' + typeof value); + } +} +exports.EncoderBuffer = EncoderBuffer; + +EncoderBuffer.prototype.join = function join(out, offset) { + if (!out) + out = new Buffer(this.length); + if (!offset) + offset = 0; + + if (this.length === 0) + return out; + + if (Array.isArray(this.value)) { + this.value.forEach(function(item) { + item.join(out, offset); + offset += item.length; + }); + } else { + if (typeof this.value === 'number') + out[offset] = this.value; + else if (typeof this.value === 'string') + out.write(this.value, offset); + else if (Buffer.isBuffer(this.value)) + this.value.copy(out, offset); + offset += this.length; + } + + return out; +}; + + +}, +70373(__unused_webpack_module, exports, __webpack_require__) { +var base = exports; + +base.Reporter = (__webpack_require__(23968)/* .Reporter */.Reporter); +base.DecoderBuffer = (__webpack_require__(32407)/* .DecoderBuffer */.DecoderBuffer); +base.EncoderBuffer = (__webpack_require__(32407)/* .EncoderBuffer */.EncoderBuffer); +base.Node = __webpack_require__(88877); + + +}, +88877(module, __unused_webpack_exports, __webpack_require__) { +var Reporter = (__webpack_require__(70373)/* .Reporter */.Reporter); +var EncoderBuffer = (__webpack_require__(70373)/* .EncoderBuffer */.EncoderBuffer); +var DecoderBuffer = (__webpack_require__(70373)/* .DecoderBuffer */.DecoderBuffer); +var assert = __webpack_require__(77285); + +// Supported tags +var tags = [ + 'seq', 'seqof', 'set', 'setof', 'objid', 'bool', + 'gentime', 'utctime', 'null_', 'enum', 'int', 'objDesc', + 'bitstr', 'bmpstr', 'charstr', 'genstr', 'graphstr', 'ia5str', 'iso646str', + 'numstr', 'octstr', 'printstr', 't61str', 'unistr', 'utf8str', 'videostr' +]; + +// Public methods list +var methods = [ + 'key', 'obj', 'use', 'optional', 'explicit', 'implicit', 'def', 'choice', + 'any', 'contains' +].concat(tags); + +// Overrided methods list +var overrided = [ + '_peekTag', '_decodeTag', '_use', + '_decodeStr', '_decodeObjid', '_decodeTime', + '_decodeNull', '_decodeInt', '_decodeBool', '_decodeList', + + '_encodeComposite', '_encodeStr', '_encodeObjid', '_encodeTime', + '_encodeNull', '_encodeInt', '_encodeBool' +]; + +function Node(enc, parent) { + var state = {}; + this._baseState = state; + + state.enc = enc; + + state.parent = parent || null; + state.children = null; + + // State + state.tag = null; + state.args = null; + state.reverseArgs = null; + state.choice = null; + state.optional = false; + state.any = false; + state.obj = false; + state.use = null; + state.useDecoder = null; + state.key = null; + state['default'] = null; + state.explicit = null; + state.implicit = null; + state.contains = null; + + // Should create new instance on each method + if (!state.parent) { + state.children = []; + this._wrap(); + } +} +module.exports = Node; + +var stateProps = [ + 'enc', 'parent', 'children', 'tag', 'args', 'reverseArgs', 'choice', + 'optional', 'any', 'obj', 'use', 'alteredUse', 'key', 'default', 'explicit', + 'implicit', 'contains' +]; + +Node.prototype.clone = function clone() { + var state = this._baseState; + var cstate = {}; + stateProps.forEach(function(prop) { + cstate[prop] = state[prop]; + }); + var res = new this.constructor(cstate.parent); + res._baseState = cstate; + return res; +}; + +Node.prototype._wrap = function wrap() { + var state = this._baseState; + methods.forEach(function(method) { + this[method] = function _wrappedMethod() { + var clone = new this.constructor(this); + state.children.push(clone); + return clone[method].apply(clone, arguments); + }; + }, this); +}; + +Node.prototype._init = function init(body) { + var state = this._baseState; + + assert(state.parent === null); + body.call(this); + + // Filter children + state.children = state.children.filter(function(child) { + return child._baseState.parent === this; + }, this); + assert.equal(state.children.length, 1, 'Root node can have only one child'); +}; + +Node.prototype._useArgs = function useArgs(args) { + var state = this._baseState; + + // Filter children and args + var children = args.filter(function(arg) { + return arg instanceof this.constructor; + }, this); + args = args.filter(function(arg) { + return !(arg instanceof this.constructor); + }, this); + + if (children.length !== 0) { + assert(state.children === null); + state.children = children; + + // Replace parent to maintain backward link + children.forEach(function(child) { + child._baseState.parent = this; + }, this); + } + if (args.length !== 0) { + assert(state.args === null); + state.args = args; + state.reverseArgs = args.map(function(arg) { + if (typeof arg !== 'object' || arg.constructor !== Object) + return arg; + + var res = {}; + Object.keys(arg).forEach(function(key) { + if (key == (key | 0)) + key |= 0; + var value = arg[key]; + res[value] = key; + }); + return res; + }); + } +}; + +// +// Overrided methods +// + +overrided.forEach(function(method) { + Node.prototype[method] = function _overrided() { + var state = this._baseState; + throw new Error(method + ' not implemented for encoding: ' + state.enc); + }; +}); + +// +// Public methods +// + +tags.forEach(function(tag) { + Node.prototype[tag] = function _tagMethod() { + var state = this._baseState; + var args = Array.prototype.slice.call(arguments); + + assert(state.tag === null); + state.tag = tag; + + this._useArgs(args); + + return this; + }; +}); + +Node.prototype.use = function use(item) { + assert(item); + var state = this._baseState; + + assert(state.use === null); + state.use = item; + + return this; +}; + +Node.prototype.optional = function optional() { + var state = this._baseState; + + state.optional = true; + + return this; +}; + +Node.prototype.def = function def(val) { + var state = this._baseState; + + assert(state['default'] === null); + state['default'] = val; + state.optional = true; + + return this; +}; + +Node.prototype.explicit = function explicit(num) { + var state = this._baseState; + + assert(state.explicit === null && state.implicit === null); + state.explicit = num; + + return this; +}; + +Node.prototype.implicit = function implicit(num) { + var state = this._baseState; + + assert(state.explicit === null && state.implicit === null); + state.implicit = num; + + return this; +}; + +Node.prototype.obj = function obj() { + var state = this._baseState; + var args = Array.prototype.slice.call(arguments); + + state.obj = true; + + if (args.length !== 0) + this._useArgs(args); + + return this; +}; + +Node.prototype.key = function key(newKey) { + var state = this._baseState; + + assert(state.key === null); + state.key = newKey; + + return this; +}; + +Node.prototype.any = function any() { + var state = this._baseState; + + state.any = true; + + return this; +}; + +Node.prototype.choice = function choice(obj) { + var state = this._baseState; + + assert(state.choice === null); + state.choice = obj; + this._useArgs(Object.keys(obj).map(function(key) { + return obj[key]; + })); + + return this; +}; + +Node.prototype.contains = function contains(item) { + var state = this._baseState; + + assert(state.use === null); + state.contains = item; + + return this; +}; + +// +// Decoding +// + +Node.prototype._decode = function decode(input, options) { + var state = this._baseState; + + // Decode root node + if (state.parent === null) + return input.wrapResult(state.children[0]._decode(input, options)); + + var result = state['default']; + var present = true; + + var prevKey = null; + if (state.key !== null) + prevKey = input.enterKey(state.key); + + // Check if tag is there + if (state.optional) { + var tag = null; + if (state.explicit !== null) + tag = state.explicit; + else if (state.implicit !== null) + tag = state.implicit; + else if (state.tag !== null) + tag = state.tag; + + if (tag === null && !state.any) { + // Trial and Error + var save = input.save(); + try { + if (state.choice === null) + this._decodeGeneric(state.tag, input, options); + else + this._decodeChoice(input, options); + present = true; + } catch (e) { + present = false; + } + input.restore(save); + } else { + present = this._peekTag(input, tag, state.any); + + if (input.isError(present)) + return present; + } + } + + // Push object on stack + var prevObj; + if (state.obj && present) + prevObj = input.enterObject(); + + if (present) { + // Unwrap explicit values + if (state.explicit !== null) { + var explicit = this._decodeTag(input, state.explicit); + if (input.isError(explicit)) + return explicit; + input = explicit; + } + + var start = input.offset; + + // Unwrap implicit and normal values + if (state.use === null && state.choice === null) { + if (state.any) + var save = input.save(); + var body = this._decodeTag( + input, + state.implicit !== null ? state.implicit : state.tag, + state.any + ); + if (input.isError(body)) + return body; + + if (state.any) + result = input.raw(save); + else + input = body; + } + + if (options && options.track && state.tag !== null) + options.track(input.path(), start, input.length, 'tagged'); + + if (options && options.track && state.tag !== null) + options.track(input.path(), input.offset, input.length, 'content'); + + // Select proper method for tag + if (state.any) + result = result; + else if (state.choice === null) + result = this._decodeGeneric(state.tag, input, options); + else + result = this._decodeChoice(input, options); + + if (input.isError(result)) + return result; + + // Decode children + if (!state.any && state.choice === null && state.children !== null) { + state.children.forEach(function decodeChildren(child) { + // NOTE: We are ignoring errors here, to let parser continue with other + // parts of encoded data + child._decode(input, options); + }); + } + + // Decode contained/encoded by schema, only in bit or octet strings + if (state.contains && (state.tag === 'octstr' || state.tag === 'bitstr')) { + var data = new DecoderBuffer(result); + result = this._getUse(state.contains, input._reporterState.obj) + ._decode(data, options); + } + } + + // Pop object + if (state.obj && present) + result = input.leaveObject(prevObj); + + // Set key + if (state.key !== null && (result !== null || present === true)) + input.leaveKey(prevKey, state.key, result); + else if (prevKey !== null) + input.exitKey(prevKey); + + return result; +}; + +Node.prototype._decodeGeneric = function decodeGeneric(tag, input, options) { + var state = this._baseState; + + if (tag === 'seq' || tag === 'set') + return null; + if (tag === 'seqof' || tag === 'setof') + return this._decodeList(input, tag, state.args[0], options); + else if (/str$/.test(tag)) + return this._decodeStr(input, tag, options); + else if (tag === 'objid' && state.args) + return this._decodeObjid(input, state.args[0], state.args[1], options); + else if (tag === 'objid') + return this._decodeObjid(input, null, null, options); + else if (tag === 'gentime' || tag === 'utctime') + return this._decodeTime(input, tag, options); + else if (tag === 'null_') + return this._decodeNull(input, options); + else if (tag === 'bool') + return this._decodeBool(input, options); + else if (tag === 'objDesc') + return this._decodeStr(input, tag, options); + else if (tag === 'int' || tag === 'enum') + return this._decodeInt(input, state.args && state.args[0], options); + + if (state.use !== null) { + return this._getUse(state.use, input._reporterState.obj) + ._decode(input, options); + } else { + return input.error('unknown tag: ' + tag); + } +}; + +Node.prototype._getUse = function _getUse(entity, obj) { + + var state = this._baseState; + // Create altered use decoder if implicit is set + state.useDecoder = this._use(entity, obj); + assert(state.useDecoder._baseState.parent === null); + state.useDecoder = state.useDecoder._baseState.children[0]; + if (state.implicit !== state.useDecoder._baseState.implicit) { + state.useDecoder = state.useDecoder.clone(); + state.useDecoder._baseState.implicit = state.implicit; + } + return state.useDecoder; +}; + +Node.prototype._decodeChoice = function decodeChoice(input, options) { + var state = this._baseState; + var result = null; + var match = false; + + Object.keys(state.choice).some(function(key) { + var save = input.save(); + var node = state.choice[key]; + try { + var value = node._decode(input, options); + if (input.isError(value)) + return false; + + result = { type: key, value: value }; + match = true; + } catch (e) { + input.restore(save); + return false; + } + return true; + }, this); + + if (!match) + return input.error('Choice not matched'); + + return result; +}; + +// +// Encoding +// + +Node.prototype._createEncoderBuffer = function createEncoderBuffer(data) { + return new EncoderBuffer(data, this.reporter); +}; + +Node.prototype._encode = function encode(data, reporter, parent) { + var state = this._baseState; + if (state['default'] !== null && state['default'] === data) + return; + + var result = this._encodeValue(data, reporter, parent); + if (result === undefined) + return; + + if (this._skipDefault(result, reporter, parent)) + return; + + return result; +}; + +Node.prototype._encodeValue = function encode(data, reporter, parent) { + var state = this._baseState; + + // Decode root node + if (state.parent === null) + return state.children[0]._encode(data, reporter || new Reporter()); + + var result = null; + + // Set reporter to share it with a child class + this.reporter = reporter; + + // Check if data is there + if (state.optional && data === undefined) { + if (state['default'] !== null) + data = state['default'] + else + return; + } + + // Encode children first + var content = null; + var primitive = false; + if (state.any) { + // Anything that was given is translated to buffer + result = this._createEncoderBuffer(data); + } else if (state.choice) { + result = this._encodeChoice(data, reporter); + } else if (state.contains) { + content = this._getUse(state.contains, parent)._encode(data, reporter); + primitive = true; + } else if (state.children) { + content = state.children.map(function(child) { + if (child._baseState.tag === 'null_') + return child._encode(null, reporter, data); + + if (child._baseState.key === null) + return reporter.error('Child should have a key'); + var prevKey = reporter.enterKey(child._baseState.key); + + if (typeof data !== 'object') + return reporter.error('Child expected, but input is not object'); + + var res = child._encode(data[child._baseState.key], reporter, data); + reporter.leaveKey(prevKey); + + return res; + }, this).filter(function(child) { + return child; + }); + content = this._createEncoderBuffer(content); + } else { + if (state.tag === 'seqof' || state.tag === 'setof') { + // TODO(indutny): this should be thrown on DSL level + if (!(state.args && state.args.length === 1)) + return reporter.error('Too many args for : ' + state.tag); + + if (!Array.isArray(data)) + return reporter.error('seqof/setof, but data is not Array'); + + var child = this.clone(); + child._baseState.implicit = null; + content = this._createEncoderBuffer(data.map(function(item) { + var state = this._baseState; + + return this._getUse(state.args[0], data)._encode(item, reporter); + }, child)); + } else if (state.use !== null) { + result = this._getUse(state.use, parent)._encode(data, reporter); + } else { + content = this._encodePrimitive(state.tag, data); + primitive = true; + } + } + + // Encode data itself + var result; + if (!state.any && state.choice === null) { + var tag = state.implicit !== null ? state.implicit : state.tag; + var cls = state.implicit === null ? 'universal' : 'context'; + + if (tag === null) { + if (state.use === null) + reporter.error('Tag could be omitted only for .use()'); + } else { + if (state.use === null) + result = this._encodeComposite(tag, primitive, cls, content); + } + } + + // Wrap in explicit + if (state.explicit !== null) + result = this._encodeComposite(state.explicit, false, 'context', result); + + return result; +}; + +Node.prototype._encodeChoice = function encodeChoice(data, reporter) { + var state = this._baseState; + + var node = state.choice[data.type]; + if (!node) { + assert( + false, + data.type + ' not found in ' + + JSON.stringify(Object.keys(state.choice))); + } + return node._encode(data.value, reporter); +}; + +Node.prototype._encodePrimitive = function encodePrimitive(tag, data) { + var state = this._baseState; + + if (/str$/.test(tag)) + return this._encodeStr(data, tag); + else if (tag === 'objid' && state.args) + return this._encodeObjid(data, state.reverseArgs[0], state.args[1]); + else if (tag === 'objid') + return this._encodeObjid(data, null, null); + else if (tag === 'gentime' || tag === 'utctime') + return this._encodeTime(data, tag); + else if (tag === 'null_') + return this._encodeNull(); + else if (tag === 'int' || tag === 'enum') + return this._encodeInt(data, state.args && state.reverseArgs[0]); + else if (tag === 'bool') + return this._encodeBool(data); + else if (tag === 'objDesc') + return this._encodeStr(data, tag); + else + throw new Error('Unsupported tag: ' + tag); +}; + +Node.prototype._isNumstr = function isNumstr(str) { + return /^[0-9 ]*$/.test(str); +}; + +Node.prototype._isPrintstr = function isPrintstr(str) { + return /^[A-Za-z0-9 '\(\)\+,\-\.\/:=\?]*$/.test(str); +}; + + +}, +23968(__unused_webpack_module, exports, __webpack_require__) { +var inherits = __webpack_require__(86040); + +function Reporter(options) { + this._reporterState = { + obj: null, + path: [], + options: options || {}, + errors: [] + }; +} +exports.Reporter = Reporter; + +Reporter.prototype.isError = function isError(obj) { + return obj instanceof ReporterError; +}; + +Reporter.prototype.save = function save() { + var state = this._reporterState; + + return { obj: state.obj, pathLen: state.path.length }; +}; + +Reporter.prototype.restore = function restore(data) { + var state = this._reporterState; + + state.obj = data.obj; + state.path = state.path.slice(0, data.pathLen); +}; + +Reporter.prototype.enterKey = function enterKey(key) { + return this._reporterState.path.push(key); +}; + +Reporter.prototype.exitKey = function exitKey(index) { + var state = this._reporterState; + + state.path = state.path.slice(0, index - 1); +}; + +Reporter.prototype.leaveKey = function leaveKey(index, key, value) { + var state = this._reporterState; + + this.exitKey(index); + if (state.obj !== null) + state.obj[key] = value; +}; + +Reporter.prototype.path = function path() { + return this._reporterState.path.join('/'); +}; + +Reporter.prototype.enterObject = function enterObject() { + var state = this._reporterState; + + var prev = state.obj; + state.obj = {}; + return prev; +}; + +Reporter.prototype.leaveObject = function leaveObject(prev) { + var state = this._reporterState; + + var now = state.obj; + state.obj = prev; + return now; +}; + +Reporter.prototype.error = function error(msg) { + var err; + var state = this._reporterState; + + var inherited = msg instanceof ReporterError; + if (inherited) { + err = msg; + } else { + err = new ReporterError(state.path.map(function(elem) { + return '[' + JSON.stringify(elem) + ']'; + }).join(''), msg.message || msg, msg.stack); + } + + if (!state.options.partial) + throw err; + + if (!inherited) + state.errors.push(err); + + return err; +}; + +Reporter.prototype.wrapResult = function wrapResult(result) { + var state = this._reporterState; + if (!state.options.partial) + return result; + + return { + result: this.isError(result) ? null : result, + errors: state.errors + }; +}; + +function ReporterError(path, msg) { + this.path = path; + this.rethrow(msg); +}; +inherits(ReporterError, Error); + +ReporterError.prototype.rethrow = function rethrow(msg) { + this.message = msg + ' at: ' + (this.path || '(shallow)'); + if (Error.captureStackTrace) + Error.captureStackTrace(this, ReporterError); + + if (!this.stack) { + try { + // IE only adds stack when thrown + throw new Error(this.message); + } catch (e) { + this.stack = e.stack; + } + } + return this; +}; + + +}, +38418(__unused_webpack_module, exports, __webpack_require__) { +var constants = __webpack_require__(48205); + +exports.tagClass = { + 0: 'universal', + 1: 'application', + 2: 'context', + 3: 'private' +}; +exports.tagClassByName = constants._reverse(exports.tagClass); + +exports.tag = { + 0x00: 'end', + 0x01: 'bool', + 0x02: 'int', + 0x03: 'bitstr', + 0x04: 'octstr', + 0x05: 'null_', + 0x06: 'objid', + 0x07: 'objDesc', + 0x08: 'external', + 0x09: 'real', + 0x0a: 'enum', + 0x0b: 'embed', + 0x0c: 'utf8str', + 0x0d: 'relativeOid', + 0x10: 'seq', + 0x11: 'set', + 0x12: 'numstr', + 0x13: 'printstr', + 0x14: 't61str', + 0x15: 'videostr', + 0x16: 'ia5str', + 0x17: 'utctime', + 0x18: 'gentime', + 0x19: 'graphstr', + 0x1a: 'iso646str', + 0x1b: 'genstr', + 0x1c: 'unistr', + 0x1d: 'charstr', + 0x1e: 'bmpstr' +}; +exports.tagByName = constants._reverse(exports.tag); + + +}, +48205(__unused_webpack_module, exports, __webpack_require__) { +var constants = exports; + +// Helper +constants._reverse = function reverse(map) { + var res = {}; + + Object.keys(map).forEach(function(key) { + // Convert key to integer if it is stringified + if ((key | 0) == key) + key = key | 0; + + var value = map[key]; + res[value] = key; + }); + + return res; +}; + +constants.der = __webpack_require__(38418); + + +}, +70398(module, __unused_webpack_exports, __webpack_require__) { +var inherits = __webpack_require__(86040); + +var asn1 = __webpack_require__(82500); +var base = asn1.base; +var bignum = asn1.bignum; + +// Import DER constants +var der = asn1.constants.der; + +function DERDecoder(entity) { + this.enc = 'der'; + this.name = entity.name; + this.entity = entity; + + // Construct base tree + this.tree = new DERNode(); + this.tree._init(entity.body); +}; +module.exports = DERDecoder; + +DERDecoder.prototype.decode = function decode(data, options) { + if (!(data instanceof base.DecoderBuffer)) + data = new base.DecoderBuffer(data, options); + + return this.tree._decode(data, options); +}; + +// Tree methods + +function DERNode(parent) { + base.Node.call(this, 'der', parent); +} +inherits(DERNode, base.Node); + +DERNode.prototype._peekTag = function peekTag(buffer, tag, any) { + if (buffer.isEmpty()) + return false; + + var state = buffer.save(); + var decodedTag = derDecodeTag(buffer, 'Failed to peek tag: "' + tag + '"'); + if (buffer.isError(decodedTag)) + return decodedTag; + + buffer.restore(state); + + return decodedTag.tag === tag || decodedTag.tagStr === tag || + (decodedTag.tagStr + 'of') === tag || any; +}; + +DERNode.prototype._decodeTag = function decodeTag(buffer, tag, any) { + var decodedTag = derDecodeTag(buffer, + 'Failed to decode tag of "' + tag + '"'); + if (buffer.isError(decodedTag)) + return decodedTag; + + var len = derDecodeLen(buffer, + decodedTag.primitive, + 'Failed to get length of "' + tag + '"'); + + // Failure + if (buffer.isError(len)) + return len; + + if (!any && + decodedTag.tag !== tag && + decodedTag.tagStr !== tag && + decodedTag.tagStr + 'of' !== tag) { + return buffer.error('Failed to match tag: "' + tag + '"'); + } + + if (decodedTag.primitive || len !== null) + return buffer.skip(len, 'Failed to match body of: "' + tag + '"'); + + // Indefinite length... find END tag + var state = buffer.save(); + var res = this._skipUntilEnd( + buffer, + 'Failed to skip indefinite length body: "' + this.tag + '"'); + if (buffer.isError(res)) + return res; + + len = buffer.offset - state.offset; + buffer.restore(state); + return buffer.skip(len, 'Failed to match body of: "' + tag + '"'); +}; + +DERNode.prototype._skipUntilEnd = function skipUntilEnd(buffer, fail) { + while (true) { + var tag = derDecodeTag(buffer, fail); + if (buffer.isError(tag)) + return tag; + var len = derDecodeLen(buffer, tag.primitive, fail); + if (buffer.isError(len)) + return len; + + var res; + if (tag.primitive || len !== null) + res = buffer.skip(len) + else + res = this._skipUntilEnd(buffer, fail); + + // Failure + if (buffer.isError(res)) + return res; + + if (tag.tagStr === 'end') + break; + } +}; + +DERNode.prototype._decodeList = function decodeList(buffer, tag, decoder, + options) { + var result = []; + while (!buffer.isEmpty()) { + var possibleEnd = this._peekTag(buffer, 'end'); + if (buffer.isError(possibleEnd)) + return possibleEnd; + + var res = decoder.decode(buffer, 'der', options); + if (buffer.isError(res) && possibleEnd) + break; + result.push(res); + } + return result; +}; + +DERNode.prototype._decodeStr = function decodeStr(buffer, tag) { + if (tag === 'bitstr') { + var unused = buffer.readUInt8(); + if (buffer.isError(unused)) + return unused; + return { unused: unused, data: buffer.raw() }; + } else if (tag === 'bmpstr') { + var raw = buffer.raw(); + if (raw.length % 2 === 1) + return buffer.error('Decoding of string type: bmpstr length mismatch'); + + var str = ''; + for (var i = 0; i < raw.length / 2; i++) { + str += String.fromCharCode(raw.readUInt16BE(i * 2)); + } + return str; + } else if (tag === 'numstr') { + var numstr = buffer.raw().toString('ascii'); + if (!this._isNumstr(numstr)) { + return buffer.error('Decoding of string type: ' + + 'numstr unsupported characters'); + } + return numstr; + } else if (tag === 'octstr') { + return buffer.raw(); + } else if (tag === 'objDesc') { + return buffer.raw(); + } else if (tag === 'printstr') { + var printstr = buffer.raw().toString('ascii'); + if (!this._isPrintstr(printstr)) { + return buffer.error('Decoding of string type: ' + + 'printstr unsupported characters'); + } + return printstr; + } else if (/str$/.test(tag)) { + return buffer.raw().toString(); + } else { + return buffer.error('Decoding of string type: ' + tag + ' unsupported'); + } +}; + +DERNode.prototype._decodeObjid = function decodeObjid(buffer, values, relative) { + var result; + var identifiers = []; + var ident = 0; + while (!buffer.isEmpty()) { + var subident = buffer.readUInt8(); + ident <<= 7; + ident |= subident & 0x7f; + if ((subident & 0x80) === 0) { + identifiers.push(ident); + ident = 0; + } + } + if (subident & 0x80) + identifiers.push(ident); + + var first = (identifiers[0] / 40) | 0; + var second = identifiers[0] % 40; + + if (relative) + result = identifiers; + else + result = [first, second].concat(identifiers.slice(1)); + + if (values) { + var tmp = values[result.join(' ')]; + if (tmp === undefined) + tmp = values[result.join('.')]; + if (tmp !== undefined) + result = tmp; + } + + return result; +}; + +DERNode.prototype._decodeTime = function decodeTime(buffer, tag) { + var str = buffer.raw().toString(); + if (tag === 'gentime') { + var year = str.slice(0, 4) | 0; + var mon = str.slice(4, 6) | 0; + var day = str.slice(6, 8) | 0; + var hour = str.slice(8, 10) | 0; + var min = str.slice(10, 12) | 0; + var sec = str.slice(12, 14) | 0; + } else if (tag === 'utctime') { + var year = str.slice(0, 2) | 0; + var mon = str.slice(2, 4) | 0; + var day = str.slice(4, 6) | 0; + var hour = str.slice(6, 8) | 0; + var min = str.slice(8, 10) | 0; + var sec = str.slice(10, 12) | 0; + if (year < 70) + year = 2000 + year; + else + year = 1900 + year; + } else { + return buffer.error('Decoding ' + tag + ' time is not supported yet'); + } + + return Date.UTC(year, mon - 1, day, hour, min, sec, 0); +}; + +DERNode.prototype._decodeNull = function decodeNull(buffer) { + return null; +}; + +DERNode.prototype._decodeBool = function decodeBool(buffer) { + var res = buffer.readUInt8(); + if (buffer.isError(res)) + return res; + else + return res !== 0; +}; + +DERNode.prototype._decodeInt = function decodeInt(buffer, values) { + // Bigint, return as it is (assume big endian) + var raw = buffer.raw(); + var res = new bignum(raw); + + if (values) + res = values[res.toString(10)] || res; + + return res; +}; + +DERNode.prototype._use = function use(entity, obj) { + if (typeof entity === 'function') + entity = entity(obj); + return entity._getDecoder('der').tree; +}; + +// Utility methods + +function derDecodeTag(buf, fail) { + var tag = buf.readUInt8(fail); + if (buf.isError(tag)) + return tag; + + var cls = der.tagClass[tag >> 6]; + var primitive = (tag & 0x20) === 0; + + // Multi-octet tag - load + if ((tag & 0x1f) === 0x1f) { + var oct = tag; + tag = 0; + while ((oct & 0x80) === 0x80) { + oct = buf.readUInt8(fail); + if (buf.isError(oct)) + return oct; + + tag <<= 7; + tag |= oct & 0x7f; + } + } else { + tag &= 0x1f; + } + var tagStr = der.tag[tag]; + + return { + cls: cls, + primitive: primitive, + tag: tag, + tagStr: tagStr + }; +} + +function derDecodeLen(buf, primitive, fail) { + var len = buf.readUInt8(fail); + if (buf.isError(len)) + return len; + + // Indefinite form + if (!primitive && len === 0x80) + return null; + + // Definite form + if ((len & 0x80) === 0) { + // Short form + return len; + } + + // Long form + var num = len & 0x7f; + if (num > 4) + return buf.error('length octect is too long'); + + len = 0; + for (var i = 0; i < num; i++) { + len <<= 8; + var j = buf.readUInt8(fail); + if (buf.isError(j)) + return j; + len |= j; + } + + return len; +} + + +}, +55889(__unused_webpack_module, exports, __webpack_require__) { +var decoders = exports; + +decoders.der = __webpack_require__(70398); +decoders.pem = __webpack_require__(58667); + + +}, +58667(module, __unused_webpack_exports, __webpack_require__) { +var inherits = __webpack_require__(86040); +var Buffer = (__webpack_require__(75334)/* .Buffer */.Buffer); + +var DERDecoder = __webpack_require__(70398); + +function PEMDecoder(entity) { + DERDecoder.call(this, entity); + this.enc = 'pem'; +}; +inherits(PEMDecoder, DERDecoder); +module.exports = PEMDecoder; + +PEMDecoder.prototype.decode = function decode(data, options) { + var lines = data.toString().split(/[\r\n]+/g); + + var label = options.label.toUpperCase(); + + var re = /^-----(BEGIN|END) ([^-]+)-----$/; + var start = -1; + var end = -1; + for (var i = 0; i < lines.length; i++) { + var match = lines[i].match(re); + if (match === null) + continue; + + if (match[2] !== label) + continue; + + if (start === -1) { + if (match[1] !== 'BEGIN') + break; + start = i; + } else { + if (match[1] !== 'END') + break; + end = i; + break; + } + } + if (start === -1 || end === -1) + throw new Error('PEM section not found for: ' + label); + + var base64 = lines.slice(start + 1, end).join(''); + // Remove excessive symbols + base64.replace(/[^a-z0-9\+\/=]+/gi, ''); + + var input = new Buffer(base64, 'base64'); + return DERDecoder.prototype.decode.call(this, input, options); +}; + + +}, +44422(module, __unused_webpack_exports, __webpack_require__) { +var inherits = __webpack_require__(86040); +var Buffer = (__webpack_require__(75334)/* .Buffer */.Buffer); + +var asn1 = __webpack_require__(82500); +var base = asn1.base; + +// Import DER constants +var der = asn1.constants.der; + +function DEREncoder(entity) { + this.enc = 'der'; + this.name = entity.name; + this.entity = entity; + + // Construct base tree + this.tree = new DERNode(); + this.tree._init(entity.body); +}; +module.exports = DEREncoder; + +DEREncoder.prototype.encode = function encode(data, reporter) { + return this.tree._encode(data, reporter).join(); +}; + +// Tree methods + +function DERNode(parent) { + base.Node.call(this, 'der', parent); +} +inherits(DERNode, base.Node); + +DERNode.prototype._encodeComposite = function encodeComposite(tag, + primitive, + cls, + content) { + var encodedTag = encodeTag(tag, primitive, cls, this.reporter); + + // Short form + if (content.length < 0x80) { + var header = new Buffer(2); + header[0] = encodedTag; + header[1] = content.length; + return this._createEncoderBuffer([ header, content ]); + } + + // Long form + // Count octets required to store length + var lenOctets = 1; + for (var i = content.length; i >= 0x100; i >>= 8) + lenOctets++; + + var header = new Buffer(1 + 1 + lenOctets); + header[0] = encodedTag; + header[1] = 0x80 | lenOctets; + + for (var i = 1 + lenOctets, j = content.length; j > 0; i--, j >>= 8) + header[i] = j & 0xff; + + return this._createEncoderBuffer([ header, content ]); +}; + +DERNode.prototype._encodeStr = function encodeStr(str, tag) { + if (tag === 'bitstr') { + return this._createEncoderBuffer([ str.unused | 0, str.data ]); + } else if (tag === 'bmpstr') { + var buf = new Buffer(str.length * 2); + for (var i = 0; i < str.length; i++) { + buf.writeUInt16BE(str.charCodeAt(i), i * 2); + } + return this._createEncoderBuffer(buf); + } else if (tag === 'numstr') { + if (!this._isNumstr(str)) { + return this.reporter.error('Encoding of string type: numstr supports ' + + 'only digits and space'); + } + return this._createEncoderBuffer(str); + } else if (tag === 'printstr') { + if (!this._isPrintstr(str)) { + return this.reporter.error('Encoding of string type: printstr supports ' + + 'only latin upper and lower case letters, ' + + 'digits, space, apostrophe, left and rigth ' + + 'parenthesis, plus sign, comma, hyphen, ' + + 'dot, slash, colon, equal sign, ' + + 'question mark'); + } + return this._createEncoderBuffer(str); + } else if (/str$/.test(tag)) { + return this._createEncoderBuffer(str); + } else if (tag === 'objDesc') { + return this._createEncoderBuffer(str); + } else { + return this.reporter.error('Encoding of string type: ' + tag + + ' unsupported'); + } +}; + +DERNode.prototype._encodeObjid = function encodeObjid(id, values, relative) { + if (typeof id === 'string') { + if (!values) + return this.reporter.error('string objid given, but no values map found'); + if (!values.hasOwnProperty(id)) + return this.reporter.error('objid not found in values map'); + id = values[id].split(/[\s\.]+/g); + for (var i = 0; i < id.length; i++) + id[i] |= 0; + } else if (Array.isArray(id)) { + id = id.slice(); + for (var i = 0; i < id.length; i++) + id[i] |= 0; + } + + if (!Array.isArray(id)) { + return this.reporter.error('objid() should be either array or string, ' + + 'got: ' + JSON.stringify(id)); + } + + if (!relative) { + if (id[1] >= 40) + return this.reporter.error('Second objid identifier OOB'); + id.splice(0, 2, id[0] * 40 + id[1]); + } + + // Count number of octets + var size = 0; + for (var i = 0; i < id.length; i++) { + var ident = id[i]; + for (size++; ident >= 0x80; ident >>= 7) + size++; + } + + var objid = new Buffer(size); + var offset = objid.length - 1; + for (var i = id.length - 1; i >= 0; i--) { + var ident = id[i]; + objid[offset--] = ident & 0x7f; + while ((ident >>= 7) > 0) + objid[offset--] = 0x80 | (ident & 0x7f); + } + + return this._createEncoderBuffer(objid); +}; + +function two(num) { + if (num < 10) + return '0' + num; + else + return num; +} + +DERNode.prototype._encodeTime = function encodeTime(time, tag) { + var str; + var date = new Date(time); + + if (tag === 'gentime') { + str = [ + two(date.getFullYear()), + two(date.getUTCMonth() + 1), + two(date.getUTCDate()), + two(date.getUTCHours()), + two(date.getUTCMinutes()), + two(date.getUTCSeconds()), + 'Z' + ].join(''); + } else if (tag === 'utctime') { + str = [ + two(date.getFullYear() % 100), + two(date.getUTCMonth() + 1), + two(date.getUTCDate()), + two(date.getUTCHours()), + two(date.getUTCMinutes()), + two(date.getUTCSeconds()), + 'Z' + ].join(''); + } else { + this.reporter.error('Encoding ' + tag + ' time is not supported yet'); + } + + return this._encodeStr(str, 'octstr'); +}; + +DERNode.prototype._encodeNull = function encodeNull() { + return this._createEncoderBuffer(''); +}; + +DERNode.prototype._encodeInt = function encodeInt(num, values) { + if (typeof num === 'string') { + if (!values) + return this.reporter.error('String int or enum given, but no values map'); + if (!values.hasOwnProperty(num)) { + return this.reporter.error('Values map doesn\'t contain: ' + + JSON.stringify(num)); + } + num = values[num]; + } + + // Bignum, assume big endian + if (typeof num !== 'number' && !Buffer.isBuffer(num)) { + var numArray = num.toArray(); + if (!num.sign && numArray[0] & 0x80) { + numArray.unshift(0); + } + num = new Buffer(numArray); + } + + if (Buffer.isBuffer(num)) { + var size = num.length; + if (num.length === 0) + size++; + + var out = new Buffer(size); + num.copy(out); + if (num.length === 0) + out[0] = 0 + return this._createEncoderBuffer(out); + } + + if (num < 0x80) + return this._createEncoderBuffer(num); + + if (num < 0x100) + return this._createEncoderBuffer([0, num]); + + var size = 1; + for (var i = num; i >= 0x100; i >>= 8) + size++; + + var out = new Array(size); + for (var i = out.length - 1; i >= 0; i--) { + out[i] = num & 0xff; + num >>= 8; + } + if(out[0] & 0x80) { + out.unshift(0); + } + + return this._createEncoderBuffer(new Buffer(out)); +}; + +DERNode.prototype._encodeBool = function encodeBool(value) { + return this._createEncoderBuffer(value ? 0xff : 0); +}; + +DERNode.prototype._use = function use(entity, obj) { + if (typeof entity === 'function') + entity = entity(obj); + return entity._getEncoder('der').tree; +}; + +DERNode.prototype._skipDefault = function skipDefault(dataBuffer, reporter, parent) { + var state = this._baseState; + var i; + if (state['default'] === null) + return false; + + var data = dataBuffer.join(); + if (state.defaultBuffer === undefined) + state.defaultBuffer = this._encodeValue(state['default'], reporter, parent).join(); + + if (data.length !== state.defaultBuffer.length) + return false; + + for (i=0; i < data.length; i++) + if (data[i] !== state.defaultBuffer[i]) + return false; + + return true; +}; + +// Utility methods + +function encodeTag(tag, primitive, cls, reporter) { + var res; + + if (tag === 'seqof') + tag = 'seq'; + else if (tag === 'setof') + tag = 'set'; + + if (der.tagByName.hasOwnProperty(tag)) + res = der.tagByName[tag]; + else if (typeof tag === 'number' && (tag | 0) === tag) + res = tag; + else + return reporter.error('Unknown tag: ' + tag); + + if (res >= 0x1f) + return reporter.error('Multi-octet tag encoding unsupported'); + + if (!primitive) + res |= 0x20; + + res |= (der.tagClassByName[cls || 'universal'] << 6); + + return res; +} + + +}, +40137(__unused_webpack_module, exports, __webpack_require__) { +var encoders = exports; + +encoders.der = __webpack_require__(44422); +encoders.pem = __webpack_require__(15299); + + +}, +15299(module, __unused_webpack_exports, __webpack_require__) { +var inherits = __webpack_require__(86040); + +var DEREncoder = __webpack_require__(44422); + +function PEMEncoder(entity) { + DEREncoder.call(this, entity); + this.enc = 'pem'; +}; +inherits(PEMEncoder, DEREncoder); +module.exports = PEMEncoder; + +PEMEncoder.prototype.encode = function encode(data, options) { + var buf = DEREncoder.prototype.encode.call(this, data); + + var p = buf.toString('base64'); + var out = [ '-----BEGIN ' + options.label + '-----' ]; + for (var i = 0; i < p.length; i += 64) + out.push(p.slice(i, i + 64)); + out.push('-----END ' + options.label + '-----'); + return out.join('\n'); +}; + + +}, +8910(__unused_webpack_module, exports) { +"use strict"; + + +exports.byteLength = byteLength +exports.toByteArray = toByteArray +exports.fromByteArray = fromByteArray + +var lookup = [] +var revLookup = [] +var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array + +var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/' +for (var i = 0, len = code.length; i < len; ++i) { + lookup[i] = code[i] + revLookup[code.charCodeAt(i)] = i +} + +// Support decoding URL-safe base64 strings, as Node.js does. +// See: https://en.wikipedia.org/wiki/Base64#URL_applications +revLookup['-'.charCodeAt(0)] = 62 +revLookup['_'.charCodeAt(0)] = 63 + +function getLens (b64) { + var len = b64.length + + if (len % 4 > 0) { + throw new Error('Invalid string. Length must be a multiple of 4') + } + + // Trim off extra bytes after placeholder bytes are found + // See: https://github.com/beatgammit/base64-js/issues/42 + var validLen = b64.indexOf('=') + if (validLen === -1) validLen = len + + var placeHoldersLen = validLen === len + ? 0 + : 4 - (validLen % 4) + + return [validLen, placeHoldersLen] +} + +// base64 is 4/3 + up to two characters of the original data +function byteLength (b64) { + var lens = getLens(b64) + var validLen = lens[0] + var placeHoldersLen = lens[1] + return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen +} + +function _byteLength (b64, validLen, placeHoldersLen) { + return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen +} + +function toByteArray (b64) { + var tmp + var lens = getLens(b64) + var validLen = lens[0] + var placeHoldersLen = lens[1] + + var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen)) + + var curByte = 0 + + // if there are placeholders, only get up to the last complete 4 chars + var len = placeHoldersLen > 0 + ? validLen - 4 + : validLen + + var i + for (i = 0; i < len; i += 4) { + tmp = + (revLookup[b64.charCodeAt(i)] << 18) | + (revLookup[b64.charCodeAt(i + 1)] << 12) | + (revLookup[b64.charCodeAt(i + 2)] << 6) | + revLookup[b64.charCodeAt(i + 3)] + arr[curByte++] = (tmp >> 16) & 0xFF + arr[curByte++] = (tmp >> 8) & 0xFF + arr[curByte++] = tmp & 0xFF + } + + if (placeHoldersLen === 2) { + tmp = + (revLookup[b64.charCodeAt(i)] << 2) | + (revLookup[b64.charCodeAt(i + 1)] >> 4) + arr[curByte++] = tmp & 0xFF + } + + if (placeHoldersLen === 1) { + tmp = + (revLookup[b64.charCodeAt(i)] << 10) | + (revLookup[b64.charCodeAt(i + 1)] << 4) | + (revLookup[b64.charCodeAt(i + 2)] >> 2) + arr[curByte++] = (tmp >> 8) & 0xFF + arr[curByte++] = tmp & 0xFF + } + + return arr +} + +function tripletToBase64 (num) { + return lookup[num >> 18 & 0x3F] + + lookup[num >> 12 & 0x3F] + + lookup[num >> 6 & 0x3F] + + lookup[num & 0x3F] +} + +function encodeChunk (uint8, start, end) { + var tmp + var output = [] + for (var i = start; i < end; i += 3) { + tmp = + ((uint8[i] << 16) & 0xFF0000) + + ((uint8[i + 1] << 8) & 0xFF00) + + (uint8[i + 2] & 0xFF) + output.push(tripletToBase64(tmp)) + } + return output.join('') +} + +function fromByteArray (uint8) { + var tmp + var len = uint8.length + var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes + var parts = [] + var maxChunkLength = 16383 // must be multiple of 3 + + // go through the array every three bytes, we'll deal with trailing stuff later + for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) { + parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength))) + } + + // pad the end with zeros, but make sure to not forget the extra bytes + if (extraBytes === 1) { + tmp = uint8[len - 1] + parts.push( + lookup[tmp >> 2] + + lookup[(tmp << 4) & 0x3F] + + '==' + ) + } else if (extraBytes === 2) { + tmp = (uint8[len - 2] << 8) + uint8[len - 1] + parts.push( + lookup[tmp >> 10] + + lookup[(tmp >> 4) & 0x3F] + + lookup[(tmp << 2) & 0x3F] + + '=' + ) + } + + return parts.join('') +} + + +}, +91939(module, __unused_webpack_exports, __webpack_require__) { +/* module decorator */ module = __webpack_require__.nmd(module); +(function (module, exports) { + 'use strict'; + + // Utils + function assert (val, msg) { + if (!val) throw new Error(msg || 'Assertion failed'); + } + + // Could use `inherits` module, but don't want to move from single file + // architecture yet. + function inherits (ctor, superCtor) { + ctor.super_ = superCtor; + var TempCtor = function () {}; + TempCtor.prototype = superCtor.prototype; + ctor.prototype = new TempCtor(); + ctor.prototype.constructor = ctor; + } + + // BN + + function BN (number, base, endian) { + if (BN.isBN(number)) { + return number; + } + + this.negative = 0; + this.words = null; + this.length = 0; + + // Reduction context + this.red = null; + + if (number !== null) { + if (base === 'le' || base === 'be') { + endian = base; + base = 10; + } + + this._init(number || 0, base || 10, endian || 'be'); + } + } + if (typeof module === 'object') { + module.exports = BN; + } else { + exports.BN = BN; + } + + BN.BN = BN; + BN.wordSize = 26; + + var Buffer; + try { + if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') { + Buffer = window.Buffer; + } else { + Buffer = (__webpack_require__(97316)/* .Buffer */.Buffer); + } + } catch (e) { + } + + BN.isBN = function isBN (num) { + if (num instanceof BN) { + return true; + } + + return num !== null && typeof num === 'object' && + num.constructor.wordSize === BN.wordSize && Array.isArray(num.words); + }; + + BN.max = function max (left, right) { + if (left.cmp(right) > 0) return left; + return right; + }; + + BN.min = function min (left, right) { + if (left.cmp(right) < 0) return left; + return right; + }; + + BN.prototype._init = function init (number, base, endian) { + if (typeof number === 'number') { + return this._initNumber(number, base, endian); + } + + if (typeof number === 'object') { + return this._initArray(number, base, endian); + } + + if (base === 'hex') { + base = 16; + } + assert(base === (base | 0) && base >= 2 && base <= 36); + + number = number.toString().replace(/\s+/g, ''); + var start = 0; + if (number[0] === '-') { + start++; + this.negative = 1; + } + + if (start < number.length) { + if (base === 16) { + this._parseHex(number, start, endian); + } else { + this._parseBase(number, base, start); + if (endian === 'le') { + this._initArray(this.toArray(), base, endian); + } + } + } + }; + + BN.prototype._initNumber = function _initNumber (number, base, endian) { + if (number < 0) { + this.negative = 1; + number = -number; + } + if (number < 0x4000000) { + this.words = [ number & 0x3ffffff ]; + this.length = 1; + } else if (number < 0x10000000000000) { + this.words = [ + number & 0x3ffffff, + (number / 0x4000000) & 0x3ffffff + ]; + this.length = 2; + } else { + assert(number < 0x20000000000000); // 2 ^ 53 (unsafe) + this.words = [ + number & 0x3ffffff, + (number / 0x4000000) & 0x3ffffff, + 1 + ]; + this.length = 3; + } + + if (endian !== 'le') return; + + // Reverse the bytes + this._initArray(this.toArray(), base, endian); + }; + + BN.prototype._initArray = function _initArray (number, base, endian) { + // Perhaps a Uint8Array + assert(typeof number.length === 'number'); + if (number.length <= 0) { + this.words = [ 0 ]; + this.length = 1; + return this; + } + + this.length = Math.ceil(number.length / 3); + this.words = new Array(this.length); + for (var i = 0; i < this.length; i++) { + this.words[i] = 0; + } + + var j, w; + var off = 0; + if (endian === 'be') { + for (i = number.length - 1, j = 0; i >= 0; i -= 3) { + w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16); + this.words[j] |= (w << off) & 0x3ffffff; + this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff; + off += 24; + if (off >= 26) { + off -= 26; + j++; + } + } + } else if (endian === 'le') { + for (i = 0, j = 0; i < number.length; i += 3) { + w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16); + this.words[j] |= (w << off) & 0x3ffffff; + this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff; + off += 24; + if (off >= 26) { + off -= 26; + j++; + } + } + } + return this.strip(); + }; + + function parseHex4Bits (string, index) { + var c = string.charCodeAt(index); + // 'A' - 'F' + if (c >= 65 && c <= 70) { + return c - 55; + // 'a' - 'f' + } else if (c >= 97 && c <= 102) { + return c - 87; + // '0' - '9' + } else { + return (c - 48) & 0xf; + } + } + + function parseHexByte (string, lowerBound, index) { + var r = parseHex4Bits(string, index); + if (index - 1 >= lowerBound) { + r |= parseHex4Bits(string, index - 1) << 4; + } + return r; + } + + BN.prototype._parseHex = function _parseHex (number, start, endian) { + // Create possibly bigger array to ensure that it fits the number + this.length = Math.ceil((number.length - start) / 6); + this.words = new Array(this.length); + for (var i = 0; i < this.length; i++) { + this.words[i] = 0; + } + + // 24-bits chunks + var off = 0; + var j = 0; + + var w; + if (endian === 'be') { + for (i = number.length - 1; i >= start; i -= 2) { + w = parseHexByte(number, start, i) << off; + this.words[j] |= w & 0x3ffffff; + if (off >= 18) { + off -= 18; + j += 1; + this.words[j] |= w >>> 26; + } else { + off += 8; + } + } + } else { + var parseLength = number.length - start; + for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) { + w = parseHexByte(number, start, i) << off; + this.words[j] |= w & 0x3ffffff; + if (off >= 18) { + off -= 18; + j += 1; + this.words[j] |= w >>> 26; + } else { + off += 8; + } + } + } + + this.strip(); + }; + + function parseBase (str, start, end, mul) { + var r = 0; + var len = Math.min(str.length, end); + for (var i = start; i < len; i++) { + var c = str.charCodeAt(i) - 48; + + r *= mul; + + // 'a' + if (c >= 49) { + r += c - 49 + 0xa; + + // 'A' + } else if (c >= 17) { + r += c - 17 + 0xa; + + // '0' - '9' + } else { + r += c; + } + } + return r; + } + + BN.prototype._parseBase = function _parseBase (number, base, start) { + // Initialize as zero + this.words = [ 0 ]; + this.length = 1; + + // Find length of limb in base + for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) { + limbLen++; + } + limbLen--; + limbPow = (limbPow / base) | 0; + + var total = number.length - start; + var mod = total % limbLen; + var end = Math.min(total, total - mod) + start; + + var word = 0; + for (var i = start; i < end; i += limbLen) { + word = parseBase(number, i, i + limbLen, base); + + this.imuln(limbPow); + if (this.words[0] + word < 0x4000000) { + this.words[0] += word; + } else { + this._iaddn(word); + } + } + + if (mod !== 0) { + var pow = 1; + word = parseBase(number, i, number.length, base); + + for (i = 0; i < mod; i++) { + pow *= base; + } + + this.imuln(pow); + if (this.words[0] + word < 0x4000000) { + this.words[0] += word; + } else { + this._iaddn(word); + } + } + + this.strip(); + }; + + BN.prototype.copy = function copy (dest) { + dest.words = new Array(this.length); + for (var i = 0; i < this.length; i++) { + dest.words[i] = this.words[i]; + } + dest.length = this.length; + dest.negative = this.negative; + dest.red = this.red; + }; + + BN.prototype.clone = function clone () { + var r = new BN(null); + this.copy(r); + return r; + }; + + BN.prototype._expand = function _expand (size) { + while (this.length < size) { + this.words[this.length++] = 0; + } + return this; + }; + + // Remove leading `0` from `this` + BN.prototype.strip = function strip () { + while (this.length > 1 && this.words[this.length - 1] === 0) { + this.length--; + } + return this._normSign(); + }; + + BN.prototype._normSign = function _normSign () { + // -0 = 0 + if (this.length === 1 && this.words[0] === 0) { + this.negative = 0; + } + return this; + }; + + BN.prototype.inspect = function inspect () { + return (this.red ? ''; + }; + + /* + + var zeros = []; + var groupSizes = []; + var groupBases = []; + + var s = ''; + var i = -1; + while (++i < BN.wordSize) { + zeros[i] = s; + s += '0'; + } + groupSizes[0] = 0; + groupSizes[1] = 0; + groupBases[0] = 0; + groupBases[1] = 0; + var base = 2 - 1; + while (++base < 36 + 1) { + var groupSize = 0; + var groupBase = 1; + while (groupBase < (1 << BN.wordSize) / base) { + groupBase *= base; + groupSize += 1; + } + groupSizes[base] = groupSize; + groupBases[base] = groupBase; + } + + */ + + var zeros = [ + '', + '0', + '00', + '000', + '0000', + '00000', + '000000', + '0000000', + '00000000', + '000000000', + '0000000000', + '00000000000', + '000000000000', + '0000000000000', + '00000000000000', + '000000000000000', + '0000000000000000', + '00000000000000000', + '000000000000000000', + '0000000000000000000', + '00000000000000000000', + '000000000000000000000', + '0000000000000000000000', + '00000000000000000000000', + '000000000000000000000000', + '0000000000000000000000000' + ]; + + var groupSizes = [ + 0, 0, + 25, 16, 12, 11, 10, 9, 8, + 8, 7, 7, 7, 7, 6, 6, + 6, 6, 6, 6, 6, 5, 5, + 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5 + ]; + + var groupBases = [ + 0, 0, + 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216, + 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625, + 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632, + 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149, + 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176 + ]; + + BN.prototype.toString = function toString (base, padding) { + base = base || 10; + padding = padding | 0 || 1; + + var out; + if (base === 16 || base === 'hex') { + out = ''; + var off = 0; + var carry = 0; + for (var i = 0; i < this.length; i++) { + var w = this.words[i]; + var word = (((w << off) | carry) & 0xffffff).toString(16); + carry = (w >>> (24 - off)) & 0xffffff; + off += 2; + if (off >= 26) { + off -= 26; + i--; + } + if (carry !== 0 || i !== this.length - 1) { + out = zeros[6 - word.length] + word + out; + } else { + out = word + out; + } + } + if (carry !== 0) { + out = carry.toString(16) + out; + } + while (out.length % padding !== 0) { + out = '0' + out; + } + if (this.negative !== 0) { + out = '-' + out; + } + return out; + } + + if (base === (base | 0) && base >= 2 && base <= 36) { + // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base)); + var groupSize = groupSizes[base]; + // var groupBase = Math.pow(base, groupSize); + var groupBase = groupBases[base]; + out = ''; + var c = this.clone(); + c.negative = 0; + while (!c.isZero()) { + var r = c.modn(groupBase).toString(base); + c = c.idivn(groupBase); + + if (!c.isZero()) { + out = zeros[groupSize - r.length] + r + out; + } else { + out = r + out; + } + } + if (this.isZero()) { + out = '0' + out; + } + while (out.length % padding !== 0) { + out = '0' + out; + } + if (this.negative !== 0) { + out = '-' + out; + } + return out; + } + + assert(false, 'Base should be between 2 and 36'); + }; + + BN.prototype.toNumber = function toNumber () { + var ret = this.words[0]; + if (this.length === 2) { + ret += this.words[1] * 0x4000000; + } else if (this.length === 3 && this.words[2] === 0x01) { + // NOTE: at this stage it is known that the top bit is set + ret += 0x10000000000000 + (this.words[1] * 0x4000000); + } else if (this.length > 2) { + assert(false, 'Number can only safely store up to 53 bits'); + } + return (this.negative !== 0) ? -ret : ret; + }; + + BN.prototype.toJSON = function toJSON () { + return this.toString(16); + }; + + BN.prototype.toBuffer = function toBuffer (endian, length) { + assert(typeof Buffer !== 'undefined'); + return this.toArrayLike(Buffer, endian, length); + }; + + BN.prototype.toArray = function toArray (endian, length) { + return this.toArrayLike(Array, endian, length); + }; + + BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) { + var byteLength = this.byteLength(); + var reqLength = length || Math.max(1, byteLength); + assert(byteLength <= reqLength, 'byte array longer than desired length'); + assert(reqLength > 0, 'Requested array length <= 0'); + + this.strip(); + var littleEndian = endian === 'le'; + var res = new ArrayType(reqLength); + + var b, i; + var q = this.clone(); + if (!littleEndian) { + // Assume big-endian + for (i = 0; i < reqLength - byteLength; i++) { + res[i] = 0; + } + + for (i = 0; !q.isZero(); i++) { + b = q.andln(0xff); + q.iushrn(8); + + res[reqLength - i - 1] = b; + } + } else { + for (i = 0; !q.isZero(); i++) { + b = q.andln(0xff); + q.iushrn(8); + + res[i] = b; + } + + for (; i < reqLength; i++) { + res[i] = 0; + } + } + + return res; + }; + + if (Math.clz32) { + BN.prototype._countBits = function _countBits (w) { + return 32 - Math.clz32(w); + }; + } else { + BN.prototype._countBits = function _countBits (w) { + var t = w; + var r = 0; + if (t >= 0x1000) { + r += 13; + t >>>= 13; + } + if (t >= 0x40) { + r += 7; + t >>>= 7; + } + if (t >= 0x8) { + r += 4; + t >>>= 4; + } + if (t >= 0x02) { + r += 2; + t >>>= 2; + } + return r + t; + }; + } + + BN.prototype._zeroBits = function _zeroBits (w) { + // Short-cut + if (w === 0) return 26; + + var t = w; + var r = 0; + if ((t & 0x1fff) === 0) { + r += 13; + t >>>= 13; + } + if ((t & 0x7f) === 0) { + r += 7; + t >>>= 7; + } + if ((t & 0xf) === 0) { + r += 4; + t >>>= 4; + } + if ((t & 0x3) === 0) { + r += 2; + t >>>= 2; + } + if ((t & 0x1) === 0) { + r++; + } + return r; + }; + + // Return number of used bits in a BN + BN.prototype.bitLength = function bitLength () { + var w = this.words[this.length - 1]; + var hi = this._countBits(w); + return (this.length - 1) * 26 + hi; + }; + + function toBitArray (num) { + var w = new Array(num.bitLength()); + + for (var bit = 0; bit < w.length; bit++) { + var off = (bit / 26) | 0; + var wbit = bit % 26; + + w[bit] = (num.words[off] & (1 << wbit)) >>> wbit; + } + + return w; + } + + // Number of trailing zero bits + BN.prototype.zeroBits = function zeroBits () { + if (this.isZero()) return 0; + + var r = 0; + for (var i = 0; i < this.length; i++) { + var b = this._zeroBits(this.words[i]); + r += b; + if (b !== 26) break; + } + return r; + }; + + BN.prototype.byteLength = function byteLength () { + return Math.ceil(this.bitLength() / 8); + }; + + BN.prototype.toTwos = function toTwos (width) { + if (this.negative !== 0) { + return this.abs().inotn(width).iaddn(1); + } + return this.clone(); + }; + + BN.prototype.fromTwos = function fromTwos (width) { + if (this.testn(width - 1)) { + return this.notn(width).iaddn(1).ineg(); + } + return this.clone(); + }; + + BN.prototype.isNeg = function isNeg () { + return this.negative !== 0; + }; + + // Return negative clone of `this` + BN.prototype.neg = function neg () { + return this.clone().ineg(); + }; + + BN.prototype.ineg = function ineg () { + if (!this.isZero()) { + this.negative ^= 1; + } + + return this; + }; + + // Or `num` with `this` in-place + BN.prototype.iuor = function iuor (num) { + while (this.length < num.length) { + this.words[this.length++] = 0; + } + + for (var i = 0; i < num.length; i++) { + this.words[i] = this.words[i] | num.words[i]; + } + + return this.strip(); + }; + + BN.prototype.ior = function ior (num) { + assert((this.negative | num.negative) === 0); + return this.iuor(num); + }; + + // Or `num` with `this` + BN.prototype.or = function or (num) { + if (this.length > num.length) return this.clone().ior(num); + return num.clone().ior(this); + }; + + BN.prototype.uor = function uor (num) { + if (this.length > num.length) return this.clone().iuor(num); + return num.clone().iuor(this); + }; + + // And `num` with `this` in-place + BN.prototype.iuand = function iuand (num) { + // b = min-length(num, this) + var b; + if (this.length > num.length) { + b = num; + } else { + b = this; + } + + for (var i = 0; i < b.length; i++) { + this.words[i] = this.words[i] & num.words[i]; + } + + this.length = b.length; + + return this.strip(); + }; + + BN.prototype.iand = function iand (num) { + assert((this.negative | num.negative) === 0); + return this.iuand(num); + }; + + // And `num` with `this` + BN.prototype.and = function and (num) { + if (this.length > num.length) return this.clone().iand(num); + return num.clone().iand(this); + }; + + BN.prototype.uand = function uand (num) { + if (this.length > num.length) return this.clone().iuand(num); + return num.clone().iuand(this); + }; + + // Xor `num` with `this` in-place + BN.prototype.iuxor = function iuxor (num) { + // a.length > b.length + var a; + var b; + if (this.length > num.length) { + a = this; + b = num; + } else { + a = num; + b = this; + } + + for (var i = 0; i < b.length; i++) { + this.words[i] = a.words[i] ^ b.words[i]; + } + + if (this !== a) { + for (; i < a.length; i++) { + this.words[i] = a.words[i]; + } + } + + this.length = a.length; + + return this.strip(); + }; + + BN.prototype.ixor = function ixor (num) { + assert((this.negative | num.negative) === 0); + return this.iuxor(num); + }; + + // Xor `num` with `this` + BN.prototype.xor = function xor (num) { + if (this.length > num.length) return this.clone().ixor(num); + return num.clone().ixor(this); + }; + + BN.prototype.uxor = function uxor (num) { + if (this.length > num.length) return this.clone().iuxor(num); + return num.clone().iuxor(this); + }; + + // Not ``this`` with ``width`` bitwidth + BN.prototype.inotn = function inotn (width) { + assert(typeof width === 'number' && width >= 0); + + var bytesNeeded = Math.ceil(width / 26) | 0; + var bitsLeft = width % 26; + + // Extend the buffer with leading zeroes + this._expand(bytesNeeded); + + if (bitsLeft > 0) { + bytesNeeded--; + } + + // Handle complete words + for (var i = 0; i < bytesNeeded; i++) { + this.words[i] = ~this.words[i] & 0x3ffffff; + } + + // Handle the residue + if (bitsLeft > 0) { + this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft)); + } + + // And remove leading zeroes + return this.strip(); + }; + + BN.prototype.notn = function notn (width) { + return this.clone().inotn(width); + }; + + // Set `bit` of `this` + BN.prototype.setn = function setn (bit, val) { + assert(typeof bit === 'number' && bit >= 0); + + var off = (bit / 26) | 0; + var wbit = bit % 26; + + this._expand(off + 1); + + if (val) { + this.words[off] = this.words[off] | (1 << wbit); + } else { + this.words[off] = this.words[off] & ~(1 << wbit); + } + + return this.strip(); + }; + + // Add `num` to `this` in-place + BN.prototype.iadd = function iadd (num) { + var r; + + // negative + positive + if (this.negative !== 0 && num.negative === 0) { + this.negative = 0; + r = this.isub(num); + this.negative ^= 1; + return this._normSign(); + + // positive + negative + } else if (this.negative === 0 && num.negative !== 0) { + num.negative = 0; + r = this.isub(num); + num.negative = 1; + return r._normSign(); + } + + // a.length > b.length + var a, b; + if (this.length > num.length) { + a = this; + b = num; + } else { + a = num; + b = this; + } + + var carry = 0; + for (var i = 0; i < b.length; i++) { + r = (a.words[i] | 0) + (b.words[i] | 0) + carry; + this.words[i] = r & 0x3ffffff; + carry = r >>> 26; + } + for (; carry !== 0 && i < a.length; i++) { + r = (a.words[i] | 0) + carry; + this.words[i] = r & 0x3ffffff; + carry = r >>> 26; + } + + this.length = a.length; + if (carry !== 0) { + this.words[this.length] = carry; + this.length++; + // Copy the rest of the words + } else if (a !== this) { + for (; i < a.length; i++) { + this.words[i] = a.words[i]; + } + } + + return this; + }; + + // Add `num` to `this` + BN.prototype.add = function add (num) { + var res; + if (num.negative !== 0 && this.negative === 0) { + num.negative = 0; + res = this.sub(num); + num.negative ^= 1; + return res; + } else if (num.negative === 0 && this.negative !== 0) { + this.negative = 0; + res = num.sub(this); + this.negative = 1; + return res; + } + + if (this.length > num.length) return this.clone().iadd(num); + + return num.clone().iadd(this); + }; + + // Subtract `num` from `this` in-place + BN.prototype.isub = function isub (num) { + // this - (-num) = this + num + if (num.negative !== 0) { + num.negative = 0; + var r = this.iadd(num); + num.negative = 1; + return r._normSign(); + + // -this - num = -(this + num) + } else if (this.negative !== 0) { + this.negative = 0; + this.iadd(num); + this.negative = 1; + return this._normSign(); + } + + // At this point both numbers are positive + var cmp = this.cmp(num); + + // Optimization - zeroify + if (cmp === 0) { + this.negative = 0; + this.length = 1; + this.words[0] = 0; + return this; + } + + // a > b + var a, b; + if (cmp > 0) { + a = this; + b = num; + } else { + a = num; + b = this; + } + + var carry = 0; + for (var i = 0; i < b.length; i++) { + r = (a.words[i] | 0) - (b.words[i] | 0) + carry; + carry = r >> 26; + this.words[i] = r & 0x3ffffff; + } + for (; carry !== 0 && i < a.length; i++) { + r = (a.words[i] | 0) + carry; + carry = r >> 26; + this.words[i] = r & 0x3ffffff; + } + + // Copy rest of the words + if (carry === 0 && i < a.length && a !== this) { + for (; i < a.length; i++) { + this.words[i] = a.words[i]; + } + } + + this.length = Math.max(this.length, i); + + if (a !== this) { + this.negative = 1; + } + + return this.strip(); + }; + + // Subtract `num` from `this` + BN.prototype.sub = function sub (num) { + return this.clone().isub(num); + }; + + function smallMulTo (self, num, out) { + out.negative = num.negative ^ self.negative; + var len = (self.length + num.length) | 0; + out.length = len; + len = (len - 1) | 0; + + // Peel one iteration (compiler can't do it, because of code complexity) + var a = self.words[0] | 0; + var b = num.words[0] | 0; + var r = a * b; + + var lo = r & 0x3ffffff; + var carry = (r / 0x4000000) | 0; + out.words[0] = lo; + + for (var k = 1; k < len; k++) { + // Sum all words with the same `i + j = k` and accumulate `ncarry`, + // note that ncarry could be >= 0x3ffffff + var ncarry = carry >>> 26; + var rword = carry & 0x3ffffff; + var maxJ = Math.min(k, num.length - 1); + for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) { + var i = (k - j) | 0; + a = self.words[i] | 0; + b = num.words[j] | 0; + r = a * b + rword; + ncarry += (r / 0x4000000) | 0; + rword = r & 0x3ffffff; + } + out.words[k] = rword | 0; + carry = ncarry | 0; + } + if (carry !== 0) { + out.words[k] = carry | 0; + } else { + out.length--; + } + + return out.strip(); + } + + // TODO(indutny): it may be reasonable to omit it for users who don't need + // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit + // multiplication (like elliptic secp256k1). + var comb10MulTo = function comb10MulTo (self, num, out) { + var a = self.words; + var b = num.words; + var o = out.words; + var c = 0; + var lo; + var mid; + var hi; + var a0 = a[0] | 0; + var al0 = a0 & 0x1fff; + var ah0 = a0 >>> 13; + var a1 = a[1] | 0; + var al1 = a1 & 0x1fff; + var ah1 = a1 >>> 13; + var a2 = a[2] | 0; + var al2 = a2 & 0x1fff; + var ah2 = a2 >>> 13; + var a3 = a[3] | 0; + var al3 = a3 & 0x1fff; + var ah3 = a3 >>> 13; + var a4 = a[4] | 0; + var al4 = a4 & 0x1fff; + var ah4 = a4 >>> 13; + var a5 = a[5] | 0; + var al5 = a5 & 0x1fff; + var ah5 = a5 >>> 13; + var a6 = a[6] | 0; + var al6 = a6 & 0x1fff; + var ah6 = a6 >>> 13; + var a7 = a[7] | 0; + var al7 = a7 & 0x1fff; + var ah7 = a7 >>> 13; + var a8 = a[8] | 0; + var al8 = a8 & 0x1fff; + var ah8 = a8 >>> 13; + var a9 = a[9] | 0; + var al9 = a9 & 0x1fff; + var ah9 = a9 >>> 13; + var b0 = b[0] | 0; + var bl0 = b0 & 0x1fff; + var bh0 = b0 >>> 13; + var b1 = b[1] | 0; + var bl1 = b1 & 0x1fff; + var bh1 = b1 >>> 13; + var b2 = b[2] | 0; + var bl2 = b2 & 0x1fff; + var bh2 = b2 >>> 13; + var b3 = b[3] | 0; + var bl3 = b3 & 0x1fff; + var bh3 = b3 >>> 13; + var b4 = b[4] | 0; + var bl4 = b4 & 0x1fff; + var bh4 = b4 >>> 13; + var b5 = b[5] | 0; + var bl5 = b5 & 0x1fff; + var bh5 = b5 >>> 13; + var b6 = b[6] | 0; + var bl6 = b6 & 0x1fff; + var bh6 = b6 >>> 13; + var b7 = b[7] | 0; + var bl7 = b7 & 0x1fff; + var bh7 = b7 >>> 13; + var b8 = b[8] | 0; + var bl8 = b8 & 0x1fff; + var bh8 = b8 >>> 13; + var b9 = b[9] | 0; + var bl9 = b9 & 0x1fff; + var bh9 = b9 >>> 13; + + out.negative = self.negative ^ num.negative; + out.length = 19; + /* k = 0 */ + lo = Math.imul(al0, bl0); + mid = Math.imul(al0, bh0); + mid = (mid + Math.imul(ah0, bl0)) | 0; + hi = Math.imul(ah0, bh0); + var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0; + w0 &= 0x3ffffff; + /* k = 1 */ + lo = Math.imul(al1, bl0); + mid = Math.imul(al1, bh0); + mid = (mid + Math.imul(ah1, bl0)) | 0; + hi = Math.imul(ah1, bh0); + lo = (lo + Math.imul(al0, bl1)) | 0; + mid = (mid + Math.imul(al0, bh1)) | 0; + mid = (mid + Math.imul(ah0, bl1)) | 0; + hi = (hi + Math.imul(ah0, bh1)) | 0; + var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0; + w1 &= 0x3ffffff; + /* k = 2 */ + lo = Math.imul(al2, bl0); + mid = Math.imul(al2, bh0); + mid = (mid + Math.imul(ah2, bl0)) | 0; + hi = Math.imul(ah2, bh0); + lo = (lo + Math.imul(al1, bl1)) | 0; + mid = (mid + Math.imul(al1, bh1)) | 0; + mid = (mid + Math.imul(ah1, bl1)) | 0; + hi = (hi + Math.imul(ah1, bh1)) | 0; + lo = (lo + Math.imul(al0, bl2)) | 0; + mid = (mid + Math.imul(al0, bh2)) | 0; + mid = (mid + Math.imul(ah0, bl2)) | 0; + hi = (hi + Math.imul(ah0, bh2)) | 0; + var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0; + w2 &= 0x3ffffff; + /* k = 3 */ + lo = Math.imul(al3, bl0); + mid = Math.imul(al3, bh0); + mid = (mid + Math.imul(ah3, bl0)) | 0; + hi = Math.imul(ah3, bh0); + lo = (lo + Math.imul(al2, bl1)) | 0; + mid = (mid + Math.imul(al2, bh1)) | 0; + mid = (mid + Math.imul(ah2, bl1)) | 0; + hi = (hi + Math.imul(ah2, bh1)) | 0; + lo = (lo + Math.imul(al1, bl2)) | 0; + mid = (mid + Math.imul(al1, bh2)) | 0; + mid = (mid + Math.imul(ah1, bl2)) | 0; + hi = (hi + Math.imul(ah1, bh2)) | 0; + lo = (lo + Math.imul(al0, bl3)) | 0; + mid = (mid + Math.imul(al0, bh3)) | 0; + mid = (mid + Math.imul(ah0, bl3)) | 0; + hi = (hi + Math.imul(ah0, bh3)) | 0; + var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0; + w3 &= 0x3ffffff; + /* k = 4 */ + lo = Math.imul(al4, bl0); + mid = Math.imul(al4, bh0); + mid = (mid + Math.imul(ah4, bl0)) | 0; + hi = Math.imul(ah4, bh0); + lo = (lo + Math.imul(al3, bl1)) | 0; + mid = (mid + Math.imul(al3, bh1)) | 0; + mid = (mid + Math.imul(ah3, bl1)) | 0; + hi = (hi + Math.imul(ah3, bh1)) | 0; + lo = (lo + Math.imul(al2, bl2)) | 0; + mid = (mid + Math.imul(al2, bh2)) | 0; + mid = (mid + Math.imul(ah2, bl2)) | 0; + hi = (hi + Math.imul(ah2, bh2)) | 0; + lo = (lo + Math.imul(al1, bl3)) | 0; + mid = (mid + Math.imul(al1, bh3)) | 0; + mid = (mid + Math.imul(ah1, bl3)) | 0; + hi = (hi + Math.imul(ah1, bh3)) | 0; + lo = (lo + Math.imul(al0, bl4)) | 0; + mid = (mid + Math.imul(al0, bh4)) | 0; + mid = (mid + Math.imul(ah0, bl4)) | 0; + hi = (hi + Math.imul(ah0, bh4)) | 0; + var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0; + w4 &= 0x3ffffff; + /* k = 5 */ + lo = Math.imul(al5, bl0); + mid = Math.imul(al5, bh0); + mid = (mid + Math.imul(ah5, bl0)) | 0; + hi = Math.imul(ah5, bh0); + lo = (lo + Math.imul(al4, bl1)) | 0; + mid = (mid + Math.imul(al4, bh1)) | 0; + mid = (mid + Math.imul(ah4, bl1)) | 0; + hi = (hi + Math.imul(ah4, bh1)) | 0; + lo = (lo + Math.imul(al3, bl2)) | 0; + mid = (mid + Math.imul(al3, bh2)) | 0; + mid = (mid + Math.imul(ah3, bl2)) | 0; + hi = (hi + Math.imul(ah3, bh2)) | 0; + lo = (lo + Math.imul(al2, bl3)) | 0; + mid = (mid + Math.imul(al2, bh3)) | 0; + mid = (mid + Math.imul(ah2, bl3)) | 0; + hi = (hi + Math.imul(ah2, bh3)) | 0; + lo = (lo + Math.imul(al1, bl4)) | 0; + mid = (mid + Math.imul(al1, bh4)) | 0; + mid = (mid + Math.imul(ah1, bl4)) | 0; + hi = (hi + Math.imul(ah1, bh4)) | 0; + lo = (lo + Math.imul(al0, bl5)) | 0; + mid = (mid + Math.imul(al0, bh5)) | 0; + mid = (mid + Math.imul(ah0, bl5)) | 0; + hi = (hi + Math.imul(ah0, bh5)) | 0; + var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0; + w5 &= 0x3ffffff; + /* k = 6 */ + lo = Math.imul(al6, bl0); + mid = Math.imul(al6, bh0); + mid = (mid + Math.imul(ah6, bl0)) | 0; + hi = Math.imul(ah6, bh0); + lo = (lo + Math.imul(al5, bl1)) | 0; + mid = (mid + Math.imul(al5, bh1)) | 0; + mid = (mid + Math.imul(ah5, bl1)) | 0; + hi = (hi + Math.imul(ah5, bh1)) | 0; + lo = (lo + Math.imul(al4, bl2)) | 0; + mid = (mid + Math.imul(al4, bh2)) | 0; + mid = (mid + Math.imul(ah4, bl2)) | 0; + hi = (hi + Math.imul(ah4, bh2)) | 0; + lo = (lo + Math.imul(al3, bl3)) | 0; + mid = (mid + Math.imul(al3, bh3)) | 0; + mid = (mid + Math.imul(ah3, bl3)) | 0; + hi = (hi + Math.imul(ah3, bh3)) | 0; + lo = (lo + Math.imul(al2, bl4)) | 0; + mid = (mid + Math.imul(al2, bh4)) | 0; + mid = (mid + Math.imul(ah2, bl4)) | 0; + hi = (hi + Math.imul(ah2, bh4)) | 0; + lo = (lo + Math.imul(al1, bl5)) | 0; + mid = (mid + Math.imul(al1, bh5)) | 0; + mid = (mid + Math.imul(ah1, bl5)) | 0; + hi = (hi + Math.imul(ah1, bh5)) | 0; + lo = (lo + Math.imul(al0, bl6)) | 0; + mid = (mid + Math.imul(al0, bh6)) | 0; + mid = (mid + Math.imul(ah0, bl6)) | 0; + hi = (hi + Math.imul(ah0, bh6)) | 0; + var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0; + w6 &= 0x3ffffff; + /* k = 7 */ + lo = Math.imul(al7, bl0); + mid = Math.imul(al7, bh0); + mid = (mid + Math.imul(ah7, bl0)) | 0; + hi = Math.imul(ah7, bh0); + lo = (lo + Math.imul(al6, bl1)) | 0; + mid = (mid + Math.imul(al6, bh1)) | 0; + mid = (mid + Math.imul(ah6, bl1)) | 0; + hi = (hi + Math.imul(ah6, bh1)) | 0; + lo = (lo + Math.imul(al5, bl2)) | 0; + mid = (mid + Math.imul(al5, bh2)) | 0; + mid = (mid + Math.imul(ah5, bl2)) | 0; + hi = (hi + Math.imul(ah5, bh2)) | 0; + lo = (lo + Math.imul(al4, bl3)) | 0; + mid = (mid + Math.imul(al4, bh3)) | 0; + mid = (mid + Math.imul(ah4, bl3)) | 0; + hi = (hi + Math.imul(ah4, bh3)) | 0; + lo = (lo + Math.imul(al3, bl4)) | 0; + mid = (mid + Math.imul(al3, bh4)) | 0; + mid = (mid + Math.imul(ah3, bl4)) | 0; + hi = (hi + Math.imul(ah3, bh4)) | 0; + lo = (lo + Math.imul(al2, bl5)) | 0; + mid = (mid + Math.imul(al2, bh5)) | 0; + mid = (mid + Math.imul(ah2, bl5)) | 0; + hi = (hi + Math.imul(ah2, bh5)) | 0; + lo = (lo + Math.imul(al1, bl6)) | 0; + mid = (mid + Math.imul(al1, bh6)) | 0; + mid = (mid + Math.imul(ah1, bl6)) | 0; + hi = (hi + Math.imul(ah1, bh6)) | 0; + lo = (lo + Math.imul(al0, bl7)) | 0; + mid = (mid + Math.imul(al0, bh7)) | 0; + mid = (mid + Math.imul(ah0, bl7)) | 0; + hi = (hi + Math.imul(ah0, bh7)) | 0; + var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0; + w7 &= 0x3ffffff; + /* k = 8 */ + lo = Math.imul(al8, bl0); + mid = Math.imul(al8, bh0); + mid = (mid + Math.imul(ah8, bl0)) | 0; + hi = Math.imul(ah8, bh0); + lo = (lo + Math.imul(al7, bl1)) | 0; + mid = (mid + Math.imul(al7, bh1)) | 0; + mid = (mid + Math.imul(ah7, bl1)) | 0; + hi = (hi + Math.imul(ah7, bh1)) | 0; + lo = (lo + Math.imul(al6, bl2)) | 0; + mid = (mid + Math.imul(al6, bh2)) | 0; + mid = (mid + Math.imul(ah6, bl2)) | 0; + hi = (hi + Math.imul(ah6, bh2)) | 0; + lo = (lo + Math.imul(al5, bl3)) | 0; + mid = (mid + Math.imul(al5, bh3)) | 0; + mid = (mid + Math.imul(ah5, bl3)) | 0; + hi = (hi + Math.imul(ah5, bh3)) | 0; + lo = (lo + Math.imul(al4, bl4)) | 0; + mid = (mid + Math.imul(al4, bh4)) | 0; + mid = (mid + Math.imul(ah4, bl4)) | 0; + hi = (hi + Math.imul(ah4, bh4)) | 0; + lo = (lo + Math.imul(al3, bl5)) | 0; + mid = (mid + Math.imul(al3, bh5)) | 0; + mid = (mid + Math.imul(ah3, bl5)) | 0; + hi = (hi + Math.imul(ah3, bh5)) | 0; + lo = (lo + Math.imul(al2, bl6)) | 0; + mid = (mid + Math.imul(al2, bh6)) | 0; + mid = (mid + Math.imul(ah2, bl6)) | 0; + hi = (hi + Math.imul(ah2, bh6)) | 0; + lo = (lo + Math.imul(al1, bl7)) | 0; + mid = (mid + Math.imul(al1, bh7)) | 0; + mid = (mid + Math.imul(ah1, bl7)) | 0; + hi = (hi + Math.imul(ah1, bh7)) | 0; + lo = (lo + Math.imul(al0, bl8)) | 0; + mid = (mid + Math.imul(al0, bh8)) | 0; + mid = (mid + Math.imul(ah0, bl8)) | 0; + hi = (hi + Math.imul(ah0, bh8)) | 0; + var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0; + w8 &= 0x3ffffff; + /* k = 9 */ + lo = Math.imul(al9, bl0); + mid = Math.imul(al9, bh0); + mid = (mid + Math.imul(ah9, bl0)) | 0; + hi = Math.imul(ah9, bh0); + lo = (lo + Math.imul(al8, bl1)) | 0; + mid = (mid + Math.imul(al8, bh1)) | 0; + mid = (mid + Math.imul(ah8, bl1)) | 0; + hi = (hi + Math.imul(ah8, bh1)) | 0; + lo = (lo + Math.imul(al7, bl2)) | 0; + mid = (mid + Math.imul(al7, bh2)) | 0; + mid = (mid + Math.imul(ah7, bl2)) | 0; + hi = (hi + Math.imul(ah7, bh2)) | 0; + lo = (lo + Math.imul(al6, bl3)) | 0; + mid = (mid + Math.imul(al6, bh3)) | 0; + mid = (mid + Math.imul(ah6, bl3)) | 0; + hi = (hi + Math.imul(ah6, bh3)) | 0; + lo = (lo + Math.imul(al5, bl4)) | 0; + mid = (mid + Math.imul(al5, bh4)) | 0; + mid = (mid + Math.imul(ah5, bl4)) | 0; + hi = (hi + Math.imul(ah5, bh4)) | 0; + lo = (lo + Math.imul(al4, bl5)) | 0; + mid = (mid + Math.imul(al4, bh5)) | 0; + mid = (mid + Math.imul(ah4, bl5)) | 0; + hi = (hi + Math.imul(ah4, bh5)) | 0; + lo = (lo + Math.imul(al3, bl6)) | 0; + mid = (mid + Math.imul(al3, bh6)) | 0; + mid = (mid + Math.imul(ah3, bl6)) | 0; + hi = (hi + Math.imul(ah3, bh6)) | 0; + lo = (lo + Math.imul(al2, bl7)) | 0; + mid = (mid + Math.imul(al2, bh7)) | 0; + mid = (mid + Math.imul(ah2, bl7)) | 0; + hi = (hi + Math.imul(ah2, bh7)) | 0; + lo = (lo + Math.imul(al1, bl8)) | 0; + mid = (mid + Math.imul(al1, bh8)) | 0; + mid = (mid + Math.imul(ah1, bl8)) | 0; + hi = (hi + Math.imul(ah1, bh8)) | 0; + lo = (lo + Math.imul(al0, bl9)) | 0; + mid = (mid + Math.imul(al0, bh9)) | 0; + mid = (mid + Math.imul(ah0, bl9)) | 0; + hi = (hi + Math.imul(ah0, bh9)) | 0; + var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0; + w9 &= 0x3ffffff; + /* k = 10 */ + lo = Math.imul(al9, bl1); + mid = Math.imul(al9, bh1); + mid = (mid + Math.imul(ah9, bl1)) | 0; + hi = Math.imul(ah9, bh1); + lo = (lo + Math.imul(al8, bl2)) | 0; + mid = (mid + Math.imul(al8, bh2)) | 0; + mid = (mid + Math.imul(ah8, bl2)) | 0; + hi = (hi + Math.imul(ah8, bh2)) | 0; + lo = (lo + Math.imul(al7, bl3)) | 0; + mid = (mid + Math.imul(al7, bh3)) | 0; + mid = (mid + Math.imul(ah7, bl3)) | 0; + hi = (hi + Math.imul(ah7, bh3)) | 0; + lo = (lo + Math.imul(al6, bl4)) | 0; + mid = (mid + Math.imul(al6, bh4)) | 0; + mid = (mid + Math.imul(ah6, bl4)) | 0; + hi = (hi + Math.imul(ah6, bh4)) | 0; + lo = (lo + Math.imul(al5, bl5)) | 0; + mid = (mid + Math.imul(al5, bh5)) | 0; + mid = (mid + Math.imul(ah5, bl5)) | 0; + hi = (hi + Math.imul(ah5, bh5)) | 0; + lo = (lo + Math.imul(al4, bl6)) | 0; + mid = (mid + Math.imul(al4, bh6)) | 0; + mid = (mid + Math.imul(ah4, bl6)) | 0; + hi = (hi + Math.imul(ah4, bh6)) | 0; + lo = (lo + Math.imul(al3, bl7)) | 0; + mid = (mid + Math.imul(al3, bh7)) | 0; + mid = (mid + Math.imul(ah3, bl7)) | 0; + hi = (hi + Math.imul(ah3, bh7)) | 0; + lo = (lo + Math.imul(al2, bl8)) | 0; + mid = (mid + Math.imul(al2, bh8)) | 0; + mid = (mid + Math.imul(ah2, bl8)) | 0; + hi = (hi + Math.imul(ah2, bh8)) | 0; + lo = (lo + Math.imul(al1, bl9)) | 0; + mid = (mid + Math.imul(al1, bh9)) | 0; + mid = (mid + Math.imul(ah1, bl9)) | 0; + hi = (hi + Math.imul(ah1, bh9)) | 0; + var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0; + w10 &= 0x3ffffff; + /* k = 11 */ + lo = Math.imul(al9, bl2); + mid = Math.imul(al9, bh2); + mid = (mid + Math.imul(ah9, bl2)) | 0; + hi = Math.imul(ah9, bh2); + lo = (lo + Math.imul(al8, bl3)) | 0; + mid = (mid + Math.imul(al8, bh3)) | 0; + mid = (mid + Math.imul(ah8, bl3)) | 0; + hi = (hi + Math.imul(ah8, bh3)) | 0; + lo = (lo + Math.imul(al7, bl4)) | 0; + mid = (mid + Math.imul(al7, bh4)) | 0; + mid = (mid + Math.imul(ah7, bl4)) | 0; + hi = (hi + Math.imul(ah7, bh4)) | 0; + lo = (lo + Math.imul(al6, bl5)) | 0; + mid = (mid + Math.imul(al6, bh5)) | 0; + mid = (mid + Math.imul(ah6, bl5)) | 0; + hi = (hi + Math.imul(ah6, bh5)) | 0; + lo = (lo + Math.imul(al5, bl6)) | 0; + mid = (mid + Math.imul(al5, bh6)) | 0; + mid = (mid + Math.imul(ah5, bl6)) | 0; + hi = (hi + Math.imul(ah5, bh6)) | 0; + lo = (lo + Math.imul(al4, bl7)) | 0; + mid = (mid + Math.imul(al4, bh7)) | 0; + mid = (mid + Math.imul(ah4, bl7)) | 0; + hi = (hi + Math.imul(ah4, bh7)) | 0; + lo = (lo + Math.imul(al3, bl8)) | 0; + mid = (mid + Math.imul(al3, bh8)) | 0; + mid = (mid + Math.imul(ah3, bl8)) | 0; + hi = (hi + Math.imul(ah3, bh8)) | 0; + lo = (lo + Math.imul(al2, bl9)) | 0; + mid = (mid + Math.imul(al2, bh9)) | 0; + mid = (mid + Math.imul(ah2, bl9)) | 0; + hi = (hi + Math.imul(ah2, bh9)) | 0; + var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0; + w11 &= 0x3ffffff; + /* k = 12 */ + lo = Math.imul(al9, bl3); + mid = Math.imul(al9, bh3); + mid = (mid + Math.imul(ah9, bl3)) | 0; + hi = Math.imul(ah9, bh3); + lo = (lo + Math.imul(al8, bl4)) | 0; + mid = (mid + Math.imul(al8, bh4)) | 0; + mid = (mid + Math.imul(ah8, bl4)) | 0; + hi = (hi + Math.imul(ah8, bh4)) | 0; + lo = (lo + Math.imul(al7, bl5)) | 0; + mid = (mid + Math.imul(al7, bh5)) | 0; + mid = (mid + Math.imul(ah7, bl5)) | 0; + hi = (hi + Math.imul(ah7, bh5)) | 0; + lo = (lo + Math.imul(al6, bl6)) | 0; + mid = (mid + Math.imul(al6, bh6)) | 0; + mid = (mid + Math.imul(ah6, bl6)) | 0; + hi = (hi + Math.imul(ah6, bh6)) | 0; + lo = (lo + Math.imul(al5, bl7)) | 0; + mid = (mid + Math.imul(al5, bh7)) | 0; + mid = (mid + Math.imul(ah5, bl7)) | 0; + hi = (hi + Math.imul(ah5, bh7)) | 0; + lo = (lo + Math.imul(al4, bl8)) | 0; + mid = (mid + Math.imul(al4, bh8)) | 0; + mid = (mid + Math.imul(ah4, bl8)) | 0; + hi = (hi + Math.imul(ah4, bh8)) | 0; + lo = (lo + Math.imul(al3, bl9)) | 0; + mid = (mid + Math.imul(al3, bh9)) | 0; + mid = (mid + Math.imul(ah3, bl9)) | 0; + hi = (hi + Math.imul(ah3, bh9)) | 0; + var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0; + w12 &= 0x3ffffff; + /* k = 13 */ + lo = Math.imul(al9, bl4); + mid = Math.imul(al9, bh4); + mid = (mid + Math.imul(ah9, bl4)) | 0; + hi = Math.imul(ah9, bh4); + lo = (lo + Math.imul(al8, bl5)) | 0; + mid = (mid + Math.imul(al8, bh5)) | 0; + mid = (mid + Math.imul(ah8, bl5)) | 0; + hi = (hi + Math.imul(ah8, bh5)) | 0; + lo = (lo + Math.imul(al7, bl6)) | 0; + mid = (mid + Math.imul(al7, bh6)) | 0; + mid = (mid + Math.imul(ah7, bl6)) | 0; + hi = (hi + Math.imul(ah7, bh6)) | 0; + lo = (lo + Math.imul(al6, bl7)) | 0; + mid = (mid + Math.imul(al6, bh7)) | 0; + mid = (mid + Math.imul(ah6, bl7)) | 0; + hi = (hi + Math.imul(ah6, bh7)) | 0; + lo = (lo + Math.imul(al5, bl8)) | 0; + mid = (mid + Math.imul(al5, bh8)) | 0; + mid = (mid + Math.imul(ah5, bl8)) | 0; + hi = (hi + Math.imul(ah5, bh8)) | 0; + lo = (lo + Math.imul(al4, bl9)) | 0; + mid = (mid + Math.imul(al4, bh9)) | 0; + mid = (mid + Math.imul(ah4, bl9)) | 0; + hi = (hi + Math.imul(ah4, bh9)) | 0; + var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0; + w13 &= 0x3ffffff; + /* k = 14 */ + lo = Math.imul(al9, bl5); + mid = Math.imul(al9, bh5); + mid = (mid + Math.imul(ah9, bl5)) | 0; + hi = Math.imul(ah9, bh5); + lo = (lo + Math.imul(al8, bl6)) | 0; + mid = (mid + Math.imul(al8, bh6)) | 0; + mid = (mid + Math.imul(ah8, bl6)) | 0; + hi = (hi + Math.imul(ah8, bh6)) | 0; + lo = (lo + Math.imul(al7, bl7)) | 0; + mid = (mid + Math.imul(al7, bh7)) | 0; + mid = (mid + Math.imul(ah7, bl7)) | 0; + hi = (hi + Math.imul(ah7, bh7)) | 0; + lo = (lo + Math.imul(al6, bl8)) | 0; + mid = (mid + Math.imul(al6, bh8)) | 0; + mid = (mid + Math.imul(ah6, bl8)) | 0; + hi = (hi + Math.imul(ah6, bh8)) | 0; + lo = (lo + Math.imul(al5, bl9)) | 0; + mid = (mid + Math.imul(al5, bh9)) | 0; + mid = (mid + Math.imul(ah5, bl9)) | 0; + hi = (hi + Math.imul(ah5, bh9)) | 0; + var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0; + w14 &= 0x3ffffff; + /* k = 15 */ + lo = Math.imul(al9, bl6); + mid = Math.imul(al9, bh6); + mid = (mid + Math.imul(ah9, bl6)) | 0; + hi = Math.imul(ah9, bh6); + lo = (lo + Math.imul(al8, bl7)) | 0; + mid = (mid + Math.imul(al8, bh7)) | 0; + mid = (mid + Math.imul(ah8, bl7)) | 0; + hi = (hi + Math.imul(ah8, bh7)) | 0; + lo = (lo + Math.imul(al7, bl8)) | 0; + mid = (mid + Math.imul(al7, bh8)) | 0; + mid = (mid + Math.imul(ah7, bl8)) | 0; + hi = (hi + Math.imul(ah7, bh8)) | 0; + lo = (lo + Math.imul(al6, bl9)) | 0; + mid = (mid + Math.imul(al6, bh9)) | 0; + mid = (mid + Math.imul(ah6, bl9)) | 0; + hi = (hi + Math.imul(ah6, bh9)) | 0; + var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0; + w15 &= 0x3ffffff; + /* k = 16 */ + lo = Math.imul(al9, bl7); + mid = Math.imul(al9, bh7); + mid = (mid + Math.imul(ah9, bl7)) | 0; + hi = Math.imul(ah9, bh7); + lo = (lo + Math.imul(al8, bl8)) | 0; + mid = (mid + Math.imul(al8, bh8)) | 0; + mid = (mid + Math.imul(ah8, bl8)) | 0; + hi = (hi + Math.imul(ah8, bh8)) | 0; + lo = (lo + Math.imul(al7, bl9)) | 0; + mid = (mid + Math.imul(al7, bh9)) | 0; + mid = (mid + Math.imul(ah7, bl9)) | 0; + hi = (hi + Math.imul(ah7, bh9)) | 0; + var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0; + w16 &= 0x3ffffff; + /* k = 17 */ + lo = Math.imul(al9, bl8); + mid = Math.imul(al9, bh8); + mid = (mid + Math.imul(ah9, bl8)) | 0; + hi = Math.imul(ah9, bh8); + lo = (lo + Math.imul(al8, bl9)) | 0; + mid = (mid + Math.imul(al8, bh9)) | 0; + mid = (mid + Math.imul(ah8, bl9)) | 0; + hi = (hi + Math.imul(ah8, bh9)) | 0; + var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0; + w17 &= 0x3ffffff; + /* k = 18 */ + lo = Math.imul(al9, bl9); + mid = Math.imul(al9, bh9); + mid = (mid + Math.imul(ah9, bl9)) | 0; + hi = Math.imul(ah9, bh9); + var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0; + w18 &= 0x3ffffff; + o[0] = w0; + o[1] = w1; + o[2] = w2; + o[3] = w3; + o[4] = w4; + o[5] = w5; + o[6] = w6; + o[7] = w7; + o[8] = w8; + o[9] = w9; + o[10] = w10; + o[11] = w11; + o[12] = w12; + o[13] = w13; + o[14] = w14; + o[15] = w15; + o[16] = w16; + o[17] = w17; + o[18] = w18; + if (c !== 0) { + o[19] = c; + out.length++; + } + return out; + }; + + // Polyfill comb + if (!Math.imul) { + comb10MulTo = smallMulTo; + } + + function bigMulTo (self, num, out) { + out.negative = num.negative ^ self.negative; + out.length = self.length + num.length; + + var carry = 0; + var hncarry = 0; + for (var k = 0; k < out.length - 1; k++) { + // Sum all words with the same `i + j = k` and accumulate `ncarry`, + // note that ncarry could be >= 0x3ffffff + var ncarry = hncarry; + hncarry = 0; + var rword = carry & 0x3ffffff; + var maxJ = Math.min(k, num.length - 1); + for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) { + var i = k - j; + var a = self.words[i] | 0; + var b = num.words[j] | 0; + var r = a * b; + + var lo = r & 0x3ffffff; + ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0; + lo = (lo + rword) | 0; + rword = lo & 0x3ffffff; + ncarry = (ncarry + (lo >>> 26)) | 0; + + hncarry += ncarry >>> 26; + ncarry &= 0x3ffffff; + } + out.words[k] = rword; + carry = ncarry; + ncarry = hncarry; + } + if (carry !== 0) { + out.words[k] = carry; + } else { + out.length--; + } + + return out.strip(); + } + + function jumboMulTo (self, num, out) { + var fftm = new FFTM(); + return fftm.mulp(self, num, out); + } + + BN.prototype.mulTo = function mulTo (num, out) { + var res; + var len = this.length + num.length; + if (this.length === 10 && num.length === 10) { + res = comb10MulTo(this, num, out); + } else if (len < 63) { + res = smallMulTo(this, num, out); + } else if (len < 1024) { + res = bigMulTo(this, num, out); + } else { + res = jumboMulTo(this, num, out); + } + + return res; + }; + + // Cooley-Tukey algorithm for FFT + // slightly revisited to rely on looping instead of recursion + + function FFTM (x, y) { + this.x = x; + this.y = y; + } + + FFTM.prototype.makeRBT = function makeRBT (N) { + var t = new Array(N); + var l = BN.prototype._countBits(N) - 1; + for (var i = 0; i < N; i++) { + t[i] = this.revBin(i, l, N); + } + + return t; + }; + + // Returns binary-reversed representation of `x` + FFTM.prototype.revBin = function revBin (x, l, N) { + if (x === 0 || x === N - 1) return x; + + var rb = 0; + for (var i = 0; i < l; i++) { + rb |= (x & 1) << (l - i - 1); + x >>= 1; + } + + return rb; + }; + + // Performs "tweedling" phase, therefore 'emulating' + // behaviour of the recursive algorithm + FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) { + for (var i = 0; i < N; i++) { + rtws[i] = rws[rbt[i]]; + itws[i] = iws[rbt[i]]; + } + }; + + FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) { + this.permute(rbt, rws, iws, rtws, itws, N); + + for (var s = 1; s < N; s <<= 1) { + var l = s << 1; + + var rtwdf = Math.cos(2 * Math.PI / l); + var itwdf = Math.sin(2 * Math.PI / l); + + for (var p = 0; p < N; p += l) { + var rtwdf_ = rtwdf; + var itwdf_ = itwdf; + + for (var j = 0; j < s; j++) { + var re = rtws[p + j]; + var ie = itws[p + j]; + + var ro = rtws[p + j + s]; + var io = itws[p + j + s]; + + var rx = rtwdf_ * ro - itwdf_ * io; + + io = rtwdf_ * io + itwdf_ * ro; + ro = rx; + + rtws[p + j] = re + ro; + itws[p + j] = ie + io; + + rtws[p + j + s] = re - ro; + itws[p + j + s] = ie - io; + + /* jshint maxdepth : false */ + if (j !== l) { + rx = rtwdf * rtwdf_ - itwdf * itwdf_; + + itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_; + rtwdf_ = rx; + } + } + } + } + }; + + FFTM.prototype.guessLen13b = function guessLen13b (n, m) { + var N = Math.max(m, n) | 1; + var odd = N & 1; + var i = 0; + for (N = N / 2 | 0; N; N = N >>> 1) { + i++; + } + + return 1 << i + 1 + odd; + }; + + FFTM.prototype.conjugate = function conjugate (rws, iws, N) { + if (N <= 1) return; + + for (var i = 0; i < N / 2; i++) { + var t = rws[i]; + + rws[i] = rws[N - i - 1]; + rws[N - i - 1] = t; + + t = iws[i]; + + iws[i] = -iws[N - i - 1]; + iws[N - i - 1] = -t; + } + }; + + FFTM.prototype.normalize13b = function normalize13b (ws, N) { + var carry = 0; + for (var i = 0; i < N / 2; i++) { + var w = Math.round(ws[2 * i + 1] / N) * 0x2000 + + Math.round(ws[2 * i] / N) + + carry; + + ws[i] = w & 0x3ffffff; + + if (w < 0x4000000) { + carry = 0; + } else { + carry = w / 0x4000000 | 0; + } + } + + return ws; + }; + + FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) { + var carry = 0; + for (var i = 0; i < len; i++) { + carry = carry + (ws[i] | 0); + + rws[2 * i] = carry & 0x1fff; carry = carry >>> 13; + rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13; + } + + // Pad with zeroes + for (i = 2 * len; i < N; ++i) { + rws[i] = 0; + } + + assert(carry === 0); + assert((carry & ~0x1fff) === 0); + }; + + FFTM.prototype.stub = function stub (N) { + var ph = new Array(N); + for (var i = 0; i < N; i++) { + ph[i] = 0; + } + + return ph; + }; + + FFTM.prototype.mulp = function mulp (x, y, out) { + var N = 2 * this.guessLen13b(x.length, y.length); + + var rbt = this.makeRBT(N); + + var _ = this.stub(N); + + var rws = new Array(N); + var rwst = new Array(N); + var iwst = new Array(N); + + var nrws = new Array(N); + var nrwst = new Array(N); + var niwst = new Array(N); + + var rmws = out.words; + rmws.length = N; + + this.convert13b(x.words, x.length, rws, N); + this.convert13b(y.words, y.length, nrws, N); + + this.transform(rws, _, rwst, iwst, N, rbt); + this.transform(nrws, _, nrwst, niwst, N, rbt); + + for (var i = 0; i < N; i++) { + var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i]; + iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i]; + rwst[i] = rx; + } + + this.conjugate(rwst, iwst, N); + this.transform(rwst, iwst, rmws, _, N, rbt); + this.conjugate(rmws, _, N); + this.normalize13b(rmws, N); + + out.negative = x.negative ^ y.negative; + out.length = x.length + y.length; + return out.strip(); + }; + + // Multiply `this` by `num` + BN.prototype.mul = function mul (num) { + var out = new BN(null); + out.words = new Array(this.length + num.length); + return this.mulTo(num, out); + }; + + // Multiply employing FFT + BN.prototype.mulf = function mulf (num) { + var out = new BN(null); + out.words = new Array(this.length + num.length); + return jumboMulTo(this, num, out); + }; + + // In-place Multiplication + BN.prototype.imul = function imul (num) { + return this.clone().mulTo(num, this); + }; + + BN.prototype.imuln = function imuln (num) { + assert(typeof num === 'number'); + assert(num < 0x4000000); + + // Carry + var carry = 0; + for (var i = 0; i < this.length; i++) { + var w = (this.words[i] | 0) * num; + var lo = (w & 0x3ffffff) + (carry & 0x3ffffff); + carry >>= 26; + carry += (w / 0x4000000) | 0; + // NOTE: lo is 27bit maximum + carry += lo >>> 26; + this.words[i] = lo & 0x3ffffff; + } + + if (carry !== 0) { + this.words[i] = carry; + this.length++; + } + + return this; + }; + + BN.prototype.muln = function muln (num) { + return this.clone().imuln(num); + }; + + // `this` * `this` + BN.prototype.sqr = function sqr () { + return this.mul(this); + }; + + // `this` * `this` in-place + BN.prototype.isqr = function isqr () { + return this.imul(this.clone()); + }; + + // Math.pow(`this`, `num`) + BN.prototype.pow = function pow (num) { + var w = toBitArray(num); + if (w.length === 0) return new BN(1); + + // Skip leading zeroes + var res = this; + for (var i = 0; i < w.length; i++, res = res.sqr()) { + if (w[i] !== 0) break; + } + + if (++i < w.length) { + for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) { + if (w[i] === 0) continue; + + res = res.mul(q); + } + } + + return res; + }; + + // Shift-left in-place + BN.prototype.iushln = function iushln (bits) { + assert(typeof bits === 'number' && bits >= 0); + var r = bits % 26; + var s = (bits - r) / 26; + var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r); + var i; + + if (r !== 0) { + var carry = 0; + + for (i = 0; i < this.length; i++) { + var newCarry = this.words[i] & carryMask; + var c = ((this.words[i] | 0) - newCarry) << r; + this.words[i] = c | carry; + carry = newCarry >>> (26 - r); + } + + if (carry) { + this.words[i] = carry; + this.length++; + } + } + + if (s !== 0) { + for (i = this.length - 1; i >= 0; i--) { + this.words[i + s] = this.words[i]; + } + + for (i = 0; i < s; i++) { + this.words[i] = 0; + } + + this.length += s; + } + + return this.strip(); + }; + + BN.prototype.ishln = function ishln (bits) { + // TODO(indutny): implement me + assert(this.negative === 0); + return this.iushln(bits); + }; + + // Shift-right in-place + // NOTE: `hint` is a lowest bit before trailing zeroes + // NOTE: if `extended` is present - it will be filled with destroyed bits + BN.prototype.iushrn = function iushrn (bits, hint, extended) { + assert(typeof bits === 'number' && bits >= 0); + var h; + if (hint) { + h = (hint - (hint % 26)) / 26; + } else { + h = 0; + } + + var r = bits % 26; + var s = Math.min((bits - r) / 26, this.length); + var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r); + var maskedWords = extended; + + h -= s; + h = Math.max(0, h); + + // Extended mode, copy masked part + if (maskedWords) { + for (var i = 0; i < s; i++) { + maskedWords.words[i] = this.words[i]; + } + maskedWords.length = s; + } + + if (s === 0) { + // No-op, we should not move anything at all + } else if (this.length > s) { + this.length -= s; + for (i = 0; i < this.length; i++) { + this.words[i] = this.words[i + s]; + } + } else { + this.words[0] = 0; + this.length = 1; + } + + var carry = 0; + for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) { + var word = this.words[i] | 0; + this.words[i] = (carry << (26 - r)) | (word >>> r); + carry = word & mask; + } + + // Push carried bits as a mask + if (maskedWords && carry !== 0) { + maskedWords.words[maskedWords.length++] = carry; + } + + if (this.length === 0) { + this.words[0] = 0; + this.length = 1; + } + + return this.strip(); + }; + + BN.prototype.ishrn = function ishrn (bits, hint, extended) { + // TODO(indutny): implement me + assert(this.negative === 0); + return this.iushrn(bits, hint, extended); + }; + + // Shift-left + BN.prototype.shln = function shln (bits) { + return this.clone().ishln(bits); + }; + + BN.prototype.ushln = function ushln (bits) { + return this.clone().iushln(bits); + }; + + // Shift-right + BN.prototype.shrn = function shrn (bits) { + return this.clone().ishrn(bits); + }; + + BN.prototype.ushrn = function ushrn (bits) { + return this.clone().iushrn(bits); + }; + + // Test if n bit is set + BN.prototype.testn = function testn (bit) { + assert(typeof bit === 'number' && bit >= 0); + var r = bit % 26; + var s = (bit - r) / 26; + var q = 1 << r; + + // Fast case: bit is much higher than all existing words + if (this.length <= s) return false; + + // Check bit and return + var w = this.words[s]; + + return !!(w & q); + }; + + // Return only lowers bits of number (in-place) + BN.prototype.imaskn = function imaskn (bits) { + assert(typeof bits === 'number' && bits >= 0); + var r = bits % 26; + var s = (bits - r) / 26; + + assert(this.negative === 0, 'imaskn works only with positive numbers'); + + if (this.length <= s) { + return this; + } + + if (r !== 0) { + s++; + } + this.length = Math.min(s, this.length); + + if (r !== 0) { + var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r); + this.words[this.length - 1] &= mask; + } + + return this.strip(); + }; + + // Return only lowers bits of number + BN.prototype.maskn = function maskn (bits) { + return this.clone().imaskn(bits); + }; + + // Add plain number `num` to `this` + BN.prototype.iaddn = function iaddn (num) { + assert(typeof num === 'number'); + assert(num < 0x4000000); + if (num < 0) return this.isubn(-num); + + // Possible sign change + if (this.negative !== 0) { + if (this.length === 1 && (this.words[0] | 0) < num) { + this.words[0] = num - (this.words[0] | 0); + this.negative = 0; + return this; + } + + this.negative = 0; + this.isubn(num); + this.negative = 1; + return this; + } + + // Add without checks + return this._iaddn(num); + }; + + BN.prototype._iaddn = function _iaddn (num) { + this.words[0] += num; + + // Carry + for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) { + this.words[i] -= 0x4000000; + if (i === this.length - 1) { + this.words[i + 1] = 1; + } else { + this.words[i + 1]++; + } + } + this.length = Math.max(this.length, i + 1); + + return this; + }; + + // Subtract plain number `num` from `this` + BN.prototype.isubn = function isubn (num) { + assert(typeof num === 'number'); + assert(num < 0x4000000); + if (num < 0) return this.iaddn(-num); + + if (this.negative !== 0) { + this.negative = 0; + this.iaddn(num); + this.negative = 1; + return this; + } + + this.words[0] -= num; + + if (this.length === 1 && this.words[0] < 0) { + this.words[0] = -this.words[0]; + this.negative = 1; + } else { + // Carry + for (var i = 0; i < this.length && this.words[i] < 0; i++) { + this.words[i] += 0x4000000; + this.words[i + 1] -= 1; + } + } + + return this.strip(); + }; + + BN.prototype.addn = function addn (num) { + return this.clone().iaddn(num); + }; + + BN.prototype.subn = function subn (num) { + return this.clone().isubn(num); + }; + + BN.prototype.iabs = function iabs () { + this.negative = 0; + + return this; + }; + + BN.prototype.abs = function abs () { + return this.clone().iabs(); + }; + + BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) { + var len = num.length + shift; + var i; + + this._expand(len); + + var w; + var carry = 0; + for (i = 0; i < num.length; i++) { + w = (this.words[i + shift] | 0) + carry; + var right = (num.words[i] | 0) * mul; + w -= right & 0x3ffffff; + carry = (w >> 26) - ((right / 0x4000000) | 0); + this.words[i + shift] = w & 0x3ffffff; + } + for (; i < this.length - shift; i++) { + w = (this.words[i + shift] | 0) + carry; + carry = w >> 26; + this.words[i + shift] = w & 0x3ffffff; + } + + if (carry === 0) return this.strip(); + + // Subtraction overflow + assert(carry === -1); + carry = 0; + for (i = 0; i < this.length; i++) { + w = -(this.words[i] | 0) + carry; + carry = w >> 26; + this.words[i] = w & 0x3ffffff; + } + this.negative = 1; + + return this.strip(); + }; + + BN.prototype._wordDiv = function _wordDiv (num, mode) { + var shift = this.length - num.length; + + var a = this.clone(); + var b = num; + + // Normalize + var bhi = b.words[b.length - 1] | 0; + var bhiBits = this._countBits(bhi); + shift = 26 - bhiBits; + if (shift !== 0) { + b = b.ushln(shift); + a.iushln(shift); + bhi = b.words[b.length - 1] | 0; + } + + // Initialize quotient + var m = a.length - b.length; + var q; + + if (mode !== 'mod') { + q = new BN(null); + q.length = m + 1; + q.words = new Array(q.length); + for (var i = 0; i < q.length; i++) { + q.words[i] = 0; + } + } + + var diff = a.clone()._ishlnsubmul(b, 1, m); + if (diff.negative === 0) { + a = diff; + if (q) { + q.words[m] = 1; + } + } + + for (var j = m - 1; j >= 0; j--) { + var qj = (a.words[b.length + j] | 0) * 0x4000000 + + (a.words[b.length + j - 1] | 0); + + // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max + // (0x7ffffff) + qj = Math.min((qj / bhi) | 0, 0x3ffffff); + + a._ishlnsubmul(b, qj, j); + while (a.negative !== 0) { + qj--; + a.negative = 0; + a._ishlnsubmul(b, 1, j); + if (!a.isZero()) { + a.negative ^= 1; + } + } + if (q) { + q.words[j] = qj; + } + } + if (q) { + q.strip(); + } + a.strip(); + + // Denormalize + if (mode !== 'div' && shift !== 0) { + a.iushrn(shift); + } + + return { + div: q || null, + mod: a + }; + }; + + // NOTE: 1) `mode` can be set to `mod` to request mod only, + // to `div` to request div only, or be absent to + // request both div & mod + // 2) `positive` is true if unsigned mod is requested + BN.prototype.divmod = function divmod (num, mode, positive) { + assert(!num.isZero()); + + if (this.isZero()) { + return { + div: new BN(0), + mod: new BN(0) + }; + } + + var div, mod, res; + if (this.negative !== 0 && num.negative === 0) { + res = this.neg().divmod(num, mode); + + if (mode !== 'mod') { + div = res.div.neg(); + } + + if (mode !== 'div') { + mod = res.mod.neg(); + if (positive && mod.negative !== 0) { + mod.iadd(num); + } + } + + return { + div: div, + mod: mod + }; + } + + if (this.negative === 0 && num.negative !== 0) { + res = this.divmod(num.neg(), mode); + + if (mode !== 'mod') { + div = res.div.neg(); + } + + return { + div: div, + mod: res.mod + }; + } + + if ((this.negative & num.negative) !== 0) { + res = this.neg().divmod(num.neg(), mode); + + if (mode !== 'div') { + mod = res.mod.neg(); + if (positive && mod.negative !== 0) { + mod.isub(num); + } + } + + return { + div: res.div, + mod: mod + }; + } + + // Both numbers are positive at this point + + // Strip both numbers to approximate shift value + if (num.length > this.length || this.cmp(num) < 0) { + return { + div: new BN(0), + mod: this + }; + } + + // Very short reduction + if (num.length === 1) { + if (mode === 'div') { + return { + div: this.divn(num.words[0]), + mod: null + }; + } + + if (mode === 'mod') { + return { + div: null, + mod: new BN(this.modn(num.words[0])) + }; + } + + return { + div: this.divn(num.words[0]), + mod: new BN(this.modn(num.words[0])) + }; + } + + return this._wordDiv(num, mode); + }; + + // Find `this` / `num` + BN.prototype.div = function div (num) { + return this.divmod(num, 'div', false).div; + }; + + // Find `this` % `num` + BN.prototype.mod = function mod (num) { + return this.divmod(num, 'mod', false).mod; + }; + + BN.prototype.umod = function umod (num) { + return this.divmod(num, 'mod', true).mod; + }; + + // Find Round(`this` / `num`) + BN.prototype.divRound = function divRound (num) { + var dm = this.divmod(num); + + // Fast case - exact division + if (dm.mod.isZero()) return dm.div; + + var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod; + + var half = num.ushrn(1); + var r2 = num.andln(1); + var cmp = mod.cmp(half); + + // Round down + if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div; + + // Round up + return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1); + }; + + BN.prototype.modn = function modn (num) { + assert(num <= 0x3ffffff); + var p = (1 << 26) % num; + + var acc = 0; + for (var i = this.length - 1; i >= 0; i--) { + acc = (p * acc + (this.words[i] | 0)) % num; + } + + return acc; + }; + + // In-place division by number + BN.prototype.idivn = function idivn (num) { + assert(num <= 0x3ffffff); + + var carry = 0; + for (var i = this.length - 1; i >= 0; i--) { + var w = (this.words[i] | 0) + carry * 0x4000000; + this.words[i] = (w / num) | 0; + carry = w % num; + } + + return this.strip(); + }; + + BN.prototype.divn = function divn (num) { + return this.clone().idivn(num); + }; + + BN.prototype.egcd = function egcd (p) { + assert(p.negative === 0); + assert(!p.isZero()); + + var x = this; + var y = p.clone(); + + if (x.negative !== 0) { + x = x.umod(p); + } else { + x = x.clone(); + } + + // A * x + B * y = x + var A = new BN(1); + var B = new BN(0); + + // C * x + D * y = y + var C = new BN(0); + var D = new BN(1); + + var g = 0; + + while (x.isEven() && y.isEven()) { + x.iushrn(1); + y.iushrn(1); + ++g; + } + + var yp = y.clone(); + var xp = x.clone(); + + while (!x.isZero()) { + for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1); + if (i > 0) { + x.iushrn(i); + while (i-- > 0) { + if (A.isOdd() || B.isOdd()) { + A.iadd(yp); + B.isub(xp); + } + + A.iushrn(1); + B.iushrn(1); + } + } + + for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1); + if (j > 0) { + y.iushrn(j); + while (j-- > 0) { + if (C.isOdd() || D.isOdd()) { + C.iadd(yp); + D.isub(xp); + } + + C.iushrn(1); + D.iushrn(1); + } + } + + if (x.cmp(y) >= 0) { + x.isub(y); + A.isub(C); + B.isub(D); + } else { + y.isub(x); + C.isub(A); + D.isub(B); + } + } + + return { + a: C, + b: D, + gcd: y.iushln(g) + }; + }; + + // This is reduced incarnation of the binary EEA + // above, designated to invert members of the + // _prime_ fields F(p) at a maximal speed + BN.prototype._invmp = function _invmp (p) { + assert(p.negative === 0); + assert(!p.isZero()); + + var a = this; + var b = p.clone(); + + if (a.negative !== 0) { + a = a.umod(p); + } else { + a = a.clone(); + } + + var x1 = new BN(1); + var x2 = new BN(0); + + var delta = b.clone(); + + while (a.cmpn(1) > 0 && b.cmpn(1) > 0) { + for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1); + if (i > 0) { + a.iushrn(i); + while (i-- > 0) { + if (x1.isOdd()) { + x1.iadd(delta); + } + + x1.iushrn(1); + } + } + + for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1); + if (j > 0) { + b.iushrn(j); + while (j-- > 0) { + if (x2.isOdd()) { + x2.iadd(delta); + } + + x2.iushrn(1); + } + } + + if (a.cmp(b) >= 0) { + a.isub(b); + x1.isub(x2); + } else { + b.isub(a); + x2.isub(x1); + } + } + + var res; + if (a.cmpn(1) === 0) { + res = x1; + } else { + res = x2; + } + + if (res.cmpn(0) < 0) { + res.iadd(p); + } + + return res; + }; + + BN.prototype.gcd = function gcd (num) { + if (this.isZero()) return num.abs(); + if (num.isZero()) return this.abs(); + + var a = this.clone(); + var b = num.clone(); + a.negative = 0; + b.negative = 0; + + // Remove common factor of two + for (var shift = 0; a.isEven() && b.isEven(); shift++) { + a.iushrn(1); + b.iushrn(1); + } + + do { + while (a.isEven()) { + a.iushrn(1); + } + while (b.isEven()) { + b.iushrn(1); + } + + var r = a.cmp(b); + if (r < 0) { + // Swap `a` and `b` to make `a` always bigger than `b` + var t = a; + a = b; + b = t; + } else if (r === 0 || b.cmpn(1) === 0) { + break; + } + + a.isub(b); + } while (true); + + return b.iushln(shift); + }; + + // Invert number in the field F(num) + BN.prototype.invm = function invm (num) { + return this.egcd(num).a.umod(num); + }; + + BN.prototype.isEven = function isEven () { + return (this.words[0] & 1) === 0; + }; + + BN.prototype.isOdd = function isOdd () { + return (this.words[0] & 1) === 1; + }; + + // And first word and num + BN.prototype.andln = function andln (num) { + return this.words[0] & num; + }; + + // Increment at the bit position in-line + BN.prototype.bincn = function bincn (bit) { + assert(typeof bit === 'number'); + var r = bit % 26; + var s = (bit - r) / 26; + var q = 1 << r; + + // Fast case: bit is much higher than all existing words + if (this.length <= s) { + this._expand(s + 1); + this.words[s] |= q; + return this; + } + + // Add bit and propagate, if needed + var carry = q; + for (var i = s; carry !== 0 && i < this.length; i++) { + var w = this.words[i] | 0; + w += carry; + carry = w >>> 26; + w &= 0x3ffffff; + this.words[i] = w; + } + if (carry !== 0) { + this.words[i] = carry; + this.length++; + } + return this; + }; + + BN.prototype.isZero = function isZero () { + return this.length === 1 && this.words[0] === 0; + }; + + BN.prototype.cmpn = function cmpn (num) { + var negative = num < 0; + + if (this.negative !== 0 && !negative) return -1; + if (this.negative === 0 && negative) return 1; + + this.strip(); + + var res; + if (this.length > 1) { + res = 1; + } else { + if (negative) { + num = -num; + } + + assert(num <= 0x3ffffff, 'Number is too big'); + + var w = this.words[0] | 0; + res = w === num ? 0 : w < num ? -1 : 1; + } + if (this.negative !== 0) return -res | 0; + return res; + }; + + // Compare two numbers and return: + // 1 - if `this` > `num` + // 0 - if `this` == `num` + // -1 - if `this` < `num` + BN.prototype.cmp = function cmp (num) { + if (this.negative !== 0 && num.negative === 0) return -1; + if (this.negative === 0 && num.negative !== 0) return 1; + + var res = this.ucmp(num); + if (this.negative !== 0) return -res | 0; + return res; + }; + + // Unsigned comparison + BN.prototype.ucmp = function ucmp (num) { + // At this point both numbers have the same sign + if (this.length > num.length) return 1; + if (this.length < num.length) return -1; + + var res = 0; + for (var i = this.length - 1; i >= 0; i--) { + var a = this.words[i] | 0; + var b = num.words[i] | 0; + + if (a === b) continue; + if (a < b) { + res = -1; + } else if (a > b) { + res = 1; + } + break; + } + return res; + }; + + BN.prototype.gtn = function gtn (num) { + return this.cmpn(num) === 1; + }; + + BN.prototype.gt = function gt (num) { + return this.cmp(num) === 1; + }; + + BN.prototype.gten = function gten (num) { + return this.cmpn(num) >= 0; + }; + + BN.prototype.gte = function gte (num) { + return this.cmp(num) >= 0; + }; + + BN.prototype.ltn = function ltn (num) { + return this.cmpn(num) === -1; + }; + + BN.prototype.lt = function lt (num) { + return this.cmp(num) === -1; + }; + + BN.prototype.lten = function lten (num) { + return this.cmpn(num) <= 0; + }; + + BN.prototype.lte = function lte (num) { + return this.cmp(num) <= 0; + }; + + BN.prototype.eqn = function eqn (num) { + return this.cmpn(num) === 0; + }; + + BN.prototype.eq = function eq (num) { + return this.cmp(num) === 0; + }; + + // + // A reduce context, could be using montgomery or something better, depending + // on the `m` itself. + // + BN.red = function red (num) { + return new Red(num); + }; + + BN.prototype.toRed = function toRed (ctx) { + assert(!this.red, 'Already a number in reduction context'); + assert(this.negative === 0, 'red works only with positives'); + return ctx.convertTo(this)._forceRed(ctx); + }; + + BN.prototype.fromRed = function fromRed () { + assert(this.red, 'fromRed works only with numbers in reduction context'); + return this.red.convertFrom(this); + }; + + BN.prototype._forceRed = function _forceRed (ctx) { + this.red = ctx; + return this; + }; + + BN.prototype.forceRed = function forceRed (ctx) { + assert(!this.red, 'Already a number in reduction context'); + return this._forceRed(ctx); + }; + + BN.prototype.redAdd = function redAdd (num) { + assert(this.red, 'redAdd works only with red numbers'); + return this.red.add(this, num); + }; + + BN.prototype.redIAdd = function redIAdd (num) { + assert(this.red, 'redIAdd works only with red numbers'); + return this.red.iadd(this, num); + }; + + BN.prototype.redSub = function redSub (num) { + assert(this.red, 'redSub works only with red numbers'); + return this.red.sub(this, num); + }; + + BN.prototype.redISub = function redISub (num) { + assert(this.red, 'redISub works only with red numbers'); + return this.red.isub(this, num); + }; + + BN.prototype.redShl = function redShl (num) { + assert(this.red, 'redShl works only with red numbers'); + return this.red.shl(this, num); + }; + + BN.prototype.redMul = function redMul (num) { + assert(this.red, 'redMul works only with red numbers'); + this.red._verify2(this, num); + return this.red.mul(this, num); + }; + + BN.prototype.redIMul = function redIMul (num) { + assert(this.red, 'redMul works only with red numbers'); + this.red._verify2(this, num); + return this.red.imul(this, num); + }; + + BN.prototype.redSqr = function redSqr () { + assert(this.red, 'redSqr works only with red numbers'); + this.red._verify1(this); + return this.red.sqr(this); + }; + + BN.prototype.redISqr = function redISqr () { + assert(this.red, 'redISqr works only with red numbers'); + this.red._verify1(this); + return this.red.isqr(this); + }; + + // Square root over p + BN.prototype.redSqrt = function redSqrt () { + assert(this.red, 'redSqrt works only with red numbers'); + this.red._verify1(this); + return this.red.sqrt(this); + }; + + BN.prototype.redInvm = function redInvm () { + assert(this.red, 'redInvm works only with red numbers'); + this.red._verify1(this); + return this.red.invm(this); + }; + + // Return negative clone of `this` % `red modulo` + BN.prototype.redNeg = function redNeg () { + assert(this.red, 'redNeg works only with red numbers'); + this.red._verify1(this); + return this.red.neg(this); + }; + + BN.prototype.redPow = function redPow (num) { + assert(this.red && !num.red, 'redPow(normalNum)'); + this.red._verify1(this); + return this.red.pow(this, num); + }; + + // Prime numbers with efficient reduction + var primes = { + k256: null, + p224: null, + p192: null, + p25519: null + }; + + // Pseudo-Mersenne prime + function MPrime (name, p) { + // P = 2 ^ N - K + this.name = name; + this.p = new BN(p, 16); + this.n = this.p.bitLength(); + this.k = new BN(1).iushln(this.n).isub(this.p); + + this.tmp = this._tmp(); + } + + MPrime.prototype._tmp = function _tmp () { + var tmp = new BN(null); + tmp.words = new Array(Math.ceil(this.n / 13)); + return tmp; + }; + + MPrime.prototype.ireduce = function ireduce (num) { + // Assumes that `num` is less than `P^2` + // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P) + var r = num; + var rlen; + + do { + this.split(r, this.tmp); + r = this.imulK(r); + r = r.iadd(this.tmp); + rlen = r.bitLength(); + } while (rlen > this.n); + + var cmp = rlen < this.n ? -1 : r.ucmp(this.p); + if (cmp === 0) { + r.words[0] = 0; + r.length = 1; + } else if (cmp > 0) { + r.isub(this.p); + } else { + if (r.strip !== undefined) { + // r is BN v4 instance + r.strip(); + } else { + // r is BN v5 instance + r._strip(); + } + } + + return r; + }; + + MPrime.prototype.split = function split (input, out) { + input.iushrn(this.n, 0, out); + }; + + MPrime.prototype.imulK = function imulK (num) { + return num.imul(this.k); + }; + + function K256 () { + MPrime.call( + this, + 'k256', + 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f'); + } + inherits(K256, MPrime); + + K256.prototype.split = function split (input, output) { + // 256 = 9 * 26 + 22 + var mask = 0x3fffff; + + var outLen = Math.min(input.length, 9); + for (var i = 0; i < outLen; i++) { + output.words[i] = input.words[i]; + } + output.length = outLen; + + if (input.length <= 9) { + input.words[0] = 0; + input.length = 1; + return; + } + + // Shift by 9 limbs + var prev = input.words[9]; + output.words[output.length++] = prev & mask; + + for (i = 10; i < input.length; i++) { + var next = input.words[i] | 0; + input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22); + prev = next; + } + prev >>>= 22; + input.words[i - 10] = prev; + if (prev === 0 && input.length > 10) { + input.length -= 10; + } else { + input.length -= 9; + } + }; + + K256.prototype.imulK = function imulK (num) { + // K = 0x1000003d1 = [ 0x40, 0x3d1 ] + num.words[num.length] = 0; + num.words[num.length + 1] = 0; + num.length += 2; + + // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390 + var lo = 0; + for (var i = 0; i < num.length; i++) { + var w = num.words[i] | 0; + lo += w * 0x3d1; + num.words[i] = lo & 0x3ffffff; + lo = w * 0x40 + ((lo / 0x4000000) | 0); + } + + // Fast length reduction + if (num.words[num.length - 1] === 0) { + num.length--; + if (num.words[num.length - 1] === 0) { + num.length--; + } + } + return num; + }; + + function P224 () { + MPrime.call( + this, + 'p224', + 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001'); + } + inherits(P224, MPrime); + + function P192 () { + MPrime.call( + this, + 'p192', + 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff'); + } + inherits(P192, MPrime); + + function P25519 () { + // 2 ^ 255 - 19 + MPrime.call( + this, + '25519', + '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed'); + } + inherits(P25519, MPrime); + + P25519.prototype.imulK = function imulK (num) { + // K = 0x13 + var carry = 0; + for (var i = 0; i < num.length; i++) { + var hi = (num.words[i] | 0) * 0x13 + carry; + var lo = hi & 0x3ffffff; + hi >>>= 26; + + num.words[i] = lo; + carry = hi; + } + if (carry !== 0) { + num.words[num.length++] = carry; + } + return num; + }; + + // Exported mostly for testing purposes, use plain name instead + BN._prime = function prime (name) { + // Cached version of prime + if (primes[name]) return primes[name]; + + var prime; + if (name === 'k256') { + prime = new K256(); + } else if (name === 'p224') { + prime = new P224(); + } else if (name === 'p192') { + prime = new P192(); + } else if (name === 'p25519') { + prime = new P25519(); + } else { + throw new Error('Unknown prime ' + name); + } + primes[name] = prime; + + return prime; + }; + + // + // Base reduction engine + // + function Red (m) { + if (typeof m === 'string') { + var prime = BN._prime(m); + this.m = prime.p; + this.prime = prime; + } else { + assert(m.gtn(1), 'modulus must be greater than 1'); + this.m = m; + this.prime = null; + } + } + + Red.prototype._verify1 = function _verify1 (a) { + assert(a.negative === 0, 'red works only with positives'); + assert(a.red, 'red works only with red numbers'); + }; + + Red.prototype._verify2 = function _verify2 (a, b) { + assert((a.negative | b.negative) === 0, 'red works only with positives'); + assert(a.red && a.red === b.red, + 'red works only with red numbers'); + }; + + Red.prototype.imod = function imod (a) { + if (this.prime) return this.prime.ireduce(a)._forceRed(this); + return a.umod(this.m)._forceRed(this); + }; + + Red.prototype.neg = function neg (a) { + if (a.isZero()) { + return a.clone(); + } + + return this.m.sub(a)._forceRed(this); + }; + + Red.prototype.add = function add (a, b) { + this._verify2(a, b); + + var res = a.add(b); + if (res.cmp(this.m) >= 0) { + res.isub(this.m); + } + return res._forceRed(this); + }; + + Red.prototype.iadd = function iadd (a, b) { + this._verify2(a, b); + + var res = a.iadd(b); + if (res.cmp(this.m) >= 0) { + res.isub(this.m); + } + return res; + }; + + Red.prototype.sub = function sub (a, b) { + this._verify2(a, b); + + var res = a.sub(b); + if (res.cmpn(0) < 0) { + res.iadd(this.m); + } + return res._forceRed(this); + }; + + Red.prototype.isub = function isub (a, b) { + this._verify2(a, b); + + var res = a.isub(b); + if (res.cmpn(0) < 0) { + res.iadd(this.m); + } + return res; + }; + + Red.prototype.shl = function shl (a, num) { + this._verify1(a); + return this.imod(a.ushln(num)); + }; + + Red.prototype.imul = function imul (a, b) { + this._verify2(a, b); + return this.imod(a.imul(b)); + }; + + Red.prototype.mul = function mul (a, b) { + this._verify2(a, b); + return this.imod(a.mul(b)); + }; + + Red.prototype.isqr = function isqr (a) { + return this.imul(a, a.clone()); + }; + + Red.prototype.sqr = function sqr (a) { + return this.mul(a, a); + }; + + Red.prototype.sqrt = function sqrt (a) { + if (a.isZero()) return a.clone(); + + var mod3 = this.m.andln(3); + assert(mod3 % 2 === 1); + + // Fast case + if (mod3 === 3) { + var pow = this.m.add(new BN(1)).iushrn(2); + return this.pow(a, pow); + } + + // Tonelli-Shanks algorithm (Totally unoptimized and slow) + // + // Find Q and S, that Q * 2 ^ S = (P - 1) + var q = this.m.subn(1); + var s = 0; + while (!q.isZero() && q.andln(1) === 0) { + s++; + q.iushrn(1); + } + assert(!q.isZero()); + + var one = new BN(1).toRed(this); + var nOne = one.redNeg(); + + // Find quadratic non-residue + // NOTE: Max is such because of generalized Riemann hypothesis. + var lpow = this.m.subn(1).iushrn(1); + var z = this.m.bitLength(); + z = new BN(2 * z * z).toRed(this); + + while (this.pow(z, lpow).cmp(nOne) !== 0) { + z.redIAdd(nOne); + } + + var c = this.pow(z, q); + var r = this.pow(a, q.addn(1).iushrn(1)); + var t = this.pow(a, q); + var m = s; + while (t.cmp(one) !== 0) { + var tmp = t; + for (var i = 0; tmp.cmp(one) !== 0; i++) { + tmp = tmp.redSqr(); + } + assert(i < m); + var b = this.pow(c, new BN(1).iushln(m - i - 1)); + + r = r.redMul(b); + c = b.redSqr(); + t = t.redMul(c); + m = i; + } + + return r; + }; + + Red.prototype.invm = function invm (a) { + var inv = a._invmp(this.m); + if (inv.negative !== 0) { + inv.negative = 0; + return this.imod(inv).redNeg(); + } else { + return this.imod(inv); + } + }; + + Red.prototype.pow = function pow (a, num) { + if (num.isZero()) return new BN(1).toRed(this); + if (num.cmpn(1) === 0) return a.clone(); + + var windowSize = 4; + var wnd = new Array(1 << windowSize); + wnd[0] = new BN(1).toRed(this); + wnd[1] = a; + for (var i = 2; i < wnd.length; i++) { + wnd[i] = this.mul(wnd[i - 1], a); + } + + var res = wnd[0]; + var current = 0; + var currentLen = 0; + var start = num.bitLength() % 26; + if (start === 0) { + start = 26; + } + + for (i = num.length - 1; i >= 0; i--) { + var word = num.words[i]; + for (var j = start - 1; j >= 0; j--) { + var bit = (word >> j) & 1; + if (res !== wnd[0]) { + res = this.sqr(res); + } + + if (bit === 0 && current === 0) { + currentLen = 0; + continue; + } + + current <<= 1; + current |= bit; + currentLen++; + if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue; + + res = this.mul(res, wnd[current]); + currentLen = 0; + current = 0; + } + start = 26; + } + + return res; + }; + + Red.prototype.convertTo = function convertTo (num) { + var r = num.umod(this.m); + + return r === num ? r.clone() : r; + }; + + Red.prototype.convertFrom = function convertFrom (num) { + var res = num.clone(); + res.red = null; + return res; + }; + + // + // Montgomery method engine + // + + BN.mont = function mont (num) { + return new Mont(num); + }; + + function Mont (m) { + Red.call(this, m); + + this.shift = this.m.bitLength(); + if (this.shift % 26 !== 0) { + this.shift += 26 - (this.shift % 26); + } + + this.r = new BN(1).iushln(this.shift); + this.r2 = this.imod(this.r.sqr()); + this.rinv = this.r._invmp(this.m); + + this.minv = this.rinv.mul(this.r).isubn(1).div(this.m); + this.minv = this.minv.umod(this.r); + this.minv = this.r.sub(this.minv); + } + inherits(Mont, Red); + + Mont.prototype.convertTo = function convertTo (num) { + return this.imod(num.ushln(this.shift)); + }; + + Mont.prototype.convertFrom = function convertFrom (num) { + var r = this.imod(num.mul(this.rinv)); + r.red = null; + return r; + }; + + Mont.prototype.imul = function imul (a, b) { + if (a.isZero() || b.isZero()) { + a.words[0] = 0; + a.length = 1; + return a; + } + + var t = a.imul(b); + var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m); + var u = t.isub(c).iushrn(this.shift); + var res = u; + + if (u.cmp(this.m) >= 0) { + res = u.isub(this.m); + } else if (u.cmpn(0) < 0) { + res = u.iadd(this.m); + } + + return res._forceRed(this); + }; + + Mont.prototype.mul = function mul (a, b) { + if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this); + + var t = a.mul(b); + var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m); + var u = t.isub(c).iushrn(this.shift); + var res = u; + if (u.cmp(this.m) >= 0) { + res = u.isub(this.m); + } else if (u.cmpn(0) < 0) { + res = u.iadd(this.m); + } + + return res._forceRed(this); + }; + + Mont.prototype.invm = function invm (a) { + // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R + var res = this.imod(a._invmp(this.m).mul(this.r2)); + return res._forceRed(this); + }; +})( false || module, this); + + +}, +79657(module, __unused_webpack_exports, __webpack_require__) { +/* module decorator */ module = __webpack_require__.nmd(module); +(function (module, exports) { + 'use strict'; + + // Utils + function assert (val, msg) { + if (!val) throw new Error(msg || 'Assertion failed'); + } + + // Could use `inherits` module, but don't want to move from single file + // architecture yet. + function inherits (ctor, superCtor) { + ctor.super_ = superCtor; + var TempCtor = function () {}; + TempCtor.prototype = superCtor.prototype; + ctor.prototype = new TempCtor(); + ctor.prototype.constructor = ctor; + } + + // BN + + function BN (number, base, endian) { + if (BN.isBN(number)) { + return number; + } + + this.negative = 0; + this.words = null; + this.length = 0; + + // Reduction context + this.red = null; + + if (number !== null) { + if (base === 'le' || base === 'be') { + endian = base; + base = 10; + } + + this._init(number || 0, base || 10, endian || 'be'); + } + } + if (typeof module === 'object') { + module.exports = BN; + } else { + exports.BN = BN; + } + + BN.BN = BN; + BN.wordSize = 26; + + var Buffer; + try { + if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') { + Buffer = window.Buffer; + } else { + Buffer = (__webpack_require__(94950)/* .Buffer */.Buffer); + } + } catch (e) { + } + + BN.isBN = function isBN (num) { + if (num instanceof BN) { + return true; + } + + return num !== null && typeof num === 'object' && + num.constructor.wordSize === BN.wordSize && Array.isArray(num.words); + }; + + BN.max = function max (left, right) { + if (left.cmp(right) > 0) return left; + return right; + }; + + BN.min = function min (left, right) { + if (left.cmp(right) < 0) return left; + return right; + }; + + BN.prototype._init = function init (number, base, endian) { + if (typeof number === 'number') { + return this._initNumber(number, base, endian); + } + + if (typeof number === 'object') { + return this._initArray(number, base, endian); + } + + if (base === 'hex') { + base = 16; + } + assert(base === (base | 0) && base >= 2 && base <= 36); + + number = number.toString().replace(/\s+/g, ''); + var start = 0; + if (number[0] === '-') { + start++; + this.negative = 1; + } + + if (start < number.length) { + if (base === 16) { + this._parseHex(number, start, endian); + } else { + this._parseBase(number, base, start); + if (endian === 'le') { + this._initArray(this.toArray(), base, endian); + } + } + } + }; + + BN.prototype._initNumber = function _initNumber (number, base, endian) { + if (number < 0) { + this.negative = 1; + number = -number; + } + if (number < 0x4000000) { + this.words = [number & 0x3ffffff]; + this.length = 1; + } else if (number < 0x10000000000000) { + this.words = [ + number & 0x3ffffff, + (number / 0x4000000) & 0x3ffffff + ]; + this.length = 2; + } else { + assert(number < 0x20000000000000); // 2 ^ 53 (unsafe) + this.words = [ + number & 0x3ffffff, + (number / 0x4000000) & 0x3ffffff, + 1 + ]; + this.length = 3; + } + + if (endian !== 'le') return; + + // Reverse the bytes + this._initArray(this.toArray(), base, endian); + }; + + BN.prototype._initArray = function _initArray (number, base, endian) { + // Perhaps a Uint8Array + assert(typeof number.length === 'number'); + if (number.length <= 0) { + this.words = [0]; + this.length = 1; + return this; + } + + this.length = Math.ceil(number.length / 3); + this.words = new Array(this.length); + for (var i = 0; i < this.length; i++) { + this.words[i] = 0; + } + + var j, w; + var off = 0; + if (endian === 'be') { + for (i = number.length - 1, j = 0; i >= 0; i -= 3) { + w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16); + this.words[j] |= (w << off) & 0x3ffffff; + this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff; + off += 24; + if (off >= 26) { + off -= 26; + j++; + } + } + } else if (endian === 'le') { + for (i = 0, j = 0; i < number.length; i += 3) { + w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16); + this.words[j] |= (w << off) & 0x3ffffff; + this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff; + off += 24; + if (off >= 26) { + off -= 26; + j++; + } + } + } + return this._strip(); + }; + + function parseHex4Bits (string, index) { + var c = string.charCodeAt(index); + // '0' - '9' + if (c >= 48 && c <= 57) { + return c - 48; + // 'A' - 'F' + } else if (c >= 65 && c <= 70) { + return c - 55; + // 'a' - 'f' + } else if (c >= 97 && c <= 102) { + return c - 87; + } else { + assert(false, 'Invalid character in ' + string); + } + } + + function parseHexByte (string, lowerBound, index) { + var r = parseHex4Bits(string, index); + if (index - 1 >= lowerBound) { + r |= parseHex4Bits(string, index - 1) << 4; + } + return r; + } + + BN.prototype._parseHex = function _parseHex (number, start, endian) { + // Create possibly bigger array to ensure that it fits the number + this.length = Math.ceil((number.length - start) / 6); + this.words = new Array(this.length); + for (var i = 0; i < this.length; i++) { + this.words[i] = 0; + } + + // 24-bits chunks + var off = 0; + var j = 0; + + var w; + if (endian === 'be') { + for (i = number.length - 1; i >= start; i -= 2) { + w = parseHexByte(number, start, i) << off; + this.words[j] |= w & 0x3ffffff; + if (off >= 18) { + off -= 18; + j += 1; + this.words[j] |= w >>> 26; + } else { + off += 8; + } + } + } else { + var parseLength = number.length - start; + for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) { + w = parseHexByte(number, start, i) << off; + this.words[j] |= w & 0x3ffffff; + if (off >= 18) { + off -= 18; + j += 1; + this.words[j] |= w >>> 26; + } else { + off += 8; + } + } + } + + this._strip(); + }; + + function parseBase (str, start, end, mul) { + var r = 0; + var b = 0; + var len = Math.min(str.length, end); + for (var i = start; i < len; i++) { + var c = str.charCodeAt(i) - 48; + + r *= mul; + + // 'a' + if (c >= 49) { + b = c - 49 + 0xa; + + // 'A' + } else if (c >= 17) { + b = c - 17 + 0xa; + + // '0' - '9' + } else { + b = c; + } + assert(c >= 0 && b < mul, 'Invalid character'); + r += b; + } + return r; + } + + BN.prototype._parseBase = function _parseBase (number, base, start) { + // Initialize as zero + this.words = [0]; + this.length = 1; + + // Find length of limb in base + for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) { + limbLen++; + } + limbLen--; + limbPow = (limbPow / base) | 0; + + var total = number.length - start; + var mod = total % limbLen; + var end = Math.min(total, total - mod) + start; + + var word = 0; + for (var i = start; i < end; i += limbLen) { + word = parseBase(number, i, i + limbLen, base); + + this.imuln(limbPow); + if (this.words[0] + word < 0x4000000) { + this.words[0] += word; + } else { + this._iaddn(word); + } + } + + if (mod !== 0) { + var pow = 1; + word = parseBase(number, i, number.length, base); + + for (i = 0; i < mod; i++) { + pow *= base; + } + + this.imuln(pow); + if (this.words[0] + word < 0x4000000) { + this.words[0] += word; + } else { + this._iaddn(word); + } + } + + this._strip(); + }; + + BN.prototype.copy = function copy (dest) { + dest.words = new Array(this.length); + for (var i = 0; i < this.length; i++) { + dest.words[i] = this.words[i]; + } + dest.length = this.length; + dest.negative = this.negative; + dest.red = this.red; + }; + + function move (dest, src) { + dest.words = src.words; + dest.length = src.length; + dest.negative = src.negative; + dest.red = src.red; + } + + BN.prototype._move = function _move (dest) { + move(dest, this); + }; + + BN.prototype.clone = function clone () { + var r = new BN(null); + this.copy(r); + return r; + }; + + BN.prototype._expand = function _expand (size) { + while (this.length < size) { + this.words[this.length++] = 0; + } + return this; + }; + + // Remove leading `0` from `this` + BN.prototype._strip = function strip () { + while (this.length > 1 && this.words[this.length - 1] === 0) { + this.length--; + } + return this._normSign(); + }; + + BN.prototype._normSign = function _normSign () { + // -0 = 0 + if (this.length === 1 && this.words[0] === 0) { + this.negative = 0; + } + return this; + }; + + // Check Symbol.for because not everywhere where Symbol defined + // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol#Browser_compatibility + if (typeof Symbol !== 'undefined' && typeof Symbol.for === 'function') { + try { + BN.prototype[Symbol.for('nodejs.util.inspect.custom')] = inspect; + } catch (e) { + BN.prototype.inspect = inspect; + } + } else { + BN.prototype.inspect = inspect; + } + + function inspect () { + return (this.red ? ''; + } + + /* + + var zeros = []; + var groupSizes = []; + var groupBases = []; + + var s = ''; + var i = -1; + while (++i < BN.wordSize) { + zeros[i] = s; + s += '0'; + } + groupSizes[0] = 0; + groupSizes[1] = 0; + groupBases[0] = 0; + groupBases[1] = 0; + var base = 2 - 1; + while (++base < 36 + 1) { + var groupSize = 0; + var groupBase = 1; + while (groupBase < (1 << BN.wordSize) / base) { + groupBase *= base; + groupSize += 1; + } + groupSizes[base] = groupSize; + groupBases[base] = groupBase; + } + + */ + + var zeros = [ + '', + '0', + '00', + '000', + '0000', + '00000', + '000000', + '0000000', + '00000000', + '000000000', + '0000000000', + '00000000000', + '000000000000', + '0000000000000', + '00000000000000', + '000000000000000', + '0000000000000000', + '00000000000000000', + '000000000000000000', + '0000000000000000000', + '00000000000000000000', + '000000000000000000000', + '0000000000000000000000', + '00000000000000000000000', + '000000000000000000000000', + '0000000000000000000000000' + ]; + + var groupSizes = [ + 0, 0, + 25, 16, 12, 11, 10, 9, 8, + 8, 7, 7, 7, 7, 6, 6, + 6, 6, 6, 6, 6, 5, 5, + 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5 + ]; + + var groupBases = [ + 0, 0, + 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216, + 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625, + 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632, + 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149, + 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176 + ]; + + BN.prototype.toString = function toString (base, padding) { + base = base || 10; + padding = padding | 0 || 1; + + var out; + if (base === 16 || base === 'hex') { + out = ''; + var off = 0; + var carry = 0; + for (var i = 0; i < this.length; i++) { + var w = this.words[i]; + var word = (((w << off) | carry) & 0xffffff).toString(16); + carry = (w >>> (24 - off)) & 0xffffff; + off += 2; + if (off >= 26) { + off -= 26; + i--; + } + if (carry !== 0 || i !== this.length - 1) { + out = zeros[6 - word.length] + word + out; + } else { + out = word + out; + } + } + if (carry !== 0) { + out = carry.toString(16) + out; + } + while (out.length % padding !== 0) { + out = '0' + out; + } + if (this.negative !== 0) { + out = '-' + out; + } + return out; + } + + if (base === (base | 0) && base >= 2 && base <= 36) { + // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base)); + var groupSize = groupSizes[base]; + // var groupBase = Math.pow(base, groupSize); + var groupBase = groupBases[base]; + out = ''; + var c = this.clone(); + c.negative = 0; + while (!c.isZero()) { + var r = c.modrn(groupBase).toString(base); + c = c.idivn(groupBase); + + if (!c.isZero()) { + out = zeros[groupSize - r.length] + r + out; + } else { + out = r + out; + } + } + if (this.isZero()) { + out = '0' + out; + } + while (out.length % padding !== 0) { + out = '0' + out; + } + if (this.negative !== 0) { + out = '-' + out; + } + return out; + } + + assert(false, 'Base should be between 2 and 36'); + }; + + BN.prototype.toNumber = function toNumber () { + var ret = this.words[0]; + if (this.length === 2) { + ret += this.words[1] * 0x4000000; + } else if (this.length === 3 && this.words[2] === 0x01) { + // NOTE: at this stage it is known that the top bit is set + ret += 0x10000000000000 + (this.words[1] * 0x4000000); + } else if (this.length > 2) { + assert(false, 'Number can only safely store up to 53 bits'); + } + return (this.negative !== 0) ? -ret : ret; + }; + + BN.prototype.toJSON = function toJSON () { + return this.toString(16, 2); + }; + + if (Buffer) { + BN.prototype.toBuffer = function toBuffer (endian, length) { + return this.toArrayLike(Buffer, endian, length); + }; + } + + BN.prototype.toArray = function toArray (endian, length) { + return this.toArrayLike(Array, endian, length); + }; + + var allocate = function allocate (ArrayType, size) { + if (ArrayType.allocUnsafe) { + return ArrayType.allocUnsafe(size); + } + return new ArrayType(size); + }; + + BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) { + this._strip(); + + var byteLength = this.byteLength(); + var reqLength = length || Math.max(1, byteLength); + assert(byteLength <= reqLength, 'byte array longer than desired length'); + assert(reqLength > 0, 'Requested array length <= 0'); + + var res = allocate(ArrayType, reqLength); + var postfix = endian === 'le' ? 'LE' : 'BE'; + this['_toArrayLike' + postfix](res, byteLength); + return res; + }; + + BN.prototype._toArrayLikeLE = function _toArrayLikeLE (res, byteLength) { + var position = 0; + var carry = 0; + + for (var i = 0, shift = 0; i < this.length; i++) { + var word = (this.words[i] << shift) | carry; + + res[position++] = word & 0xff; + if (position < res.length) { + res[position++] = (word >> 8) & 0xff; + } + if (position < res.length) { + res[position++] = (word >> 16) & 0xff; + } + + if (shift === 6) { + if (position < res.length) { + res[position++] = (word >> 24) & 0xff; + } + carry = 0; + shift = 0; + } else { + carry = word >>> 24; + shift += 2; + } + } + + if (position < res.length) { + res[position++] = carry; + + while (position < res.length) { + res[position++] = 0; + } + } + }; + + BN.prototype._toArrayLikeBE = function _toArrayLikeBE (res, byteLength) { + var position = res.length - 1; + var carry = 0; + + for (var i = 0, shift = 0; i < this.length; i++) { + var word = (this.words[i] << shift) | carry; + + res[position--] = word & 0xff; + if (position >= 0) { + res[position--] = (word >> 8) & 0xff; + } + if (position >= 0) { + res[position--] = (word >> 16) & 0xff; + } + + if (shift === 6) { + if (position >= 0) { + res[position--] = (word >> 24) & 0xff; + } + carry = 0; + shift = 0; + } else { + carry = word >>> 24; + shift += 2; + } + } + + if (position >= 0) { + res[position--] = carry; + + while (position >= 0) { + res[position--] = 0; + } + } + }; + + if (Math.clz32) { + BN.prototype._countBits = function _countBits (w) { + return 32 - Math.clz32(w); + }; + } else { + BN.prototype._countBits = function _countBits (w) { + var t = w; + var r = 0; + if (t >= 0x1000) { + r += 13; + t >>>= 13; + } + if (t >= 0x40) { + r += 7; + t >>>= 7; + } + if (t >= 0x8) { + r += 4; + t >>>= 4; + } + if (t >= 0x02) { + r += 2; + t >>>= 2; + } + return r + t; + }; + } + + BN.prototype._zeroBits = function _zeroBits (w) { + // Short-cut + if (w === 0) return 26; + + var t = w; + var r = 0; + if ((t & 0x1fff) === 0) { + r += 13; + t >>>= 13; + } + if ((t & 0x7f) === 0) { + r += 7; + t >>>= 7; + } + if ((t & 0xf) === 0) { + r += 4; + t >>>= 4; + } + if ((t & 0x3) === 0) { + r += 2; + t >>>= 2; + } + if ((t & 0x1) === 0) { + r++; + } + return r; + }; + + // Return number of used bits in a BN + BN.prototype.bitLength = function bitLength () { + var w = this.words[this.length - 1]; + var hi = this._countBits(w); + return (this.length - 1) * 26 + hi; + }; + + function toBitArray (num) { + var w = new Array(num.bitLength()); + + for (var bit = 0; bit < w.length; bit++) { + var off = (bit / 26) | 0; + var wbit = bit % 26; + + w[bit] = (num.words[off] >>> wbit) & 0x01; + } + + return w; + } + + // Number of trailing zero bits + BN.prototype.zeroBits = function zeroBits () { + if (this.isZero()) return 0; + + var r = 0; + for (var i = 0; i < this.length; i++) { + var b = this._zeroBits(this.words[i]); + r += b; + if (b !== 26) break; + } + return r; + }; + + BN.prototype.byteLength = function byteLength () { + return Math.ceil(this.bitLength() / 8); + }; + + BN.prototype.toTwos = function toTwos (width) { + if (this.negative !== 0) { + return this.abs().inotn(width).iaddn(1); + } + return this.clone(); + }; + + BN.prototype.fromTwos = function fromTwos (width) { + if (this.testn(width - 1)) { + return this.notn(width).iaddn(1).ineg(); + } + return this.clone(); + }; + + BN.prototype.isNeg = function isNeg () { + return this.negative !== 0; + }; + + // Return negative clone of `this` + BN.prototype.neg = function neg () { + return this.clone().ineg(); + }; + + BN.prototype.ineg = function ineg () { + if (!this.isZero()) { + this.negative ^= 1; + } + + return this; + }; + + // Or `num` with `this` in-place + BN.prototype.iuor = function iuor (num) { + while (this.length < num.length) { + this.words[this.length++] = 0; + } + + for (var i = 0; i < num.length; i++) { + this.words[i] = this.words[i] | num.words[i]; + } + + return this._strip(); + }; + + BN.prototype.ior = function ior (num) { + assert((this.negative | num.negative) === 0); + return this.iuor(num); + }; + + // Or `num` with `this` + BN.prototype.or = function or (num) { + if (this.length > num.length) return this.clone().ior(num); + return num.clone().ior(this); + }; + + BN.prototype.uor = function uor (num) { + if (this.length > num.length) return this.clone().iuor(num); + return num.clone().iuor(this); + }; + + // And `num` with `this` in-place + BN.prototype.iuand = function iuand (num) { + // b = min-length(num, this) + var b; + if (this.length > num.length) { + b = num; + } else { + b = this; + } + + for (var i = 0; i < b.length; i++) { + this.words[i] = this.words[i] & num.words[i]; + } + + this.length = b.length; + + return this._strip(); + }; + + BN.prototype.iand = function iand (num) { + assert((this.negative | num.negative) === 0); + return this.iuand(num); + }; + + // And `num` with `this` + BN.prototype.and = function and (num) { + if (this.length > num.length) return this.clone().iand(num); + return num.clone().iand(this); + }; + + BN.prototype.uand = function uand (num) { + if (this.length > num.length) return this.clone().iuand(num); + return num.clone().iuand(this); + }; + + // Xor `num` with `this` in-place + BN.prototype.iuxor = function iuxor (num) { + // a.length > b.length + var a; + var b; + if (this.length > num.length) { + a = this; + b = num; + } else { + a = num; + b = this; + } + + for (var i = 0; i < b.length; i++) { + this.words[i] = a.words[i] ^ b.words[i]; + } + + if (this !== a) { + for (; i < a.length; i++) { + this.words[i] = a.words[i]; + } + } + + this.length = a.length; + + return this._strip(); + }; + + BN.prototype.ixor = function ixor (num) { + assert((this.negative | num.negative) === 0); + return this.iuxor(num); + }; + + // Xor `num` with `this` + BN.prototype.xor = function xor (num) { + if (this.length > num.length) return this.clone().ixor(num); + return num.clone().ixor(this); + }; + + BN.prototype.uxor = function uxor (num) { + if (this.length > num.length) return this.clone().iuxor(num); + return num.clone().iuxor(this); + }; + + // Not ``this`` with ``width`` bitwidth + BN.prototype.inotn = function inotn (width) { + assert(typeof width === 'number' && width >= 0); + + var bytesNeeded = Math.ceil(width / 26) | 0; + var bitsLeft = width % 26; + + // Extend the buffer with leading zeroes + this._expand(bytesNeeded); + + if (bitsLeft > 0) { + bytesNeeded--; + } + + // Handle complete words + for (var i = 0; i < bytesNeeded; i++) { + this.words[i] = ~this.words[i] & 0x3ffffff; + } + + // Handle the residue + if (bitsLeft > 0) { + this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft)); + } + + // And remove leading zeroes + return this._strip(); + }; + + BN.prototype.notn = function notn (width) { + return this.clone().inotn(width); + }; + + // Set `bit` of `this` + BN.prototype.setn = function setn (bit, val) { + assert(typeof bit === 'number' && bit >= 0); + + var off = (bit / 26) | 0; + var wbit = bit % 26; + + this._expand(off + 1); + + if (val) { + this.words[off] = this.words[off] | (1 << wbit); + } else { + this.words[off] = this.words[off] & ~(1 << wbit); + } + + return this._strip(); + }; + + // Add `num` to `this` in-place + BN.prototype.iadd = function iadd (num) { + var r; + + // negative + positive + if (this.negative !== 0 && num.negative === 0) { + this.negative = 0; + r = this.isub(num); + this.negative ^= 1; + return this._normSign(); + + // positive + negative + } else if (this.negative === 0 && num.negative !== 0) { + num.negative = 0; + r = this.isub(num); + num.negative = 1; + return r._normSign(); + } + + // a.length > b.length + var a, b; + if (this.length > num.length) { + a = this; + b = num; + } else { + a = num; + b = this; + } + + var carry = 0; + for (var i = 0; i < b.length; i++) { + r = (a.words[i] | 0) + (b.words[i] | 0) + carry; + this.words[i] = r & 0x3ffffff; + carry = r >>> 26; + } + for (; carry !== 0 && i < a.length; i++) { + r = (a.words[i] | 0) + carry; + this.words[i] = r & 0x3ffffff; + carry = r >>> 26; + } + + this.length = a.length; + if (carry !== 0) { + this.words[this.length] = carry; + this.length++; + // Copy the rest of the words + } else if (a !== this) { + for (; i < a.length; i++) { + this.words[i] = a.words[i]; + } + } + + return this; + }; + + // Add `num` to `this` + BN.prototype.add = function add (num) { + var res; + if (num.negative !== 0 && this.negative === 0) { + num.negative = 0; + res = this.sub(num); + num.negative ^= 1; + return res; + } else if (num.negative === 0 && this.negative !== 0) { + this.negative = 0; + res = num.sub(this); + this.negative = 1; + return res; + } + + if (this.length > num.length) return this.clone().iadd(num); + + return num.clone().iadd(this); + }; + + // Subtract `num` from `this` in-place + BN.prototype.isub = function isub (num) { + // this - (-num) = this + num + if (num.negative !== 0) { + num.negative = 0; + var r = this.iadd(num); + num.negative = 1; + return r._normSign(); + + // -this - num = -(this + num) + } else if (this.negative !== 0) { + this.negative = 0; + this.iadd(num); + this.negative = 1; + return this._normSign(); + } + + // At this point both numbers are positive + var cmp = this.cmp(num); + + // Optimization - zeroify + if (cmp === 0) { + this.negative = 0; + this.length = 1; + this.words[0] = 0; + return this; + } + + // a > b + var a, b; + if (cmp > 0) { + a = this; + b = num; + } else { + a = num; + b = this; + } + + var carry = 0; + for (var i = 0; i < b.length; i++) { + r = (a.words[i] | 0) - (b.words[i] | 0) + carry; + carry = r >> 26; + this.words[i] = r & 0x3ffffff; + } + for (; carry !== 0 && i < a.length; i++) { + r = (a.words[i] | 0) + carry; + carry = r >> 26; + this.words[i] = r & 0x3ffffff; + } + + // Copy rest of the words + if (carry === 0 && i < a.length && a !== this) { + for (; i < a.length; i++) { + this.words[i] = a.words[i]; + } + } + + this.length = Math.max(this.length, i); + + if (a !== this) { + this.negative = 1; + } + + return this._strip(); + }; + + // Subtract `num` from `this` + BN.prototype.sub = function sub (num) { + return this.clone().isub(num); + }; + + function smallMulTo (self, num, out) { + out.negative = num.negative ^ self.negative; + var len = (self.length + num.length) | 0; + out.length = len; + len = (len - 1) | 0; + + // Peel one iteration (compiler can't do it, because of code complexity) + var a = self.words[0] | 0; + var b = num.words[0] | 0; + var r = a * b; + + var lo = r & 0x3ffffff; + var carry = (r / 0x4000000) | 0; + out.words[0] = lo; + + for (var k = 1; k < len; k++) { + // Sum all words with the same `i + j = k` and accumulate `ncarry`, + // note that ncarry could be >= 0x3ffffff + var ncarry = carry >>> 26; + var rword = carry & 0x3ffffff; + var maxJ = Math.min(k, num.length - 1); + for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) { + var i = (k - j) | 0; + a = self.words[i] | 0; + b = num.words[j] | 0; + r = a * b + rword; + ncarry += (r / 0x4000000) | 0; + rword = r & 0x3ffffff; + } + out.words[k] = rword | 0; + carry = ncarry | 0; + } + if (carry !== 0) { + out.words[k] = carry | 0; + } else { + out.length--; + } + + return out._strip(); + } + + // TODO(indutny): it may be reasonable to omit it for users who don't need + // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit + // multiplication (like elliptic secp256k1). + var comb10MulTo = function comb10MulTo (self, num, out) { + var a = self.words; + var b = num.words; + var o = out.words; + var c = 0; + var lo; + var mid; + var hi; + var a0 = a[0] | 0; + var al0 = a0 & 0x1fff; + var ah0 = a0 >>> 13; + var a1 = a[1] | 0; + var al1 = a1 & 0x1fff; + var ah1 = a1 >>> 13; + var a2 = a[2] | 0; + var al2 = a2 & 0x1fff; + var ah2 = a2 >>> 13; + var a3 = a[3] | 0; + var al3 = a3 & 0x1fff; + var ah3 = a3 >>> 13; + var a4 = a[4] | 0; + var al4 = a4 & 0x1fff; + var ah4 = a4 >>> 13; + var a5 = a[5] | 0; + var al5 = a5 & 0x1fff; + var ah5 = a5 >>> 13; + var a6 = a[6] | 0; + var al6 = a6 & 0x1fff; + var ah6 = a6 >>> 13; + var a7 = a[7] | 0; + var al7 = a7 & 0x1fff; + var ah7 = a7 >>> 13; + var a8 = a[8] | 0; + var al8 = a8 & 0x1fff; + var ah8 = a8 >>> 13; + var a9 = a[9] | 0; + var al9 = a9 & 0x1fff; + var ah9 = a9 >>> 13; + var b0 = b[0] | 0; + var bl0 = b0 & 0x1fff; + var bh0 = b0 >>> 13; + var b1 = b[1] | 0; + var bl1 = b1 & 0x1fff; + var bh1 = b1 >>> 13; + var b2 = b[2] | 0; + var bl2 = b2 & 0x1fff; + var bh2 = b2 >>> 13; + var b3 = b[3] | 0; + var bl3 = b3 & 0x1fff; + var bh3 = b3 >>> 13; + var b4 = b[4] | 0; + var bl4 = b4 & 0x1fff; + var bh4 = b4 >>> 13; + var b5 = b[5] | 0; + var bl5 = b5 & 0x1fff; + var bh5 = b5 >>> 13; + var b6 = b[6] | 0; + var bl6 = b6 & 0x1fff; + var bh6 = b6 >>> 13; + var b7 = b[7] | 0; + var bl7 = b7 & 0x1fff; + var bh7 = b7 >>> 13; + var b8 = b[8] | 0; + var bl8 = b8 & 0x1fff; + var bh8 = b8 >>> 13; + var b9 = b[9] | 0; + var bl9 = b9 & 0x1fff; + var bh9 = b9 >>> 13; + + out.negative = self.negative ^ num.negative; + out.length = 19; + /* k = 0 */ + lo = Math.imul(al0, bl0); + mid = Math.imul(al0, bh0); + mid = (mid + Math.imul(ah0, bl0)) | 0; + hi = Math.imul(ah0, bh0); + var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0; + w0 &= 0x3ffffff; + /* k = 1 */ + lo = Math.imul(al1, bl0); + mid = Math.imul(al1, bh0); + mid = (mid + Math.imul(ah1, bl0)) | 0; + hi = Math.imul(ah1, bh0); + lo = (lo + Math.imul(al0, bl1)) | 0; + mid = (mid + Math.imul(al0, bh1)) | 0; + mid = (mid + Math.imul(ah0, bl1)) | 0; + hi = (hi + Math.imul(ah0, bh1)) | 0; + var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0; + w1 &= 0x3ffffff; + /* k = 2 */ + lo = Math.imul(al2, bl0); + mid = Math.imul(al2, bh0); + mid = (mid + Math.imul(ah2, bl0)) | 0; + hi = Math.imul(ah2, bh0); + lo = (lo + Math.imul(al1, bl1)) | 0; + mid = (mid + Math.imul(al1, bh1)) | 0; + mid = (mid + Math.imul(ah1, bl1)) | 0; + hi = (hi + Math.imul(ah1, bh1)) | 0; + lo = (lo + Math.imul(al0, bl2)) | 0; + mid = (mid + Math.imul(al0, bh2)) | 0; + mid = (mid + Math.imul(ah0, bl2)) | 0; + hi = (hi + Math.imul(ah0, bh2)) | 0; + var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0; + w2 &= 0x3ffffff; + /* k = 3 */ + lo = Math.imul(al3, bl0); + mid = Math.imul(al3, bh0); + mid = (mid + Math.imul(ah3, bl0)) | 0; + hi = Math.imul(ah3, bh0); + lo = (lo + Math.imul(al2, bl1)) | 0; + mid = (mid + Math.imul(al2, bh1)) | 0; + mid = (mid + Math.imul(ah2, bl1)) | 0; + hi = (hi + Math.imul(ah2, bh1)) | 0; + lo = (lo + Math.imul(al1, bl2)) | 0; + mid = (mid + Math.imul(al1, bh2)) | 0; + mid = (mid + Math.imul(ah1, bl2)) | 0; + hi = (hi + Math.imul(ah1, bh2)) | 0; + lo = (lo + Math.imul(al0, bl3)) | 0; + mid = (mid + Math.imul(al0, bh3)) | 0; + mid = (mid + Math.imul(ah0, bl3)) | 0; + hi = (hi + Math.imul(ah0, bh3)) | 0; + var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0; + w3 &= 0x3ffffff; + /* k = 4 */ + lo = Math.imul(al4, bl0); + mid = Math.imul(al4, bh0); + mid = (mid + Math.imul(ah4, bl0)) | 0; + hi = Math.imul(ah4, bh0); + lo = (lo + Math.imul(al3, bl1)) | 0; + mid = (mid + Math.imul(al3, bh1)) | 0; + mid = (mid + Math.imul(ah3, bl1)) | 0; + hi = (hi + Math.imul(ah3, bh1)) | 0; + lo = (lo + Math.imul(al2, bl2)) | 0; + mid = (mid + Math.imul(al2, bh2)) | 0; + mid = (mid + Math.imul(ah2, bl2)) | 0; + hi = (hi + Math.imul(ah2, bh2)) | 0; + lo = (lo + Math.imul(al1, bl3)) | 0; + mid = (mid + Math.imul(al1, bh3)) | 0; + mid = (mid + Math.imul(ah1, bl3)) | 0; + hi = (hi + Math.imul(ah1, bh3)) | 0; + lo = (lo + Math.imul(al0, bl4)) | 0; + mid = (mid + Math.imul(al0, bh4)) | 0; + mid = (mid + Math.imul(ah0, bl4)) | 0; + hi = (hi + Math.imul(ah0, bh4)) | 0; + var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0; + w4 &= 0x3ffffff; + /* k = 5 */ + lo = Math.imul(al5, bl0); + mid = Math.imul(al5, bh0); + mid = (mid + Math.imul(ah5, bl0)) | 0; + hi = Math.imul(ah5, bh0); + lo = (lo + Math.imul(al4, bl1)) | 0; + mid = (mid + Math.imul(al4, bh1)) | 0; + mid = (mid + Math.imul(ah4, bl1)) | 0; + hi = (hi + Math.imul(ah4, bh1)) | 0; + lo = (lo + Math.imul(al3, bl2)) | 0; + mid = (mid + Math.imul(al3, bh2)) | 0; + mid = (mid + Math.imul(ah3, bl2)) | 0; + hi = (hi + Math.imul(ah3, bh2)) | 0; + lo = (lo + Math.imul(al2, bl3)) | 0; + mid = (mid + Math.imul(al2, bh3)) | 0; + mid = (mid + Math.imul(ah2, bl3)) | 0; + hi = (hi + Math.imul(ah2, bh3)) | 0; + lo = (lo + Math.imul(al1, bl4)) | 0; + mid = (mid + Math.imul(al1, bh4)) | 0; + mid = (mid + Math.imul(ah1, bl4)) | 0; + hi = (hi + Math.imul(ah1, bh4)) | 0; + lo = (lo + Math.imul(al0, bl5)) | 0; + mid = (mid + Math.imul(al0, bh5)) | 0; + mid = (mid + Math.imul(ah0, bl5)) | 0; + hi = (hi + Math.imul(ah0, bh5)) | 0; + var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0; + w5 &= 0x3ffffff; + /* k = 6 */ + lo = Math.imul(al6, bl0); + mid = Math.imul(al6, bh0); + mid = (mid + Math.imul(ah6, bl0)) | 0; + hi = Math.imul(ah6, bh0); + lo = (lo + Math.imul(al5, bl1)) | 0; + mid = (mid + Math.imul(al5, bh1)) | 0; + mid = (mid + Math.imul(ah5, bl1)) | 0; + hi = (hi + Math.imul(ah5, bh1)) | 0; + lo = (lo + Math.imul(al4, bl2)) | 0; + mid = (mid + Math.imul(al4, bh2)) | 0; + mid = (mid + Math.imul(ah4, bl2)) | 0; + hi = (hi + Math.imul(ah4, bh2)) | 0; + lo = (lo + Math.imul(al3, bl3)) | 0; + mid = (mid + Math.imul(al3, bh3)) | 0; + mid = (mid + Math.imul(ah3, bl3)) | 0; + hi = (hi + Math.imul(ah3, bh3)) | 0; + lo = (lo + Math.imul(al2, bl4)) | 0; + mid = (mid + Math.imul(al2, bh4)) | 0; + mid = (mid + Math.imul(ah2, bl4)) | 0; + hi = (hi + Math.imul(ah2, bh4)) | 0; + lo = (lo + Math.imul(al1, bl5)) | 0; + mid = (mid + Math.imul(al1, bh5)) | 0; + mid = (mid + Math.imul(ah1, bl5)) | 0; + hi = (hi + Math.imul(ah1, bh5)) | 0; + lo = (lo + Math.imul(al0, bl6)) | 0; + mid = (mid + Math.imul(al0, bh6)) | 0; + mid = (mid + Math.imul(ah0, bl6)) | 0; + hi = (hi + Math.imul(ah0, bh6)) | 0; + var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0; + w6 &= 0x3ffffff; + /* k = 7 */ + lo = Math.imul(al7, bl0); + mid = Math.imul(al7, bh0); + mid = (mid + Math.imul(ah7, bl0)) | 0; + hi = Math.imul(ah7, bh0); + lo = (lo + Math.imul(al6, bl1)) | 0; + mid = (mid + Math.imul(al6, bh1)) | 0; + mid = (mid + Math.imul(ah6, bl1)) | 0; + hi = (hi + Math.imul(ah6, bh1)) | 0; + lo = (lo + Math.imul(al5, bl2)) | 0; + mid = (mid + Math.imul(al5, bh2)) | 0; + mid = (mid + Math.imul(ah5, bl2)) | 0; + hi = (hi + Math.imul(ah5, bh2)) | 0; + lo = (lo + Math.imul(al4, bl3)) | 0; + mid = (mid + Math.imul(al4, bh3)) | 0; + mid = (mid + Math.imul(ah4, bl3)) | 0; + hi = (hi + Math.imul(ah4, bh3)) | 0; + lo = (lo + Math.imul(al3, bl4)) | 0; + mid = (mid + Math.imul(al3, bh4)) | 0; + mid = (mid + Math.imul(ah3, bl4)) | 0; + hi = (hi + Math.imul(ah3, bh4)) | 0; + lo = (lo + Math.imul(al2, bl5)) | 0; + mid = (mid + Math.imul(al2, bh5)) | 0; + mid = (mid + Math.imul(ah2, bl5)) | 0; + hi = (hi + Math.imul(ah2, bh5)) | 0; + lo = (lo + Math.imul(al1, bl6)) | 0; + mid = (mid + Math.imul(al1, bh6)) | 0; + mid = (mid + Math.imul(ah1, bl6)) | 0; + hi = (hi + Math.imul(ah1, bh6)) | 0; + lo = (lo + Math.imul(al0, bl7)) | 0; + mid = (mid + Math.imul(al0, bh7)) | 0; + mid = (mid + Math.imul(ah0, bl7)) | 0; + hi = (hi + Math.imul(ah0, bh7)) | 0; + var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0; + w7 &= 0x3ffffff; + /* k = 8 */ + lo = Math.imul(al8, bl0); + mid = Math.imul(al8, bh0); + mid = (mid + Math.imul(ah8, bl0)) | 0; + hi = Math.imul(ah8, bh0); + lo = (lo + Math.imul(al7, bl1)) | 0; + mid = (mid + Math.imul(al7, bh1)) | 0; + mid = (mid + Math.imul(ah7, bl1)) | 0; + hi = (hi + Math.imul(ah7, bh1)) | 0; + lo = (lo + Math.imul(al6, bl2)) | 0; + mid = (mid + Math.imul(al6, bh2)) | 0; + mid = (mid + Math.imul(ah6, bl2)) | 0; + hi = (hi + Math.imul(ah6, bh2)) | 0; + lo = (lo + Math.imul(al5, bl3)) | 0; + mid = (mid + Math.imul(al5, bh3)) | 0; + mid = (mid + Math.imul(ah5, bl3)) | 0; + hi = (hi + Math.imul(ah5, bh3)) | 0; + lo = (lo + Math.imul(al4, bl4)) | 0; + mid = (mid + Math.imul(al4, bh4)) | 0; + mid = (mid + Math.imul(ah4, bl4)) | 0; + hi = (hi + Math.imul(ah4, bh4)) | 0; + lo = (lo + Math.imul(al3, bl5)) | 0; + mid = (mid + Math.imul(al3, bh5)) | 0; + mid = (mid + Math.imul(ah3, bl5)) | 0; + hi = (hi + Math.imul(ah3, bh5)) | 0; + lo = (lo + Math.imul(al2, bl6)) | 0; + mid = (mid + Math.imul(al2, bh6)) | 0; + mid = (mid + Math.imul(ah2, bl6)) | 0; + hi = (hi + Math.imul(ah2, bh6)) | 0; + lo = (lo + Math.imul(al1, bl7)) | 0; + mid = (mid + Math.imul(al1, bh7)) | 0; + mid = (mid + Math.imul(ah1, bl7)) | 0; + hi = (hi + Math.imul(ah1, bh7)) | 0; + lo = (lo + Math.imul(al0, bl8)) | 0; + mid = (mid + Math.imul(al0, bh8)) | 0; + mid = (mid + Math.imul(ah0, bl8)) | 0; + hi = (hi + Math.imul(ah0, bh8)) | 0; + var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0; + w8 &= 0x3ffffff; + /* k = 9 */ + lo = Math.imul(al9, bl0); + mid = Math.imul(al9, bh0); + mid = (mid + Math.imul(ah9, bl0)) | 0; + hi = Math.imul(ah9, bh0); + lo = (lo + Math.imul(al8, bl1)) | 0; + mid = (mid + Math.imul(al8, bh1)) | 0; + mid = (mid + Math.imul(ah8, bl1)) | 0; + hi = (hi + Math.imul(ah8, bh1)) | 0; + lo = (lo + Math.imul(al7, bl2)) | 0; + mid = (mid + Math.imul(al7, bh2)) | 0; + mid = (mid + Math.imul(ah7, bl2)) | 0; + hi = (hi + Math.imul(ah7, bh2)) | 0; + lo = (lo + Math.imul(al6, bl3)) | 0; + mid = (mid + Math.imul(al6, bh3)) | 0; + mid = (mid + Math.imul(ah6, bl3)) | 0; + hi = (hi + Math.imul(ah6, bh3)) | 0; + lo = (lo + Math.imul(al5, bl4)) | 0; + mid = (mid + Math.imul(al5, bh4)) | 0; + mid = (mid + Math.imul(ah5, bl4)) | 0; + hi = (hi + Math.imul(ah5, bh4)) | 0; + lo = (lo + Math.imul(al4, bl5)) | 0; + mid = (mid + Math.imul(al4, bh5)) | 0; + mid = (mid + Math.imul(ah4, bl5)) | 0; + hi = (hi + Math.imul(ah4, bh5)) | 0; + lo = (lo + Math.imul(al3, bl6)) | 0; + mid = (mid + Math.imul(al3, bh6)) | 0; + mid = (mid + Math.imul(ah3, bl6)) | 0; + hi = (hi + Math.imul(ah3, bh6)) | 0; + lo = (lo + Math.imul(al2, bl7)) | 0; + mid = (mid + Math.imul(al2, bh7)) | 0; + mid = (mid + Math.imul(ah2, bl7)) | 0; + hi = (hi + Math.imul(ah2, bh7)) | 0; + lo = (lo + Math.imul(al1, bl8)) | 0; + mid = (mid + Math.imul(al1, bh8)) | 0; + mid = (mid + Math.imul(ah1, bl8)) | 0; + hi = (hi + Math.imul(ah1, bh8)) | 0; + lo = (lo + Math.imul(al0, bl9)) | 0; + mid = (mid + Math.imul(al0, bh9)) | 0; + mid = (mid + Math.imul(ah0, bl9)) | 0; + hi = (hi + Math.imul(ah0, bh9)) | 0; + var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0; + w9 &= 0x3ffffff; + /* k = 10 */ + lo = Math.imul(al9, bl1); + mid = Math.imul(al9, bh1); + mid = (mid + Math.imul(ah9, bl1)) | 0; + hi = Math.imul(ah9, bh1); + lo = (lo + Math.imul(al8, bl2)) | 0; + mid = (mid + Math.imul(al8, bh2)) | 0; + mid = (mid + Math.imul(ah8, bl2)) | 0; + hi = (hi + Math.imul(ah8, bh2)) | 0; + lo = (lo + Math.imul(al7, bl3)) | 0; + mid = (mid + Math.imul(al7, bh3)) | 0; + mid = (mid + Math.imul(ah7, bl3)) | 0; + hi = (hi + Math.imul(ah7, bh3)) | 0; + lo = (lo + Math.imul(al6, bl4)) | 0; + mid = (mid + Math.imul(al6, bh4)) | 0; + mid = (mid + Math.imul(ah6, bl4)) | 0; + hi = (hi + Math.imul(ah6, bh4)) | 0; + lo = (lo + Math.imul(al5, bl5)) | 0; + mid = (mid + Math.imul(al5, bh5)) | 0; + mid = (mid + Math.imul(ah5, bl5)) | 0; + hi = (hi + Math.imul(ah5, bh5)) | 0; + lo = (lo + Math.imul(al4, bl6)) | 0; + mid = (mid + Math.imul(al4, bh6)) | 0; + mid = (mid + Math.imul(ah4, bl6)) | 0; + hi = (hi + Math.imul(ah4, bh6)) | 0; + lo = (lo + Math.imul(al3, bl7)) | 0; + mid = (mid + Math.imul(al3, bh7)) | 0; + mid = (mid + Math.imul(ah3, bl7)) | 0; + hi = (hi + Math.imul(ah3, bh7)) | 0; + lo = (lo + Math.imul(al2, bl8)) | 0; + mid = (mid + Math.imul(al2, bh8)) | 0; + mid = (mid + Math.imul(ah2, bl8)) | 0; + hi = (hi + Math.imul(ah2, bh8)) | 0; + lo = (lo + Math.imul(al1, bl9)) | 0; + mid = (mid + Math.imul(al1, bh9)) | 0; + mid = (mid + Math.imul(ah1, bl9)) | 0; + hi = (hi + Math.imul(ah1, bh9)) | 0; + var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0; + w10 &= 0x3ffffff; + /* k = 11 */ + lo = Math.imul(al9, bl2); + mid = Math.imul(al9, bh2); + mid = (mid + Math.imul(ah9, bl2)) | 0; + hi = Math.imul(ah9, bh2); + lo = (lo + Math.imul(al8, bl3)) | 0; + mid = (mid + Math.imul(al8, bh3)) | 0; + mid = (mid + Math.imul(ah8, bl3)) | 0; + hi = (hi + Math.imul(ah8, bh3)) | 0; + lo = (lo + Math.imul(al7, bl4)) | 0; + mid = (mid + Math.imul(al7, bh4)) | 0; + mid = (mid + Math.imul(ah7, bl4)) | 0; + hi = (hi + Math.imul(ah7, bh4)) | 0; + lo = (lo + Math.imul(al6, bl5)) | 0; + mid = (mid + Math.imul(al6, bh5)) | 0; + mid = (mid + Math.imul(ah6, bl5)) | 0; + hi = (hi + Math.imul(ah6, bh5)) | 0; + lo = (lo + Math.imul(al5, bl6)) | 0; + mid = (mid + Math.imul(al5, bh6)) | 0; + mid = (mid + Math.imul(ah5, bl6)) | 0; + hi = (hi + Math.imul(ah5, bh6)) | 0; + lo = (lo + Math.imul(al4, bl7)) | 0; + mid = (mid + Math.imul(al4, bh7)) | 0; + mid = (mid + Math.imul(ah4, bl7)) | 0; + hi = (hi + Math.imul(ah4, bh7)) | 0; + lo = (lo + Math.imul(al3, bl8)) | 0; + mid = (mid + Math.imul(al3, bh8)) | 0; + mid = (mid + Math.imul(ah3, bl8)) | 0; + hi = (hi + Math.imul(ah3, bh8)) | 0; + lo = (lo + Math.imul(al2, bl9)) | 0; + mid = (mid + Math.imul(al2, bh9)) | 0; + mid = (mid + Math.imul(ah2, bl9)) | 0; + hi = (hi + Math.imul(ah2, bh9)) | 0; + var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0; + w11 &= 0x3ffffff; + /* k = 12 */ + lo = Math.imul(al9, bl3); + mid = Math.imul(al9, bh3); + mid = (mid + Math.imul(ah9, bl3)) | 0; + hi = Math.imul(ah9, bh3); + lo = (lo + Math.imul(al8, bl4)) | 0; + mid = (mid + Math.imul(al8, bh4)) | 0; + mid = (mid + Math.imul(ah8, bl4)) | 0; + hi = (hi + Math.imul(ah8, bh4)) | 0; + lo = (lo + Math.imul(al7, bl5)) | 0; + mid = (mid + Math.imul(al7, bh5)) | 0; + mid = (mid + Math.imul(ah7, bl5)) | 0; + hi = (hi + Math.imul(ah7, bh5)) | 0; + lo = (lo + Math.imul(al6, bl6)) | 0; + mid = (mid + Math.imul(al6, bh6)) | 0; + mid = (mid + Math.imul(ah6, bl6)) | 0; + hi = (hi + Math.imul(ah6, bh6)) | 0; + lo = (lo + Math.imul(al5, bl7)) | 0; + mid = (mid + Math.imul(al5, bh7)) | 0; + mid = (mid + Math.imul(ah5, bl7)) | 0; + hi = (hi + Math.imul(ah5, bh7)) | 0; + lo = (lo + Math.imul(al4, bl8)) | 0; + mid = (mid + Math.imul(al4, bh8)) | 0; + mid = (mid + Math.imul(ah4, bl8)) | 0; + hi = (hi + Math.imul(ah4, bh8)) | 0; + lo = (lo + Math.imul(al3, bl9)) | 0; + mid = (mid + Math.imul(al3, bh9)) | 0; + mid = (mid + Math.imul(ah3, bl9)) | 0; + hi = (hi + Math.imul(ah3, bh9)) | 0; + var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0; + w12 &= 0x3ffffff; + /* k = 13 */ + lo = Math.imul(al9, bl4); + mid = Math.imul(al9, bh4); + mid = (mid + Math.imul(ah9, bl4)) | 0; + hi = Math.imul(ah9, bh4); + lo = (lo + Math.imul(al8, bl5)) | 0; + mid = (mid + Math.imul(al8, bh5)) | 0; + mid = (mid + Math.imul(ah8, bl5)) | 0; + hi = (hi + Math.imul(ah8, bh5)) | 0; + lo = (lo + Math.imul(al7, bl6)) | 0; + mid = (mid + Math.imul(al7, bh6)) | 0; + mid = (mid + Math.imul(ah7, bl6)) | 0; + hi = (hi + Math.imul(ah7, bh6)) | 0; + lo = (lo + Math.imul(al6, bl7)) | 0; + mid = (mid + Math.imul(al6, bh7)) | 0; + mid = (mid + Math.imul(ah6, bl7)) | 0; + hi = (hi + Math.imul(ah6, bh7)) | 0; + lo = (lo + Math.imul(al5, bl8)) | 0; + mid = (mid + Math.imul(al5, bh8)) | 0; + mid = (mid + Math.imul(ah5, bl8)) | 0; + hi = (hi + Math.imul(ah5, bh8)) | 0; + lo = (lo + Math.imul(al4, bl9)) | 0; + mid = (mid + Math.imul(al4, bh9)) | 0; + mid = (mid + Math.imul(ah4, bl9)) | 0; + hi = (hi + Math.imul(ah4, bh9)) | 0; + var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0; + w13 &= 0x3ffffff; + /* k = 14 */ + lo = Math.imul(al9, bl5); + mid = Math.imul(al9, bh5); + mid = (mid + Math.imul(ah9, bl5)) | 0; + hi = Math.imul(ah9, bh5); + lo = (lo + Math.imul(al8, bl6)) | 0; + mid = (mid + Math.imul(al8, bh6)) | 0; + mid = (mid + Math.imul(ah8, bl6)) | 0; + hi = (hi + Math.imul(ah8, bh6)) | 0; + lo = (lo + Math.imul(al7, bl7)) | 0; + mid = (mid + Math.imul(al7, bh7)) | 0; + mid = (mid + Math.imul(ah7, bl7)) | 0; + hi = (hi + Math.imul(ah7, bh7)) | 0; + lo = (lo + Math.imul(al6, bl8)) | 0; + mid = (mid + Math.imul(al6, bh8)) | 0; + mid = (mid + Math.imul(ah6, bl8)) | 0; + hi = (hi + Math.imul(ah6, bh8)) | 0; + lo = (lo + Math.imul(al5, bl9)) | 0; + mid = (mid + Math.imul(al5, bh9)) | 0; + mid = (mid + Math.imul(ah5, bl9)) | 0; + hi = (hi + Math.imul(ah5, bh9)) | 0; + var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0; + w14 &= 0x3ffffff; + /* k = 15 */ + lo = Math.imul(al9, bl6); + mid = Math.imul(al9, bh6); + mid = (mid + Math.imul(ah9, bl6)) | 0; + hi = Math.imul(ah9, bh6); + lo = (lo + Math.imul(al8, bl7)) | 0; + mid = (mid + Math.imul(al8, bh7)) | 0; + mid = (mid + Math.imul(ah8, bl7)) | 0; + hi = (hi + Math.imul(ah8, bh7)) | 0; + lo = (lo + Math.imul(al7, bl8)) | 0; + mid = (mid + Math.imul(al7, bh8)) | 0; + mid = (mid + Math.imul(ah7, bl8)) | 0; + hi = (hi + Math.imul(ah7, bh8)) | 0; + lo = (lo + Math.imul(al6, bl9)) | 0; + mid = (mid + Math.imul(al6, bh9)) | 0; + mid = (mid + Math.imul(ah6, bl9)) | 0; + hi = (hi + Math.imul(ah6, bh9)) | 0; + var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0; + w15 &= 0x3ffffff; + /* k = 16 */ + lo = Math.imul(al9, bl7); + mid = Math.imul(al9, bh7); + mid = (mid + Math.imul(ah9, bl7)) | 0; + hi = Math.imul(ah9, bh7); + lo = (lo + Math.imul(al8, bl8)) | 0; + mid = (mid + Math.imul(al8, bh8)) | 0; + mid = (mid + Math.imul(ah8, bl8)) | 0; + hi = (hi + Math.imul(ah8, bh8)) | 0; + lo = (lo + Math.imul(al7, bl9)) | 0; + mid = (mid + Math.imul(al7, bh9)) | 0; + mid = (mid + Math.imul(ah7, bl9)) | 0; + hi = (hi + Math.imul(ah7, bh9)) | 0; + var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0; + w16 &= 0x3ffffff; + /* k = 17 */ + lo = Math.imul(al9, bl8); + mid = Math.imul(al9, bh8); + mid = (mid + Math.imul(ah9, bl8)) | 0; + hi = Math.imul(ah9, bh8); + lo = (lo + Math.imul(al8, bl9)) | 0; + mid = (mid + Math.imul(al8, bh9)) | 0; + mid = (mid + Math.imul(ah8, bl9)) | 0; + hi = (hi + Math.imul(ah8, bh9)) | 0; + var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0; + w17 &= 0x3ffffff; + /* k = 18 */ + lo = Math.imul(al9, bl9); + mid = Math.imul(al9, bh9); + mid = (mid + Math.imul(ah9, bl9)) | 0; + hi = Math.imul(ah9, bh9); + var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0; + w18 &= 0x3ffffff; + o[0] = w0; + o[1] = w1; + o[2] = w2; + o[3] = w3; + o[4] = w4; + o[5] = w5; + o[6] = w6; + o[7] = w7; + o[8] = w8; + o[9] = w9; + o[10] = w10; + o[11] = w11; + o[12] = w12; + o[13] = w13; + o[14] = w14; + o[15] = w15; + o[16] = w16; + o[17] = w17; + o[18] = w18; + if (c !== 0) { + o[19] = c; + out.length++; + } + return out; + }; + + // Polyfill comb + if (!Math.imul) { + comb10MulTo = smallMulTo; + } + + function bigMulTo (self, num, out) { + out.negative = num.negative ^ self.negative; + out.length = self.length + num.length; + + var carry = 0; + var hncarry = 0; + for (var k = 0; k < out.length - 1; k++) { + // Sum all words with the same `i + j = k` and accumulate `ncarry`, + // note that ncarry could be >= 0x3ffffff + var ncarry = hncarry; + hncarry = 0; + var rword = carry & 0x3ffffff; + var maxJ = Math.min(k, num.length - 1); + for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) { + var i = k - j; + var a = self.words[i] | 0; + var b = num.words[j] | 0; + var r = a * b; + + var lo = r & 0x3ffffff; + ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0; + lo = (lo + rword) | 0; + rword = lo & 0x3ffffff; + ncarry = (ncarry + (lo >>> 26)) | 0; + + hncarry += ncarry >>> 26; + ncarry &= 0x3ffffff; + } + out.words[k] = rword; + carry = ncarry; + ncarry = hncarry; + } + if (carry !== 0) { + out.words[k] = carry; + } else { + out.length--; + } + + return out._strip(); + } + + function jumboMulTo (self, num, out) { + // Temporary disable, see https://github.com/indutny/bn.js/issues/211 + // var fftm = new FFTM(); + // return fftm.mulp(self, num, out); + return bigMulTo(self, num, out); + } + + BN.prototype.mulTo = function mulTo (num, out) { + var res; + var len = this.length + num.length; + if (this.length === 10 && num.length === 10) { + res = comb10MulTo(this, num, out); + } else if (len < 63) { + res = smallMulTo(this, num, out); + } else if (len < 1024) { + res = bigMulTo(this, num, out); + } else { + res = jumboMulTo(this, num, out); + } + + return res; + }; + + // Cooley-Tukey algorithm for FFT + // slightly revisited to rely on looping instead of recursion + + function FFTM (x, y) { + this.x = x; + this.y = y; + } + + FFTM.prototype.makeRBT = function makeRBT (N) { + var t = new Array(N); + var l = BN.prototype._countBits(N) - 1; + for (var i = 0; i < N; i++) { + t[i] = this.revBin(i, l, N); + } + + return t; + }; + + // Returns binary-reversed representation of `x` + FFTM.prototype.revBin = function revBin (x, l, N) { + if (x === 0 || x === N - 1) return x; + + var rb = 0; + for (var i = 0; i < l; i++) { + rb |= (x & 1) << (l - i - 1); + x >>= 1; + } + + return rb; + }; + + // Performs "tweedling" phase, therefore 'emulating' + // behaviour of the recursive algorithm + FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) { + for (var i = 0; i < N; i++) { + rtws[i] = rws[rbt[i]]; + itws[i] = iws[rbt[i]]; + } + }; + + FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) { + this.permute(rbt, rws, iws, rtws, itws, N); + + for (var s = 1; s < N; s <<= 1) { + var l = s << 1; + + var rtwdf = Math.cos(2 * Math.PI / l); + var itwdf = Math.sin(2 * Math.PI / l); + + for (var p = 0; p < N; p += l) { + var rtwdf_ = rtwdf; + var itwdf_ = itwdf; + + for (var j = 0; j < s; j++) { + var re = rtws[p + j]; + var ie = itws[p + j]; + + var ro = rtws[p + j + s]; + var io = itws[p + j + s]; + + var rx = rtwdf_ * ro - itwdf_ * io; + + io = rtwdf_ * io + itwdf_ * ro; + ro = rx; + + rtws[p + j] = re + ro; + itws[p + j] = ie + io; + + rtws[p + j + s] = re - ro; + itws[p + j + s] = ie - io; + + /* jshint maxdepth : false */ + if (j !== l) { + rx = rtwdf * rtwdf_ - itwdf * itwdf_; + + itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_; + rtwdf_ = rx; + } + } + } + } + }; + + FFTM.prototype.guessLen13b = function guessLen13b (n, m) { + var N = Math.max(m, n) | 1; + var odd = N & 1; + var i = 0; + for (N = N / 2 | 0; N; N = N >>> 1) { + i++; + } + + return 1 << i + 1 + odd; + }; + + FFTM.prototype.conjugate = function conjugate (rws, iws, N) { + if (N <= 1) return; + + for (var i = 0; i < N / 2; i++) { + var t = rws[i]; + + rws[i] = rws[N - i - 1]; + rws[N - i - 1] = t; + + t = iws[i]; + + iws[i] = -iws[N - i - 1]; + iws[N - i - 1] = -t; + } + }; + + FFTM.prototype.normalize13b = function normalize13b (ws, N) { + var carry = 0; + for (var i = 0; i < N / 2; i++) { + var w = Math.round(ws[2 * i + 1] / N) * 0x2000 + + Math.round(ws[2 * i] / N) + + carry; + + ws[i] = w & 0x3ffffff; + + if (w < 0x4000000) { + carry = 0; + } else { + carry = w / 0x4000000 | 0; + } + } + + return ws; + }; + + FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) { + var carry = 0; + for (var i = 0; i < len; i++) { + carry = carry + (ws[i] | 0); + + rws[2 * i] = carry & 0x1fff; carry = carry >>> 13; + rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13; + } + + // Pad with zeroes + for (i = 2 * len; i < N; ++i) { + rws[i] = 0; + } + + assert(carry === 0); + assert((carry & ~0x1fff) === 0); + }; + + FFTM.prototype.stub = function stub (N) { + var ph = new Array(N); + for (var i = 0; i < N; i++) { + ph[i] = 0; + } + + return ph; + }; + + FFTM.prototype.mulp = function mulp (x, y, out) { + var N = 2 * this.guessLen13b(x.length, y.length); + + var rbt = this.makeRBT(N); + + var _ = this.stub(N); + + var rws = new Array(N); + var rwst = new Array(N); + var iwst = new Array(N); + + var nrws = new Array(N); + var nrwst = new Array(N); + var niwst = new Array(N); + + var rmws = out.words; + rmws.length = N; + + this.convert13b(x.words, x.length, rws, N); + this.convert13b(y.words, y.length, nrws, N); + + this.transform(rws, _, rwst, iwst, N, rbt); + this.transform(nrws, _, nrwst, niwst, N, rbt); + + for (var i = 0; i < N; i++) { + var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i]; + iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i]; + rwst[i] = rx; + } + + this.conjugate(rwst, iwst, N); + this.transform(rwst, iwst, rmws, _, N, rbt); + this.conjugate(rmws, _, N); + this.normalize13b(rmws, N); + + out.negative = x.negative ^ y.negative; + out.length = x.length + y.length; + return out._strip(); + }; + + // Multiply `this` by `num` + BN.prototype.mul = function mul (num) { + var out = new BN(null); + out.words = new Array(this.length + num.length); + return this.mulTo(num, out); + }; + + // Multiply employing FFT + BN.prototype.mulf = function mulf (num) { + var out = new BN(null); + out.words = new Array(this.length + num.length); + return jumboMulTo(this, num, out); + }; + + // In-place Multiplication + BN.prototype.imul = function imul (num) { + return this.clone().mulTo(num, this); + }; + + BN.prototype.imuln = function imuln (num) { + var isNegNum = num < 0; + if (isNegNum) num = -num; + + assert(typeof num === 'number'); + assert(num < 0x4000000); + + // Carry + var carry = 0; + for (var i = 0; i < this.length; i++) { + var w = (this.words[i] | 0) * num; + var lo = (w & 0x3ffffff) + (carry & 0x3ffffff); + carry >>= 26; + carry += (w / 0x4000000) | 0; + // NOTE: lo is 27bit maximum + carry += lo >>> 26; + this.words[i] = lo & 0x3ffffff; + } + + if (carry !== 0) { + this.words[i] = carry; + this.length++; + } + + return isNegNum ? this.ineg() : this; + }; + + BN.prototype.muln = function muln (num) { + return this.clone().imuln(num); + }; + + // `this` * `this` + BN.prototype.sqr = function sqr () { + return this.mul(this); + }; + + // `this` * `this` in-place + BN.prototype.isqr = function isqr () { + return this.imul(this.clone()); + }; + + // Math.pow(`this`, `num`) + BN.prototype.pow = function pow (num) { + var w = toBitArray(num); + if (w.length === 0) return new BN(1); + + // Skip leading zeroes + var res = this; + for (var i = 0; i < w.length; i++, res = res.sqr()) { + if (w[i] !== 0) break; + } + + if (++i < w.length) { + for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) { + if (w[i] === 0) continue; + + res = res.mul(q); + } + } + + return res; + }; + + // Shift-left in-place + BN.prototype.iushln = function iushln (bits) { + assert(typeof bits === 'number' && bits >= 0); + var r = bits % 26; + var s = (bits - r) / 26; + var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r); + var i; + + if (r !== 0) { + var carry = 0; + + for (i = 0; i < this.length; i++) { + var newCarry = this.words[i] & carryMask; + var c = ((this.words[i] | 0) - newCarry) << r; + this.words[i] = c | carry; + carry = newCarry >>> (26 - r); + } + + if (carry) { + this.words[i] = carry; + this.length++; + } + } + + if (s !== 0) { + for (i = this.length - 1; i >= 0; i--) { + this.words[i + s] = this.words[i]; + } + + for (i = 0; i < s; i++) { + this.words[i] = 0; + } + + this.length += s; + } + + return this._strip(); + }; + + BN.prototype.ishln = function ishln (bits) { + // TODO(indutny): implement me + assert(this.negative === 0); + return this.iushln(bits); + }; + + // Shift-right in-place + // NOTE: `hint` is a lowest bit before trailing zeroes + // NOTE: if `extended` is present - it will be filled with destroyed bits + BN.prototype.iushrn = function iushrn (bits, hint, extended) { + assert(typeof bits === 'number' && bits >= 0); + var h; + if (hint) { + h = (hint - (hint % 26)) / 26; + } else { + h = 0; + } + + var r = bits % 26; + var s = Math.min((bits - r) / 26, this.length); + var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r); + var maskedWords = extended; + + h -= s; + h = Math.max(0, h); + + // Extended mode, copy masked part + if (maskedWords) { + for (var i = 0; i < s; i++) { + maskedWords.words[i] = this.words[i]; + } + maskedWords.length = s; + } + + if (s === 0) { + // No-op, we should not move anything at all + } else if (this.length > s) { + this.length -= s; + for (i = 0; i < this.length; i++) { + this.words[i] = this.words[i + s]; + } + } else { + this.words[0] = 0; + this.length = 1; + } + + var carry = 0; + for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) { + var word = this.words[i] | 0; + this.words[i] = (carry << (26 - r)) | (word >>> r); + carry = word & mask; + } + + // Push carried bits as a mask + if (maskedWords && carry !== 0) { + maskedWords.words[maskedWords.length++] = carry; + } + + if (this.length === 0) { + this.words[0] = 0; + this.length = 1; + } + + return this._strip(); + }; + + BN.prototype.ishrn = function ishrn (bits, hint, extended) { + // TODO(indutny): implement me + assert(this.negative === 0); + return this.iushrn(bits, hint, extended); + }; + + // Shift-left + BN.prototype.shln = function shln (bits) { + return this.clone().ishln(bits); + }; + + BN.prototype.ushln = function ushln (bits) { + return this.clone().iushln(bits); + }; + + // Shift-right + BN.prototype.shrn = function shrn (bits) { + return this.clone().ishrn(bits); + }; + + BN.prototype.ushrn = function ushrn (bits) { + return this.clone().iushrn(bits); + }; + + // Test if n bit is set + BN.prototype.testn = function testn (bit) { + assert(typeof bit === 'number' && bit >= 0); + var r = bit % 26; + var s = (bit - r) / 26; + var q = 1 << r; + + // Fast case: bit is much higher than all existing words + if (this.length <= s) return false; + + // Check bit and return + var w = this.words[s]; + + return !!(w & q); + }; + + // Return only lowers bits of number (in-place) + BN.prototype.imaskn = function imaskn (bits) { + assert(typeof bits === 'number' && bits >= 0); + var r = bits % 26; + var s = (bits - r) / 26; + + assert(this.negative === 0, 'imaskn works only with positive numbers'); + + if (this.length <= s) { + return this; + } + + if (r !== 0) { + s++; + } + this.length = Math.min(s, this.length); + + if (r !== 0) { + var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r); + this.words[this.length - 1] &= mask; + } + + return this._strip(); + }; + + // Return only lowers bits of number + BN.prototype.maskn = function maskn (bits) { + return this.clone().imaskn(bits); + }; + + // Add plain number `num` to `this` + BN.prototype.iaddn = function iaddn (num) { + assert(typeof num === 'number'); + assert(num < 0x4000000); + if (num < 0) return this.isubn(-num); + + // Possible sign change + if (this.negative !== 0) { + if (this.length === 1 && (this.words[0] | 0) <= num) { + this.words[0] = num - (this.words[0] | 0); + this.negative = 0; + return this; + } + + this.negative = 0; + this.isubn(num); + this.negative = 1; + return this; + } + + // Add without checks + return this._iaddn(num); + }; + + BN.prototype._iaddn = function _iaddn (num) { + this.words[0] += num; + + // Carry + for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) { + this.words[i] -= 0x4000000; + if (i === this.length - 1) { + this.words[i + 1] = 1; + } else { + this.words[i + 1]++; + } + } + this.length = Math.max(this.length, i + 1); + + return this; + }; + + // Subtract plain number `num` from `this` + BN.prototype.isubn = function isubn (num) { + assert(typeof num === 'number'); + assert(num < 0x4000000); + if (num < 0) return this.iaddn(-num); + + if (this.negative !== 0) { + this.negative = 0; + this.iaddn(num); + this.negative = 1; + return this; + } + + this.words[0] -= num; + + if (this.length === 1 && this.words[0] < 0) { + this.words[0] = -this.words[0]; + this.negative = 1; + } else { + // Carry + for (var i = 0; i < this.length && this.words[i] < 0; i++) { + this.words[i] += 0x4000000; + this.words[i + 1] -= 1; + } + } + + return this._strip(); + }; + + BN.prototype.addn = function addn (num) { + return this.clone().iaddn(num); + }; + + BN.prototype.subn = function subn (num) { + return this.clone().isubn(num); + }; + + BN.prototype.iabs = function iabs () { + this.negative = 0; + + return this; + }; + + BN.prototype.abs = function abs () { + return this.clone().iabs(); + }; + + BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) { + var len = num.length + shift; + var i; + + this._expand(len); + + var w; + var carry = 0; + for (i = 0; i < num.length; i++) { + w = (this.words[i + shift] | 0) + carry; + var right = (num.words[i] | 0) * mul; + w -= right & 0x3ffffff; + carry = (w >> 26) - ((right / 0x4000000) | 0); + this.words[i + shift] = w & 0x3ffffff; + } + for (; i < this.length - shift; i++) { + w = (this.words[i + shift] | 0) + carry; + carry = w >> 26; + this.words[i + shift] = w & 0x3ffffff; + } + + if (carry === 0) return this._strip(); + + // Subtraction overflow + assert(carry === -1); + carry = 0; + for (i = 0; i < this.length; i++) { + w = -(this.words[i] | 0) + carry; + carry = w >> 26; + this.words[i] = w & 0x3ffffff; + } + this.negative = 1; + + return this._strip(); + }; + + BN.prototype._wordDiv = function _wordDiv (num, mode) { + var shift = this.length - num.length; + + var a = this.clone(); + var b = num; + + // Normalize + var bhi = b.words[b.length - 1] | 0; + var bhiBits = this._countBits(bhi); + shift = 26 - bhiBits; + if (shift !== 0) { + b = b.ushln(shift); + a.iushln(shift); + bhi = b.words[b.length - 1] | 0; + } + + // Initialize quotient + var m = a.length - b.length; + var q; + + if (mode !== 'mod') { + q = new BN(null); + q.length = m + 1; + q.words = new Array(q.length); + for (var i = 0; i < q.length; i++) { + q.words[i] = 0; + } + } + + var diff = a.clone()._ishlnsubmul(b, 1, m); + if (diff.negative === 0) { + a = diff; + if (q) { + q.words[m] = 1; + } + } + + for (var j = m - 1; j >= 0; j--) { + var qj = (a.words[b.length + j] | 0) * 0x4000000 + + (a.words[b.length + j - 1] | 0); + + // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max + // (0x7ffffff) + qj = Math.min((qj / bhi) | 0, 0x3ffffff); + + a._ishlnsubmul(b, qj, j); + while (a.negative !== 0) { + qj--; + a.negative = 0; + a._ishlnsubmul(b, 1, j); + if (!a.isZero()) { + a.negative ^= 1; + } + } + if (q) { + q.words[j] = qj; + } + } + if (q) { + q._strip(); + } + a._strip(); + + // Denormalize + if (mode !== 'div' && shift !== 0) { + a.iushrn(shift); + } + + return { + div: q || null, + mod: a + }; + }; + + // NOTE: 1) `mode` can be set to `mod` to request mod only, + // to `div` to request div only, or be absent to + // request both div & mod + // 2) `positive` is true if unsigned mod is requested + BN.prototype.divmod = function divmod (num, mode, positive) { + assert(!num.isZero()); + + if (this.isZero()) { + return { + div: new BN(0), + mod: new BN(0) + }; + } + + var div, mod, res; + if (this.negative !== 0 && num.negative === 0) { + res = this.neg().divmod(num, mode); + + if (mode !== 'mod') { + div = res.div.neg(); + } + + if (mode !== 'div') { + mod = res.mod.neg(); + if (positive && mod.negative !== 0) { + mod.iadd(num); + } + } + + return { + div: div, + mod: mod + }; + } + + if (this.negative === 0 && num.negative !== 0) { + res = this.divmod(num.neg(), mode); + + if (mode !== 'mod') { + div = res.div.neg(); + } + + return { + div: div, + mod: res.mod + }; + } + + if ((this.negative & num.negative) !== 0) { + res = this.neg().divmod(num.neg(), mode); + + if (mode !== 'div') { + mod = res.mod.neg(); + if (positive && mod.negative !== 0) { + mod.isub(num); + } + } + + return { + div: res.div, + mod: mod + }; + } + + // Both numbers are positive at this point + + // Strip both numbers to approximate shift value + if (num.length > this.length || this.cmp(num) < 0) { + return { + div: new BN(0), + mod: this + }; + } + + // Very short reduction + if (num.length === 1) { + if (mode === 'div') { + return { + div: this.divn(num.words[0]), + mod: null + }; + } + + if (mode === 'mod') { + return { + div: null, + mod: new BN(this.modrn(num.words[0])) + }; + } + + return { + div: this.divn(num.words[0]), + mod: new BN(this.modrn(num.words[0])) + }; + } + + return this._wordDiv(num, mode); + }; + + // Find `this` / `num` + BN.prototype.div = function div (num) { + return this.divmod(num, 'div', false).div; + }; + + // Find `this` % `num` + BN.prototype.mod = function mod (num) { + return this.divmod(num, 'mod', false).mod; + }; + + BN.prototype.umod = function umod (num) { + return this.divmod(num, 'mod', true).mod; + }; + + // Find Round(`this` / `num`) + BN.prototype.divRound = function divRound (num) { + var dm = this.divmod(num); + + // Fast case - exact division + if (dm.mod.isZero()) return dm.div; + + var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod; + + var half = num.ushrn(1); + var r2 = num.andln(1); + var cmp = mod.cmp(half); + + // Round down + if (cmp < 0 || (r2 === 1 && cmp === 0)) return dm.div; + + // Round up + return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1); + }; + + BN.prototype.modrn = function modrn (num) { + var isNegNum = num < 0; + if (isNegNum) num = -num; + + assert(num <= 0x3ffffff); + var p = (1 << 26) % num; + + var acc = 0; + for (var i = this.length - 1; i >= 0; i--) { + acc = (p * acc + (this.words[i] | 0)) % num; + } + + return isNegNum ? -acc : acc; + }; + + // WARNING: DEPRECATED + BN.prototype.modn = function modn (num) { + return this.modrn(num); + }; + + // In-place division by number + BN.prototype.idivn = function idivn (num) { + var isNegNum = num < 0; + if (isNegNum) num = -num; + + assert(num <= 0x3ffffff); + + var carry = 0; + for (var i = this.length - 1; i >= 0; i--) { + var w = (this.words[i] | 0) + carry * 0x4000000; + this.words[i] = (w / num) | 0; + carry = w % num; + } + + this._strip(); + return isNegNum ? this.ineg() : this; + }; + + BN.prototype.divn = function divn (num) { + return this.clone().idivn(num); + }; + + BN.prototype.egcd = function egcd (p) { + assert(p.negative === 0); + assert(!p.isZero()); + + var x = this; + var y = p.clone(); + + if (x.negative !== 0) { + x = x.umod(p); + } else { + x = x.clone(); + } + + // A * x + B * y = x + var A = new BN(1); + var B = new BN(0); + + // C * x + D * y = y + var C = new BN(0); + var D = new BN(1); + + var g = 0; + + while (x.isEven() && y.isEven()) { + x.iushrn(1); + y.iushrn(1); + ++g; + } + + var yp = y.clone(); + var xp = x.clone(); + + while (!x.isZero()) { + for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1); + if (i > 0) { + x.iushrn(i); + while (i-- > 0) { + if (A.isOdd() || B.isOdd()) { + A.iadd(yp); + B.isub(xp); + } + + A.iushrn(1); + B.iushrn(1); + } + } + + for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1); + if (j > 0) { + y.iushrn(j); + while (j-- > 0) { + if (C.isOdd() || D.isOdd()) { + C.iadd(yp); + D.isub(xp); + } + + C.iushrn(1); + D.iushrn(1); + } + } + + if (x.cmp(y) >= 0) { + x.isub(y); + A.isub(C); + B.isub(D); + } else { + y.isub(x); + C.isub(A); + D.isub(B); + } + } + + return { + a: C, + b: D, + gcd: y.iushln(g) + }; + }; + + // This is reduced incarnation of the binary EEA + // above, designated to invert members of the + // _prime_ fields F(p) at a maximal speed + BN.prototype._invmp = function _invmp (p) { + assert(p.negative === 0); + assert(!p.isZero()); + + var a = this; + var b = p.clone(); + + if (a.negative !== 0) { + a = a.umod(p); + } else { + a = a.clone(); + } + + var x1 = new BN(1); + var x2 = new BN(0); + + var delta = b.clone(); + + while (a.cmpn(1) > 0 && b.cmpn(1) > 0) { + for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1); + if (i > 0) { + a.iushrn(i); + while (i-- > 0) { + if (x1.isOdd()) { + x1.iadd(delta); + } + + x1.iushrn(1); + } + } + + for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1); + if (j > 0) { + b.iushrn(j); + while (j-- > 0) { + if (x2.isOdd()) { + x2.iadd(delta); + } + + x2.iushrn(1); + } + } + + if (a.cmp(b) >= 0) { + a.isub(b); + x1.isub(x2); + } else { + b.isub(a); + x2.isub(x1); + } + } + + var res; + if (a.cmpn(1) === 0) { + res = x1; + } else { + res = x2; + } + + if (res.cmpn(0) < 0) { + res.iadd(p); + } + + return res; + }; + + BN.prototype.gcd = function gcd (num) { + if (this.isZero()) return num.abs(); + if (num.isZero()) return this.abs(); + + var a = this.clone(); + var b = num.clone(); + a.negative = 0; + b.negative = 0; + + // Remove common factor of two + for (var shift = 0; a.isEven() && b.isEven(); shift++) { + a.iushrn(1); + b.iushrn(1); + } + + do { + while (a.isEven()) { + a.iushrn(1); + } + while (b.isEven()) { + b.iushrn(1); + } + + var r = a.cmp(b); + if (r < 0) { + // Swap `a` and `b` to make `a` always bigger than `b` + var t = a; + a = b; + b = t; + } else if (r === 0 || b.cmpn(1) === 0) { + break; + } + + a.isub(b); + } while (true); + + return b.iushln(shift); + }; + + // Invert number in the field F(num) + BN.prototype.invm = function invm (num) { + return this.egcd(num).a.umod(num); + }; + + BN.prototype.isEven = function isEven () { + return (this.words[0] & 1) === 0; + }; + + BN.prototype.isOdd = function isOdd () { + return (this.words[0] & 1) === 1; + }; + + // And first word and num + BN.prototype.andln = function andln (num) { + return this.words[0] & num; + }; + + // Increment at the bit position in-line + BN.prototype.bincn = function bincn (bit) { + assert(typeof bit === 'number'); + var r = bit % 26; + var s = (bit - r) / 26; + var q = 1 << r; + + // Fast case: bit is much higher than all existing words + if (this.length <= s) { + this._expand(s + 1); + this.words[s] |= q; + return this; + } + + // Add bit and propagate, if needed + var carry = q; + for (var i = s; carry !== 0 && i < this.length; i++) { + var w = this.words[i] | 0; + w += carry; + carry = w >>> 26; + w &= 0x3ffffff; + this.words[i] = w; + } + if (carry !== 0) { + this.words[i] = carry; + this.length++; + } + return this; + }; + + BN.prototype.isZero = function isZero () { + return this.length === 1 && this.words[0] === 0; + }; + + BN.prototype.cmpn = function cmpn (num) { + var negative = num < 0; + + if (this.negative !== 0 && !negative) return -1; + if (this.negative === 0 && negative) return 1; + + this._strip(); + + var res; + if (this.length > 1) { + res = 1; + } else { + if (negative) { + num = -num; + } + + assert(num <= 0x3ffffff, 'Number is too big'); + + var w = this.words[0] | 0; + res = w === num ? 0 : w < num ? -1 : 1; + } + if (this.negative !== 0) return -res | 0; + return res; + }; + + // Compare two numbers and return: + // 1 - if `this` > `num` + // 0 - if `this` == `num` + // -1 - if `this` < `num` + BN.prototype.cmp = function cmp (num) { + if (this.negative !== 0 && num.negative === 0) return -1; + if (this.negative === 0 && num.negative !== 0) return 1; + + var res = this.ucmp(num); + if (this.negative !== 0) return -res | 0; + return res; + }; + + // Unsigned comparison + BN.prototype.ucmp = function ucmp (num) { + // At this point both numbers have the same sign + if (this.length > num.length) return 1; + if (this.length < num.length) return -1; + + var res = 0; + for (var i = this.length - 1; i >= 0; i--) { + var a = this.words[i] | 0; + var b = num.words[i] | 0; + + if (a === b) continue; + if (a < b) { + res = -1; + } else if (a > b) { + res = 1; + } + break; + } + return res; + }; + + BN.prototype.gtn = function gtn (num) { + return this.cmpn(num) === 1; + }; + + BN.prototype.gt = function gt (num) { + return this.cmp(num) === 1; + }; + + BN.prototype.gten = function gten (num) { + return this.cmpn(num) >= 0; + }; + + BN.prototype.gte = function gte (num) { + return this.cmp(num) >= 0; + }; + + BN.prototype.ltn = function ltn (num) { + return this.cmpn(num) === -1; + }; + + BN.prototype.lt = function lt (num) { + return this.cmp(num) === -1; + }; + + BN.prototype.lten = function lten (num) { + return this.cmpn(num) <= 0; + }; + + BN.prototype.lte = function lte (num) { + return this.cmp(num) <= 0; + }; + + BN.prototype.eqn = function eqn (num) { + return this.cmpn(num) === 0; + }; + + BN.prototype.eq = function eq (num) { + return this.cmp(num) === 0; + }; + + // + // A reduce context, could be using montgomery or something better, depending + // on the `m` itself. + // + BN.red = function red (num) { + return new Red(num); + }; + + BN.prototype.toRed = function toRed (ctx) { + assert(!this.red, 'Already a number in reduction context'); + assert(this.negative === 0, 'red works only with positives'); + return ctx.convertTo(this)._forceRed(ctx); + }; + + BN.prototype.fromRed = function fromRed () { + assert(this.red, 'fromRed works only with numbers in reduction context'); + return this.red.convertFrom(this); + }; + + BN.prototype._forceRed = function _forceRed (ctx) { + this.red = ctx; + return this; + }; + + BN.prototype.forceRed = function forceRed (ctx) { + assert(!this.red, 'Already a number in reduction context'); + return this._forceRed(ctx); + }; + + BN.prototype.redAdd = function redAdd (num) { + assert(this.red, 'redAdd works only with red numbers'); + return this.red.add(this, num); + }; + + BN.prototype.redIAdd = function redIAdd (num) { + assert(this.red, 'redIAdd works only with red numbers'); + return this.red.iadd(this, num); + }; + + BN.prototype.redSub = function redSub (num) { + assert(this.red, 'redSub works only with red numbers'); + return this.red.sub(this, num); + }; + + BN.prototype.redISub = function redISub (num) { + assert(this.red, 'redISub works only with red numbers'); + return this.red.isub(this, num); + }; + + BN.prototype.redShl = function redShl (num) { + assert(this.red, 'redShl works only with red numbers'); + return this.red.shl(this, num); + }; + + BN.prototype.redMul = function redMul (num) { + assert(this.red, 'redMul works only with red numbers'); + this.red._verify2(this, num); + return this.red.mul(this, num); + }; + + BN.prototype.redIMul = function redIMul (num) { + assert(this.red, 'redMul works only with red numbers'); + this.red._verify2(this, num); + return this.red.imul(this, num); + }; + + BN.prototype.redSqr = function redSqr () { + assert(this.red, 'redSqr works only with red numbers'); + this.red._verify1(this); + return this.red.sqr(this); + }; + + BN.prototype.redISqr = function redISqr () { + assert(this.red, 'redISqr works only with red numbers'); + this.red._verify1(this); + return this.red.isqr(this); + }; + + // Square root over p + BN.prototype.redSqrt = function redSqrt () { + assert(this.red, 'redSqrt works only with red numbers'); + this.red._verify1(this); + return this.red.sqrt(this); + }; + + BN.prototype.redInvm = function redInvm () { + assert(this.red, 'redInvm works only with red numbers'); + this.red._verify1(this); + return this.red.invm(this); + }; + + // Return negative clone of `this` % `red modulo` + BN.prototype.redNeg = function redNeg () { + assert(this.red, 'redNeg works only with red numbers'); + this.red._verify1(this); + return this.red.neg(this); + }; + + BN.prototype.redPow = function redPow (num) { + assert(this.red && !num.red, 'redPow(normalNum)'); + this.red._verify1(this); + return this.red.pow(this, num); + }; + + // Prime numbers with efficient reduction + var primes = { + k256: null, + p224: null, + p192: null, + p25519: null + }; + + // Pseudo-Mersenne prime + function MPrime (name, p) { + // P = 2 ^ N - K + this.name = name; + this.p = new BN(p, 16); + this.n = this.p.bitLength(); + this.k = new BN(1).iushln(this.n).isub(this.p); + + this.tmp = this._tmp(); + } + + MPrime.prototype._tmp = function _tmp () { + var tmp = new BN(null); + tmp.words = new Array(Math.ceil(this.n / 13)); + return tmp; + }; + + MPrime.prototype.ireduce = function ireduce (num) { + // Assumes that `num` is less than `P^2` + // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P) + var r = num; + var rlen; + + do { + this.split(r, this.tmp); + r = this.imulK(r); + r = r.iadd(this.tmp); + rlen = r.bitLength(); + } while (rlen > this.n); + + var cmp = rlen < this.n ? -1 : r.ucmp(this.p); + if (cmp === 0) { + r.words[0] = 0; + r.length = 1; + } else if (cmp > 0) { + r.isub(this.p); + } else { + if (r.strip !== undefined) { + // r is a BN v4 instance + r.strip(); + } else { + // r is a BN v5 instance + r._strip(); + } + } + + return r; + }; + + MPrime.prototype.split = function split (input, out) { + input.iushrn(this.n, 0, out); + }; + + MPrime.prototype.imulK = function imulK (num) { + return num.imul(this.k); + }; + + function K256 () { + MPrime.call( + this, + 'k256', + 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f'); + } + inherits(K256, MPrime); + + K256.prototype.split = function split (input, output) { + // 256 = 9 * 26 + 22 + var mask = 0x3fffff; + + var outLen = Math.min(input.length, 9); + for (var i = 0; i < outLen; i++) { + output.words[i] = input.words[i]; + } + output.length = outLen; + + if (input.length <= 9) { + input.words[0] = 0; + input.length = 1; + return; + } + + // Shift by 9 limbs + var prev = input.words[9]; + output.words[output.length++] = prev & mask; + + for (i = 10; i < input.length; i++) { + var next = input.words[i] | 0; + input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22); + prev = next; + } + prev >>>= 22; + input.words[i - 10] = prev; + if (prev === 0 && input.length > 10) { + input.length -= 10; + } else { + input.length -= 9; + } + }; + + K256.prototype.imulK = function imulK (num) { + // K = 0x1000003d1 = [ 0x40, 0x3d1 ] + num.words[num.length] = 0; + num.words[num.length + 1] = 0; + num.length += 2; + + // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390 + var lo = 0; + for (var i = 0; i < num.length; i++) { + var w = num.words[i] | 0; + lo += w * 0x3d1; + num.words[i] = lo & 0x3ffffff; + lo = w * 0x40 + ((lo / 0x4000000) | 0); + } + + // Fast length reduction + if (num.words[num.length - 1] === 0) { + num.length--; + if (num.words[num.length - 1] === 0) { + num.length--; + } + } + return num; + }; + + function P224 () { + MPrime.call( + this, + 'p224', + 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001'); + } + inherits(P224, MPrime); + + function P192 () { + MPrime.call( + this, + 'p192', + 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff'); + } + inherits(P192, MPrime); + + function P25519 () { + // 2 ^ 255 - 19 + MPrime.call( + this, + '25519', + '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed'); + } + inherits(P25519, MPrime); + + P25519.prototype.imulK = function imulK (num) { + // K = 0x13 + var carry = 0; + for (var i = 0; i < num.length; i++) { + var hi = (num.words[i] | 0) * 0x13 + carry; + var lo = hi & 0x3ffffff; + hi >>>= 26; + + num.words[i] = lo; + carry = hi; + } + if (carry !== 0) { + num.words[num.length++] = carry; + } + return num; + }; + + // Exported mostly for testing purposes, use plain name instead + BN._prime = function prime (name) { + // Cached version of prime + if (primes[name]) return primes[name]; + + var prime; + if (name === 'k256') { + prime = new K256(); + } else if (name === 'p224') { + prime = new P224(); + } else if (name === 'p192') { + prime = new P192(); + } else if (name === 'p25519') { + prime = new P25519(); + } else { + throw new Error('Unknown prime ' + name); + } + primes[name] = prime; + + return prime; + }; + + // + // Base reduction engine + // + function Red (m) { + if (typeof m === 'string') { + var prime = BN._prime(m); + this.m = prime.p; + this.prime = prime; + } else { + assert(m.gtn(1), 'modulus must be greater than 1'); + this.m = m; + this.prime = null; + } + } + + Red.prototype._verify1 = function _verify1 (a) { + assert(a.negative === 0, 'red works only with positives'); + assert(a.red, 'red works only with red numbers'); + }; + + Red.prototype._verify2 = function _verify2 (a, b) { + assert((a.negative | b.negative) === 0, 'red works only with positives'); + assert(a.red && a.red === b.red, + 'red works only with red numbers'); + }; + + Red.prototype.imod = function imod (a) { + if (this.prime) return this.prime.ireduce(a)._forceRed(this); + + move(a, a.umod(this.m)._forceRed(this)); + return a; + }; + + Red.prototype.neg = function neg (a) { + if (a.isZero()) { + return a.clone(); + } + + return this.m.sub(a)._forceRed(this); + }; + + Red.prototype.add = function add (a, b) { + this._verify2(a, b); + + var res = a.add(b); + if (res.cmp(this.m) >= 0) { + res.isub(this.m); + } + return res._forceRed(this); + }; + + Red.prototype.iadd = function iadd (a, b) { + this._verify2(a, b); + + var res = a.iadd(b); + if (res.cmp(this.m) >= 0) { + res.isub(this.m); + } + return res; + }; + + Red.prototype.sub = function sub (a, b) { + this._verify2(a, b); + + var res = a.sub(b); + if (res.cmpn(0) < 0) { + res.iadd(this.m); + } + return res._forceRed(this); + }; + + Red.prototype.isub = function isub (a, b) { + this._verify2(a, b); + + var res = a.isub(b); + if (res.cmpn(0) < 0) { + res.iadd(this.m); + } + return res; + }; + + Red.prototype.shl = function shl (a, num) { + this._verify1(a); + return this.imod(a.ushln(num)); + }; + + Red.prototype.imul = function imul (a, b) { + this._verify2(a, b); + return this.imod(a.imul(b)); + }; + + Red.prototype.mul = function mul (a, b) { + this._verify2(a, b); + return this.imod(a.mul(b)); + }; + + Red.prototype.isqr = function isqr (a) { + return this.imul(a, a.clone()); + }; + + Red.prototype.sqr = function sqr (a) { + return this.mul(a, a); + }; + + Red.prototype.sqrt = function sqrt (a) { + if (a.isZero()) return a.clone(); + + var mod3 = this.m.andln(3); + assert(mod3 % 2 === 1); + + // Fast case + if (mod3 === 3) { + var pow = this.m.add(new BN(1)).iushrn(2); + return this.pow(a, pow); + } + + // Tonelli-Shanks algorithm (Totally unoptimized and slow) + // + // Find Q and S, that Q * 2 ^ S = (P - 1) + var q = this.m.subn(1); + var s = 0; + while (!q.isZero() && q.andln(1) === 0) { + s++; + q.iushrn(1); + } + assert(!q.isZero()); + + var one = new BN(1).toRed(this); + var nOne = one.redNeg(); + + // Find quadratic non-residue + // NOTE: Max is such because of generalized Riemann hypothesis. + var lpow = this.m.subn(1).iushrn(1); + var z = this.m.bitLength(); + z = new BN(2 * z * z).toRed(this); + + while (this.pow(z, lpow).cmp(nOne) !== 0) { + z.redIAdd(nOne); + } + + var c = this.pow(z, q); + var r = this.pow(a, q.addn(1).iushrn(1)); + var t = this.pow(a, q); + var m = s; + while (t.cmp(one) !== 0) { + var tmp = t; + for (var i = 0; tmp.cmp(one) !== 0; i++) { + tmp = tmp.redSqr(); + } + assert(i < m); + var b = this.pow(c, new BN(1).iushln(m - i - 1)); + + r = r.redMul(b); + c = b.redSqr(); + t = t.redMul(c); + m = i; + } + + return r; + }; + + Red.prototype.invm = function invm (a) { + var inv = a._invmp(this.m); + if (inv.negative !== 0) { + inv.negative = 0; + return this.imod(inv).redNeg(); + } else { + return this.imod(inv); + } + }; + + Red.prototype.pow = function pow (a, num) { + if (num.isZero()) return new BN(1).toRed(this); + if (num.cmpn(1) === 0) return a.clone(); + + var windowSize = 4; + var wnd = new Array(1 << windowSize); + wnd[0] = new BN(1).toRed(this); + wnd[1] = a; + for (var i = 2; i < wnd.length; i++) { + wnd[i] = this.mul(wnd[i - 1], a); + } + + var res = wnd[0]; + var current = 0; + var currentLen = 0; + var start = num.bitLength() % 26; + if (start === 0) { + start = 26; + } + + for (i = num.length - 1; i >= 0; i--) { + var word = num.words[i]; + for (var j = start - 1; j >= 0; j--) { + var bit = (word >> j) & 1; + if (res !== wnd[0]) { + res = this.sqr(res); + } + + if (bit === 0 && current === 0) { + currentLen = 0; + continue; + } + + current <<= 1; + current |= bit; + currentLen++; + if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue; + + res = this.mul(res, wnd[current]); + currentLen = 0; + current = 0; + } + start = 26; + } + + return res; + }; + + Red.prototype.convertTo = function convertTo (num) { + var r = num.umod(this.m); + + return r === num ? r.clone() : r; + }; + + Red.prototype.convertFrom = function convertFrom (num) { + var res = num.clone(); + res.red = null; + return res; + }; + + // + // Montgomery method engine + // + + BN.mont = function mont (num) { + return new Mont(num); + }; + + function Mont (m) { + Red.call(this, m); + + this.shift = this.m.bitLength(); + if (this.shift % 26 !== 0) { + this.shift += 26 - (this.shift % 26); + } + + this.r = new BN(1).iushln(this.shift); + this.r2 = this.imod(this.r.sqr()); + this.rinv = this.r._invmp(this.m); + + this.minv = this.rinv.mul(this.r).isubn(1).div(this.m); + this.minv = this.minv.umod(this.r); + this.minv = this.r.sub(this.minv); + } + inherits(Mont, Red); + + Mont.prototype.convertTo = function convertTo (num) { + return this.imod(num.ushln(this.shift)); + }; + + Mont.prototype.convertFrom = function convertFrom (num) { + var r = this.imod(num.mul(this.rinv)); + r.red = null; + return r; + }; + + Mont.prototype.imul = function imul (a, b) { + if (a.isZero() || b.isZero()) { + a.words[0] = 0; + a.length = 1; + return a; + } + + var t = a.imul(b); + var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m); + var u = t.isub(c).iushrn(this.shift); + var res = u; + + if (u.cmp(this.m) >= 0) { + res = u.isub(this.m); + } else if (u.cmpn(0) < 0) { + res = u.iadd(this.m); + } + + return res._forceRed(this); + }; + + Mont.prototype.mul = function mul (a, b) { + if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this); + + var t = a.mul(b); + var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m); + var u = t.isub(c).iushrn(this.shift); + var res = u; + if (u.cmp(this.m) >= 0) { + res = u.isub(this.m); + } else if (u.cmpn(0) < 0) { + res = u.iadd(this.m); + } + + return res._forceRed(this); + }; + + Mont.prototype.invm = function invm (a) { + // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R + var res = this.imod(a._invmp(this.m).mul(this.r2)); + return res._forceRed(this); + }; +})( false || module, this); + + +}, +17656(module) { +!function(e,t){ true?module.exports=t():0}(this,(function(){return function(e){var t={};function r(n){if(t[n])return t[n].exports;var i=t[n]={i:n,l:!1,exports:{}};return e[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)r.d(n,i,function(t){return e[t]}.bind(null,i));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=90)}({17:function(e,t,r){"use strict";t.__esModule=!0,t.default=void 0;var n=r(18),i=function(){function e(){}return e.getFirstMatch=function(e,t){var r=t.match(e);return r&&r.length>0&&r[1]||""},e.getSecondMatch=function(e,t){var r=t.match(e);return r&&r.length>1&&r[2]||""},e.matchAndReturnConst=function(e,t,r){if(e.test(t))return r},e.getWindowsVersionName=function(e){switch(e){case"NT":return"NT";case"XP":return"XP";case"NT 5.0":return"2000";case"NT 5.1":return"XP";case"NT 5.2":return"2003";case"NT 6.0":return"Vista";case"NT 6.1":return"7";case"NT 6.2":return"8";case"NT 6.3":return"8.1";case"NT 10.0":return"10";default:return}},e.getMacOSVersionName=function(e){var t=e.split(".").splice(0,2).map((function(e){return parseInt(e,10)||0}));if(t.push(0),10===t[0])switch(t[1]){case 5:return"Leopard";case 6:return"Snow Leopard";case 7:return"Lion";case 8:return"Mountain Lion";case 9:return"Mavericks";case 10:return"Yosemite";case 11:return"El Capitan";case 12:return"Sierra";case 13:return"High Sierra";case 14:return"Mojave";case 15:return"Catalina";default:return}},e.getAndroidVersionName=function(e){var t=e.split(".").splice(0,2).map((function(e){return parseInt(e,10)||0}));if(t.push(0),!(1===t[0]&&t[1]<5))return 1===t[0]&&t[1]<6?"Cupcake":1===t[0]&&t[1]>=6?"Donut":2===t[0]&&t[1]<2?"Eclair":2===t[0]&&2===t[1]?"Froyo":2===t[0]&&t[1]>2?"Gingerbread":3===t[0]?"Honeycomb":4===t[0]&&t[1]<1?"Ice Cream Sandwich":4===t[0]&&t[1]<4?"Jelly Bean":4===t[0]&&t[1]>=4?"KitKat":5===t[0]?"Lollipop":6===t[0]?"Marshmallow":7===t[0]?"Nougat":8===t[0]?"Oreo":9===t[0]?"Pie":void 0},e.getVersionPrecision=function(e){return e.split(".").length},e.compareVersions=function(t,r,n){void 0===n&&(n=!1);var i=e.getVersionPrecision(t),s=e.getVersionPrecision(r),a=Math.max(i,s),o=0,u=e.map([t,r],(function(t){var r=a-e.getVersionPrecision(t),n=t+new Array(r+1).join(".0");return e.map(n.split("."),(function(e){return new Array(20-e.length).join("0")+e})).reverse()}));for(n&&(o=a-Math.min(i,s)),a-=1;a>=o;){if(u[0][a]>u[1][a])return 1;if(u[0][a]===u[1][a]){if(a===o)return 0;a-=1}else if(u[0][a]1?i-1:0),a=1;a0){var a=Object.keys(r),u=o.default.find(a,(function(e){return t.isOS(e)}));if(u){var d=this.satisfies(r[u]);if(void 0!==d)return d}var c=o.default.find(a,(function(e){return t.isPlatform(e)}));if(c){var f=this.satisfies(r[c]);if(void 0!==f)return f}}if(s>0){var l=Object.keys(i),h=o.default.find(l,(function(e){return t.isBrowser(e,!0)}));if(void 0!==h)return this.compareVersion(i[h])}},t.isBrowser=function(e,t){void 0===t&&(t=!1);var r=this.getBrowserName().toLowerCase(),n=e.toLowerCase(),i=o.default.getBrowserTypeByAlias(n);return t&&i&&(n=i.toLowerCase()),n===r},t.compareVersion=function(e){var t=[0],r=e,n=!1,i=this.getBrowserVersion();if("string"==typeof i)return">"===e[0]||"<"===e[0]?(r=e.substr(1),"="===e[1]?(n=!0,r=e.substr(2)):t=[],">"===e[0]?t.push(1):t.push(-1)):"="===e[0]?r=e.substr(1):"~"===e[0]&&(n=!0,r=e.substr(1)),t.indexOf(o.default.compareVersions(i,r,n))>-1},t.isOS=function(e){return this.getOSName(!0)===String(e).toLowerCase()},t.isPlatform=function(e){return this.getPlatformType(!0)===String(e).toLowerCase()},t.isEngine=function(e){return this.getEngineName(!0)===String(e).toLowerCase()},t.is=function(e,t){return void 0===t&&(t=!1),this.isBrowser(e,t)||this.isOS(e)||this.isPlatform(e)},t.some=function(e){var t=this;return void 0===e&&(e=[]),e.some((function(e){return t.is(e)}))},e}();t.default=d,e.exports=t.default},92:function(e,t,r){"use strict";t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n};var s=/version\/(\d+(\.?_?\d+)+)/i,a=[{test:[/googlebot/i],describe:function(e){var t={name:"Googlebot"},r=i.default.getFirstMatch(/googlebot\/(\d+(\.\d+))/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/opera/i],describe:function(e){var t={name:"Opera"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:opera)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/opr\/|opios/i],describe:function(e){var t={name:"Opera"},r=i.default.getFirstMatch(/(?:opr|opios)[\s/](\S+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/SamsungBrowser/i],describe:function(e){var t={name:"Samsung Internet for Android"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:SamsungBrowser)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/Whale/i],describe:function(e){var t={name:"NAVER Whale Browser"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:whale)[\s/](\d+(?:\.\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/MZBrowser/i],describe:function(e){var t={name:"MZ Browser"},r=i.default.getFirstMatch(/(?:MZBrowser)[\s/](\d+(?:\.\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/focus/i],describe:function(e){var t={name:"Focus"},r=i.default.getFirstMatch(/(?:focus)[\s/](\d+(?:\.\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/swing/i],describe:function(e){var t={name:"Swing"},r=i.default.getFirstMatch(/(?:swing)[\s/](\d+(?:\.\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/coast/i],describe:function(e){var t={name:"Opera Coast"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:coast)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/opt\/\d+(?:.?_?\d+)+/i],describe:function(e){var t={name:"Opera Touch"},r=i.default.getFirstMatch(/(?:opt)[\s/](\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/yabrowser/i],describe:function(e){var t={name:"Yandex Browser"},r=i.default.getFirstMatch(/(?:yabrowser)[\s/](\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/ucbrowser/i],describe:function(e){var t={name:"UC Browser"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:ucbrowser)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/Maxthon|mxios/i],describe:function(e){var t={name:"Maxthon"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:Maxthon|mxios)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/epiphany/i],describe:function(e){var t={name:"Epiphany"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:epiphany)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/puffin/i],describe:function(e){var t={name:"Puffin"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:puffin)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/sleipnir/i],describe:function(e){var t={name:"Sleipnir"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:sleipnir)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/k-meleon/i],describe:function(e){var t={name:"K-Meleon"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:k-meleon)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/micromessenger/i],describe:function(e){var t={name:"WeChat"},r=i.default.getFirstMatch(/(?:micromessenger)[\s/](\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/qqbrowser/i],describe:function(e){var t={name:/qqbrowserlite/i.test(e)?"QQ Browser Lite":"QQ Browser"},r=i.default.getFirstMatch(/(?:qqbrowserlite|qqbrowser)[/](\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/msie|trident/i],describe:function(e){var t={name:"Internet Explorer"},r=i.default.getFirstMatch(/(?:msie |rv:)(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/\sedg\//i],describe:function(e){var t={name:"Microsoft Edge"},r=i.default.getFirstMatch(/\sedg\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/edg([ea]|ios)/i],describe:function(e){var t={name:"Microsoft Edge"},r=i.default.getSecondMatch(/edg([ea]|ios)\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/vivaldi/i],describe:function(e){var t={name:"Vivaldi"},r=i.default.getFirstMatch(/vivaldi\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/seamonkey/i],describe:function(e){var t={name:"SeaMonkey"},r=i.default.getFirstMatch(/seamonkey\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/sailfish/i],describe:function(e){var t={name:"Sailfish"},r=i.default.getFirstMatch(/sailfish\s?browser\/(\d+(\.\d+)?)/i,e);return r&&(t.version=r),t}},{test:[/silk/i],describe:function(e){var t={name:"Amazon Silk"},r=i.default.getFirstMatch(/silk\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/phantom/i],describe:function(e){var t={name:"PhantomJS"},r=i.default.getFirstMatch(/phantomjs\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/slimerjs/i],describe:function(e){var t={name:"SlimerJS"},r=i.default.getFirstMatch(/slimerjs\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/blackberry|\bbb\d+/i,/rim\stablet/i],describe:function(e){var t={name:"BlackBerry"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/blackberry[\d]+\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/(web|hpw)[o0]s/i],describe:function(e){var t={name:"WebOS Browser"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/w(?:eb)?[o0]sbrowser\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/bada/i],describe:function(e){var t={name:"Bada"},r=i.default.getFirstMatch(/dolfin\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/tizen/i],describe:function(e){var t={name:"Tizen"},r=i.default.getFirstMatch(/(?:tizen\s?)?browser\/(\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/qupzilla/i],describe:function(e){var t={name:"QupZilla"},r=i.default.getFirstMatch(/(?:qupzilla)[\s/](\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/firefox|iceweasel|fxios/i],describe:function(e){var t={name:"Firefox"},r=i.default.getFirstMatch(/(?:firefox|iceweasel|fxios)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/electron/i],describe:function(e){var t={name:"Electron"},r=i.default.getFirstMatch(/(?:electron)\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/MiuiBrowser/i],describe:function(e){var t={name:"Miui"},r=i.default.getFirstMatch(/(?:MiuiBrowser)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/chromium/i],describe:function(e){var t={name:"Chromium"},r=i.default.getFirstMatch(/(?:chromium)[\s/](\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/chrome|crios|crmo/i],describe:function(e){var t={name:"Chrome"},r=i.default.getFirstMatch(/(?:chrome|crios|crmo)\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/GSA/i],describe:function(e){var t={name:"Google Search"},r=i.default.getFirstMatch(/(?:GSA)\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:function(e){var t=!e.test(/like android/i),r=e.test(/android/i);return t&&r},describe:function(e){var t={name:"Android Browser"},r=i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/playstation 4/i],describe:function(e){var t={name:"PlayStation 4"},r=i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/safari|applewebkit/i],describe:function(e){var t={name:"Safari"},r=i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/.*/i],describe:function(e){var t=-1!==e.search("\\(")?/^(.*)\/(.*)[ \t]\((.*)/:/^(.*)\/(.*) /;return{name:i.default.getFirstMatch(t,e),version:i.default.getSecondMatch(t,e)}}}];t.default=a,e.exports=t.default},93:function(e,t,r){"use strict";t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n},s=r(18);var a=[{test:[/Roku\/DVP/],describe:function(e){var t=i.default.getFirstMatch(/Roku\/DVP-(\d+\.\d+)/i,e);return{name:s.OS_MAP.Roku,version:t}}},{test:[/windows phone/i],describe:function(e){var t=i.default.getFirstMatch(/windows phone (?:os)?\s?(\d+(\.\d+)*)/i,e);return{name:s.OS_MAP.WindowsPhone,version:t}}},{test:[/windows /i],describe:function(e){var t=i.default.getFirstMatch(/Windows ((NT|XP)( \d\d?.\d)?)/i,e),r=i.default.getWindowsVersionName(t);return{name:s.OS_MAP.Windows,version:t,versionName:r}}},{test:[/Macintosh(.*?) FxiOS(.*?)\//],describe:function(e){var t={name:s.OS_MAP.iOS},r=i.default.getSecondMatch(/(Version\/)(\d[\d.]+)/,e);return r&&(t.version=r),t}},{test:[/macintosh/i],describe:function(e){var t=i.default.getFirstMatch(/mac os x (\d+(\.?_?\d+)+)/i,e).replace(/[_\s]/g,"."),r=i.default.getMacOSVersionName(t),n={name:s.OS_MAP.MacOS,version:t};return r&&(n.versionName=r),n}},{test:[/(ipod|iphone|ipad)/i],describe:function(e){var t=i.default.getFirstMatch(/os (\d+([_\s]\d+)*) like mac os x/i,e).replace(/[_\s]/g,".");return{name:s.OS_MAP.iOS,version:t}}},{test:function(e){var t=!e.test(/like android/i),r=e.test(/android/i);return t&&r},describe:function(e){var t=i.default.getFirstMatch(/android[\s/-](\d+(\.\d+)*)/i,e),r=i.default.getAndroidVersionName(t),n={name:s.OS_MAP.Android,version:t};return r&&(n.versionName=r),n}},{test:[/(web|hpw)[o0]s/i],describe:function(e){var t=i.default.getFirstMatch(/(?:web|hpw)[o0]s\/(\d+(\.\d+)*)/i,e),r={name:s.OS_MAP.WebOS};return t&&t.length&&(r.version=t),r}},{test:[/blackberry|\bbb\d+/i,/rim\stablet/i],describe:function(e){var t=i.default.getFirstMatch(/rim\stablet\sos\s(\d+(\.\d+)*)/i,e)||i.default.getFirstMatch(/blackberry\d+\/(\d+([_\s]\d+)*)/i,e)||i.default.getFirstMatch(/\bbb(\d+)/i,e);return{name:s.OS_MAP.BlackBerry,version:t}}},{test:[/bada/i],describe:function(e){var t=i.default.getFirstMatch(/bada\/(\d+(\.\d+)*)/i,e);return{name:s.OS_MAP.Bada,version:t}}},{test:[/tizen/i],describe:function(e){var t=i.default.getFirstMatch(/tizen[/\s](\d+(\.\d+)*)/i,e);return{name:s.OS_MAP.Tizen,version:t}}},{test:[/linux/i],describe:function(){return{name:s.OS_MAP.Linux}}},{test:[/CrOS/],describe:function(){return{name:s.OS_MAP.ChromeOS}}},{test:[/PlayStation 4/],describe:function(e){var t=i.default.getFirstMatch(/PlayStation 4[/\s](\d+(\.\d+)*)/i,e);return{name:s.OS_MAP.PlayStation4,version:t}}}];t.default=a,e.exports=t.default},94:function(e,t,r){"use strict";t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n},s=r(18);var a=[{test:[/googlebot/i],describe:function(){return{type:"bot",vendor:"Google"}}},{test:[/huawei/i],describe:function(e){var t=i.default.getFirstMatch(/(can-l01)/i,e)&&"Nova",r={type:s.PLATFORMS_MAP.mobile,vendor:"Huawei"};return t&&(r.model=t),r}},{test:[/nexus\s*(?:7|8|9|10).*/i],describe:function(){return{type:s.PLATFORMS_MAP.tablet,vendor:"Nexus"}}},{test:[/ipad/i],describe:function(){return{type:s.PLATFORMS_MAP.tablet,vendor:"Apple",model:"iPad"}}},{test:[/Macintosh(.*?) FxiOS(.*?)\//],describe:function(){return{type:s.PLATFORMS_MAP.tablet,vendor:"Apple",model:"iPad"}}},{test:[/kftt build/i],describe:function(){return{type:s.PLATFORMS_MAP.tablet,vendor:"Amazon",model:"Kindle Fire HD 7"}}},{test:[/silk/i],describe:function(){return{type:s.PLATFORMS_MAP.tablet,vendor:"Amazon"}}},{test:[/tablet(?! pc)/i],describe:function(){return{type:s.PLATFORMS_MAP.tablet}}},{test:function(e){var t=e.test(/ipod|iphone/i),r=e.test(/like (ipod|iphone)/i);return t&&!r},describe:function(e){var t=i.default.getFirstMatch(/(ipod|iphone)/i,e);return{type:s.PLATFORMS_MAP.mobile,vendor:"Apple",model:t}}},{test:[/nexus\s*[0-6].*/i,/galaxy nexus/i],describe:function(){return{type:s.PLATFORMS_MAP.mobile,vendor:"Nexus"}}},{test:[/[^-]mobi/i],describe:function(){return{type:s.PLATFORMS_MAP.mobile}}},{test:function(e){return"blackberry"===e.getBrowserName(!0)},describe:function(){return{type:s.PLATFORMS_MAP.mobile,vendor:"BlackBerry"}}},{test:function(e){return"bada"===e.getBrowserName(!0)},describe:function(){return{type:s.PLATFORMS_MAP.mobile}}},{test:function(e){return"windows phone"===e.getBrowserName()},describe:function(){return{type:s.PLATFORMS_MAP.mobile,vendor:"Microsoft"}}},{test:function(e){var t=Number(String(e.getOSVersion()).split(".")[0]);return"android"===e.getOSName(!0)&&t>=3},describe:function(){return{type:s.PLATFORMS_MAP.tablet}}},{test:function(e){return"android"===e.getOSName(!0)},describe:function(){return{type:s.PLATFORMS_MAP.mobile}}},{test:function(e){return"macos"===e.getOSName(!0)},describe:function(){return{type:s.PLATFORMS_MAP.desktop,vendor:"Apple"}}},{test:function(e){return"windows"===e.getOSName(!0)},describe:function(){return{type:s.PLATFORMS_MAP.desktop}}},{test:function(e){return"linux"===e.getOSName(!0)},describe:function(){return{type:s.PLATFORMS_MAP.desktop}}},{test:function(e){return"playstation 4"===e.getOSName(!0)},describe:function(){return{type:s.PLATFORMS_MAP.tv}}},{test:function(e){return"roku"===e.getOSName(!0)},describe:function(){return{type:s.PLATFORMS_MAP.tv}}}];t.default=a,e.exports=t.default},95:function(e,t,r){"use strict";t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n},s=r(18);var a=[{test:function(e){return"microsoft edge"===e.getBrowserName(!0)},describe:function(e){if(/\sedg\//i.test(e))return{name:s.ENGINE_MAP.Blink};var t=i.default.getFirstMatch(/edge\/(\d+(\.?_?\d+)+)/i,e);return{name:s.ENGINE_MAP.EdgeHTML,version:t}}},{test:[/trident/i],describe:function(e){var t={name:s.ENGINE_MAP.Trident},r=i.default.getFirstMatch(/trident\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:function(e){return e.test(/presto/i)},describe:function(e){var t={name:s.ENGINE_MAP.Presto},r=i.default.getFirstMatch(/presto\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:function(e){var t=e.test(/gecko/i),r=e.test(/like gecko/i);return t&&!r},describe:function(e){var t={name:s.ENGINE_MAP.Gecko},r=i.default.getFirstMatch(/gecko\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/(apple)?webkit\/537\.36/i],describe:function(){return{name:s.ENGINE_MAP.Blink}}},{test:[/(apple)?webkit/i],describe:function(e){var t={name:s.ENGINE_MAP.WebKit},r=i.default.getFirstMatch(/webkit\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}}];t.default=a,e.exports=t.default}})})); + +}, +93705(module, __unused_webpack_exports, __webpack_require__) { +var r; + +module.exports = function rand(len) { + if (!r) + r = new Rand(null); + + return r.generate(len); +}; + +function Rand(rand) { + this.rand = rand; +} +module.exports.Rand = Rand; + +Rand.prototype.generate = function generate(len) { + return this._rand(len); +}; + +// Emulate crypto API using randy +Rand.prototype._rand = function _rand(n) { + if (this.rand.getBytes) + return this.rand.getBytes(n); + + var res = new Uint8Array(n); + for (var i = 0; i < res.length; i++) + res[i] = this.rand.getByte(); + return res; +}; + +if (typeof self === 'object') { + if (self.crypto && self.crypto.getRandomValues) { + // Modern browsers + Rand.prototype._rand = function _rand(n) { + var arr = new Uint8Array(n); + self.crypto.getRandomValues(arr); + return arr; + }; + } else if (self.msCrypto && self.msCrypto.getRandomValues) { + // IE + Rand.prototype._rand = function _rand(n) { + var arr = new Uint8Array(n); + self.msCrypto.getRandomValues(arr); + return arr; + }; + + // Safari's WebWorkers do not have `crypto` + } else if (typeof window === 'object') { + // Old junk + Rand.prototype._rand = function() { + throw new Error('Not implemented yet'); + }; + } +} else { + // Node.js or Web worker with no crypto support + try { + var crypto = __webpack_require__(76283); + if (typeof crypto.randomBytes !== 'function') + throw new Error('Not supported'); + + Rand.prototype._rand = function _rand(n) { + return crypto.randomBytes(n); + }; + } catch (e) { + } +} + + +}, +22643(module, __unused_webpack_exports, __webpack_require__) { +// based on the aes implimentation in triple sec +// https://github.com/keybase/triplesec +// which is in turn based on the one from crypto-js +// https://code.google.com/p/crypto-js/ + +var Buffer = (__webpack_require__(46279)/* .Buffer */.Buffer) + +function asUInt32Array (buf) { + if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf) + + var len = (buf.length / 4) | 0 + var out = new Array(len) + + for (var i = 0; i < len; i++) { + out[i] = buf.readUInt32BE(i * 4) + } + + return out +} + +function scrubVec (v) { + for (var i = 0; i < v.length; v++) { + v[i] = 0 + } +} + +function cryptBlock (M, keySchedule, SUB_MIX, SBOX, nRounds) { + var SUB_MIX0 = SUB_MIX[0] + var SUB_MIX1 = SUB_MIX[1] + var SUB_MIX2 = SUB_MIX[2] + var SUB_MIX3 = SUB_MIX[3] + + var s0 = M[0] ^ keySchedule[0] + var s1 = M[1] ^ keySchedule[1] + var s2 = M[2] ^ keySchedule[2] + var s3 = M[3] ^ keySchedule[3] + var t0, t1, t2, t3 + var ksRow = 4 + + for (var round = 1; round < nRounds; round++) { + t0 = SUB_MIX0[s0 >>> 24] ^ SUB_MIX1[(s1 >>> 16) & 0xff] ^ SUB_MIX2[(s2 >>> 8) & 0xff] ^ SUB_MIX3[s3 & 0xff] ^ keySchedule[ksRow++] + t1 = SUB_MIX0[s1 >>> 24] ^ SUB_MIX1[(s2 >>> 16) & 0xff] ^ SUB_MIX2[(s3 >>> 8) & 0xff] ^ SUB_MIX3[s0 & 0xff] ^ keySchedule[ksRow++] + t2 = SUB_MIX0[s2 >>> 24] ^ SUB_MIX1[(s3 >>> 16) & 0xff] ^ SUB_MIX2[(s0 >>> 8) & 0xff] ^ SUB_MIX3[s1 & 0xff] ^ keySchedule[ksRow++] + t3 = SUB_MIX0[s3 >>> 24] ^ SUB_MIX1[(s0 >>> 16) & 0xff] ^ SUB_MIX2[(s1 >>> 8) & 0xff] ^ SUB_MIX3[s2 & 0xff] ^ keySchedule[ksRow++] + s0 = t0 + s1 = t1 + s2 = t2 + s3 = t3 + } + + t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++] + t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++] + t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++] + t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++] + t0 = t0 >>> 0 + t1 = t1 >>> 0 + t2 = t2 >>> 0 + t3 = t3 >>> 0 + + return [t0, t1, t2, t3] +} + +// AES constants +var RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36] +var G = (function () { + // Compute double table + var d = new Array(256) + for (var j = 0; j < 256; j++) { + if (j < 128) { + d[j] = j << 1 + } else { + d[j] = (j << 1) ^ 0x11b + } + } + + var SBOX = [] + var INV_SBOX = [] + var SUB_MIX = [[], [], [], []] + var INV_SUB_MIX = [[], [], [], []] + + // Walk GF(2^8) + var x = 0 + var xi = 0 + for (var i = 0; i < 256; ++i) { + // Compute sbox + var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4) + sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63 + SBOX[x] = sx + INV_SBOX[sx] = x + + // Compute multiplication + var x2 = d[x] + var x4 = d[x2] + var x8 = d[x4] + + // Compute sub bytes, mix columns tables + var t = (d[sx] * 0x101) ^ (sx * 0x1010100) + SUB_MIX[0][x] = (t << 24) | (t >>> 8) + SUB_MIX[1][x] = (t << 16) | (t >>> 16) + SUB_MIX[2][x] = (t << 8) | (t >>> 24) + SUB_MIX[3][x] = t + + // Compute inv sub bytes, inv mix columns tables + t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100) + INV_SUB_MIX[0][sx] = (t << 24) | (t >>> 8) + INV_SUB_MIX[1][sx] = (t << 16) | (t >>> 16) + INV_SUB_MIX[2][sx] = (t << 8) | (t >>> 24) + INV_SUB_MIX[3][sx] = t + + if (x === 0) { + x = xi = 1 + } else { + x = x2 ^ d[d[d[x8 ^ x2]]] + xi ^= d[d[xi]] + } + } + + return { + SBOX: SBOX, + INV_SBOX: INV_SBOX, + SUB_MIX: SUB_MIX, + INV_SUB_MIX: INV_SUB_MIX + } +})() + +function AES (key) { + this._key = asUInt32Array(key) + this._reset() +} + +AES.blockSize = 4 * 4 +AES.keySize = 256 / 8 +AES.prototype.blockSize = AES.blockSize +AES.prototype.keySize = AES.keySize +AES.prototype._reset = function () { + var keyWords = this._key + var keySize = keyWords.length + var nRounds = keySize + 6 + var ksRows = (nRounds + 1) * 4 + + var keySchedule = [] + for (var k = 0; k < keySize; k++) { + keySchedule[k] = keyWords[k] + } + + for (k = keySize; k < ksRows; k++) { + var t = keySchedule[k - 1] + + if (k % keySize === 0) { + t = (t << 8) | (t >>> 24) + t = + (G.SBOX[t >>> 24] << 24) | + (G.SBOX[(t >>> 16) & 0xff] << 16) | + (G.SBOX[(t >>> 8) & 0xff] << 8) | + (G.SBOX[t & 0xff]) + + t ^= RCON[(k / keySize) | 0] << 24 + } else if (keySize > 6 && k % keySize === 4) { + t = + (G.SBOX[t >>> 24] << 24) | + (G.SBOX[(t >>> 16) & 0xff] << 16) | + (G.SBOX[(t >>> 8) & 0xff] << 8) | + (G.SBOX[t & 0xff]) + } + + keySchedule[k] = keySchedule[k - keySize] ^ t + } + + var invKeySchedule = [] + for (var ik = 0; ik < ksRows; ik++) { + var ksR = ksRows - ik + var tt = keySchedule[ksR - (ik % 4 ? 0 : 4)] + + if (ik < 4 || ksR <= 4) { + invKeySchedule[ik] = tt + } else { + invKeySchedule[ik] = + G.INV_SUB_MIX[0][G.SBOX[tt >>> 24]] ^ + G.INV_SUB_MIX[1][G.SBOX[(tt >>> 16) & 0xff]] ^ + G.INV_SUB_MIX[2][G.SBOX[(tt >>> 8) & 0xff]] ^ + G.INV_SUB_MIX[3][G.SBOX[tt & 0xff]] + } + } + + this._nRounds = nRounds + this._keySchedule = keySchedule + this._invKeySchedule = invKeySchedule +} + +AES.prototype.encryptBlockRaw = function (M) { + M = asUInt32Array(M) + return cryptBlock(M, this._keySchedule, G.SUB_MIX, G.SBOX, this._nRounds) +} + +AES.prototype.encryptBlock = function (M) { + var out = this.encryptBlockRaw(M) + var buf = Buffer.allocUnsafe(16) + buf.writeUInt32BE(out[0], 0) + buf.writeUInt32BE(out[1], 4) + buf.writeUInt32BE(out[2], 8) + buf.writeUInt32BE(out[3], 12) + return buf +} + +AES.prototype.decryptBlock = function (M) { + M = asUInt32Array(M) + + // swap + var m1 = M[1] + M[1] = M[3] + M[3] = m1 + + var out = cryptBlock(M, this._invKeySchedule, G.INV_SUB_MIX, G.INV_SBOX, this._nRounds) + var buf = Buffer.allocUnsafe(16) + buf.writeUInt32BE(out[0], 0) + buf.writeUInt32BE(out[3], 4) + buf.writeUInt32BE(out[2], 8) + buf.writeUInt32BE(out[1], 12) + return buf +} + +AES.prototype.scrub = function () { + scrubVec(this._keySchedule) + scrubVec(this._invKeySchedule) + scrubVec(this._key) +} + +module.exports.AES = AES + + +}, +15407(module, __unused_webpack_exports, __webpack_require__) { +var aes = __webpack_require__(22643) +var Buffer = (__webpack_require__(46279)/* .Buffer */.Buffer) +var Transform = __webpack_require__(27416) +var inherits = __webpack_require__(86040) +var GHASH = __webpack_require__(20841) +var xor = __webpack_require__(56483) +var incr32 = __webpack_require__(6129) + +function xorTest (a, b) { + var out = 0 + if (a.length !== b.length) out++ + + var len = Math.min(a.length, b.length) + for (var i = 0; i < len; ++i) { + out += (a[i] ^ b[i]) + } + + return out +} + +function calcIv (self, iv, ck) { + if (iv.length === 12) { + self._finID = Buffer.concat([iv, Buffer.from([0, 0, 0, 1])]) + return Buffer.concat([iv, Buffer.from([0, 0, 0, 2])]) + } + var ghash = new GHASH(ck) + var len = iv.length + var toPad = len % 16 + ghash.update(iv) + if (toPad) { + toPad = 16 - toPad + ghash.update(Buffer.alloc(toPad, 0)) + } + ghash.update(Buffer.alloc(8, 0)) + var ivBits = len * 8 + var tail = Buffer.alloc(8) + tail.writeUIntBE(ivBits, 0, 8) + ghash.update(tail) + self._finID = ghash.state + var out = Buffer.from(self._finID) + incr32(out) + return out +} +function StreamCipher (mode, key, iv, decrypt) { + Transform.call(this) + + var h = Buffer.alloc(4, 0) + + this._cipher = new aes.AES(key) + var ck = this._cipher.encryptBlock(h) + this._ghash = new GHASH(ck) + iv = calcIv(this, iv, ck) + + this._prev = Buffer.from(iv) + this._cache = Buffer.allocUnsafe(0) + this._secCache = Buffer.allocUnsafe(0) + this._decrypt = decrypt + this._alen = 0 + this._len = 0 + this._mode = mode + + this._authTag = null + this._called = false +} + +inherits(StreamCipher, Transform) + +StreamCipher.prototype._update = function (chunk) { + if (!this._called && this._alen) { + var rump = 16 - (this._alen % 16) + if (rump < 16) { + rump = Buffer.alloc(rump, 0) + this._ghash.update(rump) + } + } + + this._called = true + var out = this._mode.encrypt(this, chunk) + if (this._decrypt) { + this._ghash.update(chunk) + } else { + this._ghash.update(out) + } + this._len += chunk.length + return out +} + +StreamCipher.prototype._final = function () { + if (this._decrypt && !this._authTag) throw new Error('Unsupported state or unable to authenticate data') + + var tag = xor(this._ghash.final(this._alen * 8, this._len * 8), this._cipher.encryptBlock(this._finID)) + if (this._decrypt && xorTest(tag, this._authTag)) throw new Error('Unsupported state or unable to authenticate data') + + this._authTag = tag + this._cipher.scrub() +} + +StreamCipher.prototype.getAuthTag = function getAuthTag () { + if (this._decrypt || !Buffer.isBuffer(this._authTag)) throw new Error('Attempting to get auth tag in unsupported state') + + return this._authTag +} + +StreamCipher.prototype.setAuthTag = function setAuthTag (tag) { + if (!this._decrypt) throw new Error('Attempting to set auth tag in unsupported state') + + this._authTag = tag +} + +StreamCipher.prototype.setAAD = function setAAD (buf) { + if (this._called) throw new Error('Attempting to set AAD in unsupported state') + + this._ghash.update(buf) + this._alen += buf.length +} + +module.exports = StreamCipher + + +}, +43528(__unused_webpack_module, exports, __webpack_require__) { +var ciphers = __webpack_require__(55442) +var deciphers = __webpack_require__(32586) +var modes = __webpack_require__(39072) + +function getCiphers () { + return Object.keys(modes) +} + +exports.createCipher = exports.Cipher = ciphers.createCipher +exports.createCipheriv = exports.Cipheriv = ciphers.createCipheriv +exports.createDecipher = exports.Decipher = deciphers.createDecipher +exports.createDecipheriv = exports.Decipheriv = deciphers.createDecipheriv +exports.listCiphers = exports.getCiphers = getCiphers + + +}, +32586(__unused_webpack_module, exports, __webpack_require__) { +var AuthCipher = __webpack_require__(15407) +var Buffer = (__webpack_require__(46279)/* .Buffer */.Buffer) +var MODES = __webpack_require__(3579) +var StreamCipher = __webpack_require__(27017) +var Transform = __webpack_require__(27416) +var aes = __webpack_require__(22643) +var ebtk = __webpack_require__(43563) +var inherits = __webpack_require__(86040) + +function Decipher (mode, key, iv) { + Transform.call(this) + + this._cache = new Splitter() + this._last = void 0 + this._cipher = new aes.AES(key) + this._prev = Buffer.from(iv) + this._mode = mode + this._autopadding = true +} + +inherits(Decipher, Transform) + +Decipher.prototype._update = function (data) { + this._cache.add(data) + var chunk + var thing + var out = [] + while ((chunk = this._cache.get(this._autopadding))) { + thing = this._mode.decrypt(this, chunk) + out.push(thing) + } + return Buffer.concat(out) +} + +Decipher.prototype._final = function () { + var chunk = this._cache.flush() + if (this._autopadding) { + return unpad(this._mode.decrypt(this, chunk)) + } else if (chunk) { + throw new Error('data not multiple of block length') + } +} + +Decipher.prototype.setAutoPadding = function (setTo) { + this._autopadding = !!setTo + return this +} + +function Splitter () { + this.cache = Buffer.allocUnsafe(0) +} + +Splitter.prototype.add = function (data) { + this.cache = Buffer.concat([this.cache, data]) +} + +Splitter.prototype.get = function (autoPadding) { + var out + if (autoPadding) { + if (this.cache.length > 16) { + out = this.cache.slice(0, 16) + this.cache = this.cache.slice(16) + return out + } + } else { + if (this.cache.length >= 16) { + out = this.cache.slice(0, 16) + this.cache = this.cache.slice(16) + return out + } + } + + return null +} + +Splitter.prototype.flush = function () { + if (this.cache.length) return this.cache +} + +function unpad (last) { + var padded = last[15] + if (padded < 1 || padded > 16) { + throw new Error('unable to decrypt data') + } + var i = -1 + while (++i < padded) { + if (last[(i + (16 - padded))] !== padded) { + throw new Error('unable to decrypt data') + } + } + if (padded === 16) return + + return last.slice(0, 16 - padded) +} + +function createDecipheriv (suite, password, iv) { + var config = MODES[suite.toLowerCase()] + if (!config) throw new TypeError('invalid suite type') + + if (typeof iv === 'string') iv = Buffer.from(iv) + if (config.mode !== 'GCM' && iv.length !== config.iv) throw new TypeError('invalid iv length ' + iv.length) + + if (typeof password === 'string') password = Buffer.from(password) + if (password.length !== config.key / 8) throw new TypeError('invalid key length ' + password.length) + + if (config.type === 'stream') { + return new StreamCipher(config.module, password, iv, true) + } else if (config.type === 'auth') { + return new AuthCipher(config.module, password, iv, true) + } + + return new Decipher(config.module, password, iv) +} + +function createDecipher (suite, password) { + var config = MODES[suite.toLowerCase()] + if (!config) throw new TypeError('invalid suite type') + + var keys = ebtk(password, false, config.key, config.iv) + return createDecipheriv(suite, keys.key, keys.iv) +} + +exports.createDecipher = createDecipher +exports.createDecipheriv = createDecipheriv + + +}, +55442(__unused_webpack_module, exports, __webpack_require__) { +var MODES = __webpack_require__(3579) +var AuthCipher = __webpack_require__(15407) +var Buffer = (__webpack_require__(46279)/* .Buffer */.Buffer) +var StreamCipher = __webpack_require__(27017) +var Transform = __webpack_require__(27416) +var aes = __webpack_require__(22643) +var ebtk = __webpack_require__(43563) +var inherits = __webpack_require__(86040) + +function Cipher (mode, key, iv) { + Transform.call(this) + + this._cache = new Splitter() + this._cipher = new aes.AES(key) + this._prev = Buffer.from(iv) + this._mode = mode + this._autopadding = true +} + +inherits(Cipher, Transform) + +Cipher.prototype._update = function (data) { + this._cache.add(data) + var chunk + var thing + var out = [] + + while ((chunk = this._cache.get())) { + thing = this._mode.encrypt(this, chunk) + out.push(thing) + } + + return Buffer.concat(out) +} + +var PADDING = Buffer.alloc(16, 0x10) + +Cipher.prototype._final = function () { + var chunk = this._cache.flush() + if (this._autopadding) { + chunk = this._mode.encrypt(this, chunk) + this._cipher.scrub() + return chunk + } + + if (!chunk.equals(PADDING)) { + this._cipher.scrub() + throw new Error('data not multiple of block length') + } +} + +Cipher.prototype.setAutoPadding = function (setTo) { + this._autopadding = !!setTo + return this +} + +function Splitter () { + this.cache = Buffer.allocUnsafe(0) +} + +Splitter.prototype.add = function (data) { + this.cache = Buffer.concat([this.cache, data]) +} + +Splitter.prototype.get = function () { + if (this.cache.length > 15) { + var out = this.cache.slice(0, 16) + this.cache = this.cache.slice(16) + return out + } + return null +} + +Splitter.prototype.flush = function () { + var len = 16 - this.cache.length + var padBuff = Buffer.allocUnsafe(len) + + var i = -1 + while (++i < len) { + padBuff.writeUInt8(len, i) + } + + return Buffer.concat([this.cache, padBuff]) +} + +function createCipheriv (suite, password, iv) { + var config = MODES[suite.toLowerCase()] + if (!config) throw new TypeError('invalid suite type') + + if (typeof password === 'string') password = Buffer.from(password) + if (password.length !== config.key / 8) throw new TypeError('invalid key length ' + password.length) + + if (typeof iv === 'string') iv = Buffer.from(iv) + if (config.mode !== 'GCM' && iv.length !== config.iv) throw new TypeError('invalid iv length ' + iv.length) + + if (config.type === 'stream') { + return new StreamCipher(config.module, password, iv) + } else if (config.type === 'auth') { + return new AuthCipher(config.module, password, iv) + } + + return new Cipher(config.module, password, iv) +} + +function createCipher (suite, password) { + var config = MODES[suite.toLowerCase()] + if (!config) throw new TypeError('invalid suite type') + + var keys = ebtk(password, false, config.key, config.iv) + return createCipheriv(suite, keys.key, keys.iv) +} + +exports.createCipheriv = createCipheriv +exports.createCipher = createCipher + + +}, +20841(module, __unused_webpack_exports, __webpack_require__) { +var Buffer = (__webpack_require__(46279)/* .Buffer */.Buffer) +var ZEROES = Buffer.alloc(16, 0) + +function toArray (buf) { + return [ + buf.readUInt32BE(0), + buf.readUInt32BE(4), + buf.readUInt32BE(8), + buf.readUInt32BE(12) + ] +} + +function fromArray (out) { + var buf = Buffer.allocUnsafe(16) + buf.writeUInt32BE(out[0] >>> 0, 0) + buf.writeUInt32BE(out[1] >>> 0, 4) + buf.writeUInt32BE(out[2] >>> 0, 8) + buf.writeUInt32BE(out[3] >>> 0, 12) + return buf +} + +function GHASH (key) { + this.h = key + this.state = Buffer.alloc(16, 0) + this.cache = Buffer.allocUnsafe(0) +} + +// from http://bitwiseshiftleft.github.io/sjcl/doc/symbols/src/core_gcm.js.html +// by Juho Vähä-Herttua +GHASH.prototype.ghash = function (block) { + var i = -1 + while (++i < block.length) { + this.state[i] ^= block[i] + } + this._multiply() +} + +GHASH.prototype._multiply = function () { + var Vi = toArray(this.h) + var Zi = [0, 0, 0, 0] + var j, xi, lsbVi + var i = -1 + while (++i < 128) { + xi = (this.state[~~(i / 8)] & (1 << (7 - (i % 8)))) !== 0 + if (xi) { + // Z_i+1 = Z_i ^ V_i + Zi[0] ^= Vi[0] + Zi[1] ^= Vi[1] + Zi[2] ^= Vi[2] + Zi[3] ^= Vi[3] + } + + // Store the value of LSB(V_i) + lsbVi = (Vi[3] & 1) !== 0 + + // V_i+1 = V_i >> 1 + for (j = 3; j > 0; j--) { + Vi[j] = (Vi[j] >>> 1) | ((Vi[j - 1] & 1) << 31) + } + Vi[0] = Vi[0] >>> 1 + + // If LSB(V_i) is 1, V_i+1 = (V_i >> 1) ^ R + if (lsbVi) { + Vi[0] = Vi[0] ^ (0xe1 << 24) + } + } + this.state = fromArray(Zi) +} + +GHASH.prototype.update = function (buf) { + this.cache = Buffer.concat([this.cache, buf]) + var chunk + while (this.cache.length >= 16) { + chunk = this.cache.slice(0, 16) + this.cache = this.cache.slice(16) + this.ghash(chunk) + } +} + +GHASH.prototype.final = function (abl, bl) { + if (this.cache.length) { + this.ghash(Buffer.concat([this.cache, ZEROES], 16)) + } + + this.ghash(fromArray([0, abl, 0, bl])) + return this.state +} + +module.exports = GHASH + + +}, +6129(module) { +function incr32 (iv) { + var len = iv.length + var item + while (len--) { + item = iv.readUInt8(len) + if (item === 255) { + iv.writeUInt8(0, len) + } else { + item++ + iv.writeUInt8(item, len) + break + } + } +} +module.exports = incr32 + + +}, +30401(__unused_webpack_module, exports, __webpack_require__) { +var xor = __webpack_require__(56483) + +exports.encrypt = function (self, block) { + var data = xor(block, self._prev) + + self._prev = self._cipher.encryptBlock(data) + return self._prev +} + +exports.decrypt = function (self, block) { + var pad = self._prev + + self._prev = block + var out = self._cipher.decryptBlock(block) + + return xor(out, pad) +} + + +}, +14809(__unused_webpack_module, exports, __webpack_require__) { +var Buffer = (__webpack_require__(46279)/* .Buffer */.Buffer) +var xor = __webpack_require__(56483) + +function encryptStart (self, data, decrypt) { + var len = data.length + var out = xor(data, self._cache) + self._cache = self._cache.slice(len) + self._prev = Buffer.concat([self._prev, decrypt ? data : out]) + return out +} + +exports.encrypt = function (self, data, decrypt) { + var out = Buffer.allocUnsafe(0) + var len + + while (data.length) { + if (self._cache.length === 0) { + self._cache = self._cipher.encryptBlock(self._prev) + self._prev = Buffer.allocUnsafe(0) + } + + if (self._cache.length <= data.length) { + len = self._cache.length + out = Buffer.concat([out, encryptStart(self, data.slice(0, len), decrypt)]) + data = data.slice(len) + } else { + out = Buffer.concat([out, encryptStart(self, data, decrypt)]) + break + } + } + + return out +} + + +}, +64043(__unused_webpack_module, exports, __webpack_require__) { +var Buffer = (__webpack_require__(46279)/* .Buffer */.Buffer) + +function encryptByte (self, byteParam, decrypt) { + var pad + var i = -1 + var len = 8 + var out = 0 + var bit, value + while (++i < len) { + pad = self._cipher.encryptBlock(self._prev) + bit = (byteParam & (1 << (7 - i))) ? 0x80 : 0 + value = pad[0] ^ bit + out += ((value & 0x80) >> (i % 8)) + self._prev = shiftIn(self._prev, decrypt ? bit : value) + } + return out +} + +function shiftIn (buffer, value) { + var len = buffer.length + var i = -1 + var out = Buffer.allocUnsafe(buffer.length) + buffer = Buffer.concat([buffer, Buffer.from([value])]) + + while (++i < len) { + out[i] = buffer[i] << 1 | buffer[i + 1] >> (7) + } + + return out +} + +exports.encrypt = function (self, chunk, decrypt) { + var len = chunk.length + var out = Buffer.allocUnsafe(len) + var i = -1 + + while (++i < len) { + out[i] = encryptByte(self, chunk[i], decrypt) + } + + return out +} + + +}, +48380(__unused_webpack_module, exports, __webpack_require__) { +var Buffer = (__webpack_require__(46279)/* .Buffer */.Buffer) + +function encryptByte (self, byteParam, decrypt) { + var pad = self._cipher.encryptBlock(self._prev) + var out = pad[0] ^ byteParam + + self._prev = Buffer.concat([ + self._prev.slice(1), + Buffer.from([decrypt ? byteParam : out]) + ]) + + return out +} + +exports.encrypt = function (self, chunk, decrypt) { + var len = chunk.length + var out = Buffer.allocUnsafe(len) + var i = -1 + + while (++i < len) { + out[i] = encryptByte(self, chunk[i], decrypt) + } + + return out +} + + +}, +49924(__unused_webpack_module, exports, __webpack_require__) { +var xor = __webpack_require__(56483) +var Buffer = (__webpack_require__(46279)/* .Buffer */.Buffer) +var incr32 = __webpack_require__(6129) + +function getBlock (self) { + var out = self._cipher.encryptBlockRaw(self._prev) + incr32(self._prev) + return out +} + +var blockSize = 16 +exports.encrypt = function (self, chunk) { + var chunkNum = Math.ceil(chunk.length / blockSize) + var start = self._cache.length + self._cache = Buffer.concat([ + self._cache, + Buffer.allocUnsafe(chunkNum * blockSize) + ]) + for (var i = 0; i < chunkNum; i++) { + var out = getBlock(self) + var offset = start + i * blockSize + self._cache.writeUInt32BE(out[0], offset + 0) + self._cache.writeUInt32BE(out[1], offset + 4) + self._cache.writeUInt32BE(out[2], offset + 8) + self._cache.writeUInt32BE(out[3], offset + 12) + } + var pad = self._cache.slice(0, chunk.length) + self._cache = self._cache.slice(chunk.length) + return xor(chunk, pad) +} + + +}, +63917(__unused_webpack_module, exports) { +exports.encrypt = function (self, block) { + return self._cipher.encryptBlock(block) +} + +exports.decrypt = function (self, block) { + return self._cipher.decryptBlock(block) +} + + +}, +3579(module, __unused_webpack_exports, __webpack_require__) { +var modeModules = { + ECB: __webpack_require__(63917), + CBC: __webpack_require__(30401), + CFB: __webpack_require__(14809), + CFB8: __webpack_require__(48380), + CFB1: __webpack_require__(64043), + OFB: __webpack_require__(68194), + CTR: __webpack_require__(49924), + GCM: __webpack_require__(49924) +} + +var modes = __webpack_require__(39072) + +for (var key in modes) { + modes[key].module = modeModules[modes[key].mode] +} + +module.exports = modes + + +}, +68194(__unused_webpack_module, exports, __webpack_require__) { +var xor = __webpack_require__(56483) + +function getBlock (self) { + self._prev = self._cipher.encryptBlock(self._prev) + return self._prev +} + +exports.encrypt = function (self, chunk) { + while (self._cache.length < chunk.length) { + self._cache = Buffer.concat([self._cache, getBlock(self)]) + } + + var pad = self._cache.slice(0, chunk.length) + self._cache = self._cache.slice(chunk.length) + return xor(chunk, pad) +} + + +}, +27017(module, __unused_webpack_exports, __webpack_require__) { +var aes = __webpack_require__(22643) +var Buffer = (__webpack_require__(46279)/* .Buffer */.Buffer) +var Transform = __webpack_require__(27416) +var inherits = __webpack_require__(86040) + +function StreamCipher (mode, key, iv, decrypt) { + Transform.call(this) + + this._cipher = new aes.AES(key) + this._prev = Buffer.from(iv) + this._cache = Buffer.allocUnsafe(0) + this._secCache = Buffer.allocUnsafe(0) + this._decrypt = decrypt + this._mode = mode +} + +inherits(StreamCipher, Transform) + +StreamCipher.prototype._update = function (chunk) { + return this._mode.encrypt(this, chunk, this._decrypt) +} + +StreamCipher.prototype._final = function () { + this._cipher.scrub() +} + +module.exports = StreamCipher + + +}, +13925(__unused_webpack_module, exports, __webpack_require__) { +var DES = __webpack_require__(75128) +var aes = __webpack_require__(43528) +var aesModes = __webpack_require__(3579) +var desModes = __webpack_require__(44552) +var ebtk = __webpack_require__(43563) + +function createCipher (suite, password) { + suite = suite.toLowerCase() + + var keyLen, ivLen + if (aesModes[suite]) { + keyLen = aesModes[suite].key + ivLen = aesModes[suite].iv + } else if (desModes[suite]) { + keyLen = desModes[suite].key * 8 + ivLen = desModes[suite].iv + } else { + throw new TypeError('invalid suite type') + } + + var keys = ebtk(password, false, keyLen, ivLen) + return createCipheriv(suite, keys.key, keys.iv) +} + +function createDecipher (suite, password) { + suite = suite.toLowerCase() + + var keyLen, ivLen + if (aesModes[suite]) { + keyLen = aesModes[suite].key + ivLen = aesModes[suite].iv + } else if (desModes[suite]) { + keyLen = desModes[suite].key * 8 + ivLen = desModes[suite].iv + } else { + throw new TypeError('invalid suite type') + } + + var keys = ebtk(password, false, keyLen, ivLen) + return createDecipheriv(suite, keys.key, keys.iv) +} + +function createCipheriv (suite, key, iv) { + suite = suite.toLowerCase() + if (aesModes[suite]) return aes.createCipheriv(suite, key, iv) + if (desModes[suite]) return new DES({ key: key, iv: iv, mode: suite }) + + throw new TypeError('invalid suite type') +} + +function createDecipheriv (suite, key, iv) { + suite = suite.toLowerCase() + if (aesModes[suite]) return aes.createDecipheriv(suite, key, iv) + if (desModes[suite]) return new DES({ key: key, iv: iv, mode: suite, decrypt: true }) + + throw new TypeError('invalid suite type') +} + +function getCiphers () { + return Object.keys(desModes).concat(aes.getCiphers()) +} + +exports.createCipher = exports.Cipher = createCipher +exports.createCipheriv = exports.Cipheriv = createCipheriv +exports.createDecipher = exports.Decipher = createDecipher +exports.createDecipheriv = exports.Decipheriv = createDecipheriv +exports.listCiphers = exports.getCiphers = getCiphers + + +}, +75128(module, __unused_webpack_exports, __webpack_require__) { +var CipherBase = __webpack_require__(27416) +var des = __webpack_require__(88833) +var inherits = __webpack_require__(86040) +var Buffer = (__webpack_require__(46279)/* .Buffer */.Buffer) + +var modes = { + 'des-ede3-cbc': des.CBC.instantiate(des.EDE), + 'des-ede3': des.EDE, + 'des-ede-cbc': des.CBC.instantiate(des.EDE), + 'des-ede': des.EDE, + 'des-cbc': des.CBC.instantiate(des.DES), + 'des-ecb': des.DES +} +modes.des = modes['des-cbc'] +modes.des3 = modes['des-ede3-cbc'] +module.exports = DES +inherits(DES, CipherBase) +function DES (opts) { + CipherBase.call(this) + var modeName = opts.mode.toLowerCase() + var mode = modes[modeName] + var type + if (opts.decrypt) { + type = 'decrypt' + } else { + type = 'encrypt' + } + var key = opts.key + if (!Buffer.isBuffer(key)) { + key = Buffer.from(key) + } + if (modeName === 'des-ede' || modeName === 'des-ede-cbc') { + key = Buffer.concat([key, key.slice(0, 8)]) + } + var iv = opts.iv + if (!Buffer.isBuffer(iv)) { + iv = Buffer.from(iv) + } + this._des = mode.create({ + key: key, + iv: iv, + type: type + }) +} +DES.prototype._update = function (data) { + return Buffer.from(this._des.update(data)) +} +DES.prototype._final = function () { + return Buffer.from(this._des.final()) +} + + +}, +44552(__unused_webpack_module, exports) { +exports["des-ecb"] = { + key: 8, + iv: 0 +} +exports["des-cbc"] = exports.des = { + key: 8, + iv: 8 +} +exports["des-ede3-cbc"] = exports.des3 = { + key: 24, + iv: 8 +} +exports["des-ede3"] = { + key: 24, + iv: 0 +} +exports["des-ede-cbc"] = { + key: 16, + iv: 8 +} +exports["des-ede"] = { + key: 16, + iv: 0 +} + + +}, +3657(module, __unused_webpack_exports, __webpack_require__) { +"use strict"; + + +var BN = __webpack_require__(79657); +var randomBytes = __webpack_require__(31734); +var Buffer = (__webpack_require__(46279)/* .Buffer */.Buffer); + +function getr(priv) { + var len = priv.modulus.byteLength(); + var r; + do { + r = new BN(randomBytes(len)); + } while (r.cmp(priv.modulus) >= 0 || !r.umod(priv.prime1) || !r.umod(priv.prime2)); + return r; +} + +function blind(priv) { + var r = getr(priv); + var blinder = r.toRed(BN.mont(priv.modulus)).redPow(new BN(priv.publicExponent)).fromRed(); + return { blinder: blinder, unblinder: r.invm(priv.modulus) }; +} + +function crt(msg, priv) { + var blinds = blind(priv); + var len = priv.modulus.byteLength(); + var blinded = new BN(msg).mul(blinds.blinder).umod(priv.modulus); + var c1 = blinded.toRed(BN.mont(priv.prime1)); + var c2 = blinded.toRed(BN.mont(priv.prime2)); + var qinv = priv.coefficient; + var p = priv.prime1; + var q = priv.prime2; + var m1 = c1.redPow(priv.exponent1).fromRed(); + var m2 = c2.redPow(priv.exponent2).fromRed(); + var h = m1.isub(m2).imul(qinv).umod(p).imul(q); + return m2.iadd(h).imul(blinds.unblinder).umod(priv.modulus).toArrayLike(Buffer, 'be', len); +} +crt.getr = getr; + +module.exports = crt; + + +}, +72040(module, __unused_webpack_exports, __webpack_require__) { +"use strict"; + + +module.exports = __webpack_require__(76178); + + +}, +20007(module, __unused_webpack_exports, __webpack_require__) { +"use strict"; + + +var Buffer = (__webpack_require__(46279)/* .Buffer */.Buffer); +var createHash = __webpack_require__(73752); +var stream = __webpack_require__(27581); +var inherits = __webpack_require__(86040); +var sign = __webpack_require__(18158); +var verify = __webpack_require__(34786); + +var algorithms = __webpack_require__(76178); +Object.keys(algorithms).forEach(function (key) { + algorithms[key].id = Buffer.from(algorithms[key].id, 'hex'); + algorithms[key.toLowerCase()] = algorithms[key]; +}); + +function Sign(algorithm) { + stream.Writable.call(this); + + var data = algorithms[algorithm]; + if (!data) { throw new Error('Unknown message digest'); } + + this._hashType = data.hash; + this._hash = createHash(data.hash); + this._tag = data.id; + this._signType = data.sign; +} +inherits(Sign, stream.Writable); + +Sign.prototype._write = function _write(data, _, done) { + this._hash.update(data); + done(); +}; + +Sign.prototype.update = function update(data, enc) { + this._hash.update(typeof data === 'string' ? Buffer.from(data, enc) : data); + + return this; +}; + +Sign.prototype.sign = function signMethod(key, enc) { + this.end(); + var hash = this._hash.digest(); + var sig = sign(hash, key, this._hashType, this._signType, this._tag); + + return enc ? sig.toString(enc) : sig; +}; + +function Verify(algorithm) { + stream.Writable.call(this); + + var data = algorithms[algorithm]; + if (!data) { throw new Error('Unknown message digest'); } + + this._hash = createHash(data.hash); + this._tag = data.id; + this._signType = data.sign; +} +inherits(Verify, stream.Writable); + +Verify.prototype._write = function _write(data, _, done) { + this._hash.update(data); + done(); +}; + +Verify.prototype.update = function update(data, enc) { + this._hash.update(typeof data === 'string' ? Buffer.from(data, enc) : data); + + return this; +}; + +Verify.prototype.verify = function verifyMethod(key, sig, enc) { + var sigBuffer = typeof sig === 'string' ? Buffer.from(sig, enc) : sig; + + this.end(); + var hash = this._hash.digest(); + return verify(sigBuffer, hash, key, this._signType, this._tag); +}; + +function createSign(algorithm) { + return new Sign(algorithm); +} + +function createVerify(algorithm) { + return new Verify(algorithm); +} + +module.exports = { + Sign: createSign, + Verify: createVerify, + createSign: createSign, + createVerify: createVerify +}; + + +}, +18158(module, __unused_webpack_exports, __webpack_require__) { +"use strict"; + + +// much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js +var Buffer = (__webpack_require__(46279)/* .Buffer */.Buffer); +var createHmac = __webpack_require__(65870); +var crt = __webpack_require__(3657); +var EC = (__webpack_require__(92090)/* .ec */.ec); +var BN = __webpack_require__(79657); +var parseKeys = __webpack_require__(580); +var curves = __webpack_require__(69644); + +var RSA_PKCS1_PADDING = 1; + +function sign(hash, key, hashType, signType, tag) { + var priv = parseKeys(key); + if (priv.curve) { + // rsa keys can be interpreted as ecdsa ones in openssl + if (signType !== 'ecdsa' && signType !== 'ecdsa/rsa') { throw new Error('wrong private key type'); } + return ecSign(hash, priv); + } else if (priv.type === 'dsa') { + if (signType !== 'dsa') { throw new Error('wrong private key type'); } + return dsaSign(hash, priv, hashType); + } + if (signType !== 'rsa' && signType !== 'ecdsa/rsa') { throw new Error('wrong private key type'); } + if (key.padding !== undefined && key.padding !== RSA_PKCS1_PADDING) { throw new Error('illegal or unsupported padding mode'); } + + hash = Buffer.concat([tag, hash]); + var len = priv.modulus.byteLength(); + var pad = [0, 1]; + while (hash.length + pad.length + 1 < len) { pad.push(0xff); } + pad.push(0x00); + var i = -1; + while (++i < hash.length) { pad.push(hash[i]); } + + var out = crt(pad, priv); + return out; +} + +function ecSign(hash, priv) { + var curveId = curves[priv.curve.join('.')]; + if (!curveId) { throw new Error('unknown curve ' + priv.curve.join('.')); } + + var curve = new EC(curveId); + var key = curve.keyFromPrivate(priv.privateKey); + var out = key.sign(hash); + + return Buffer.from(out.toDER()); +} + +function dsaSign(hash, priv, algo) { + var x = priv.params.priv_key; + var p = priv.params.p; + var q = priv.params.q; + var g = priv.params.g; + var r = new BN(0); + var k; + var H = bits2int(hash, q).mod(q); + var s = false; + var kv = getKey(x, q, hash, algo); + while (s === false) { + k = makeKey(q, kv, algo); + r = makeR(g, k, p, q); + s = k.invm(q).imul(H.add(x.mul(r))).mod(q); + if (s.cmpn(0) === 0) { + s = false; + r = new BN(0); + } + } + return toDER(r, s); +} + +function toDER(r, s) { + r = r.toArray(); + s = s.toArray(); + + // Pad values + if (r[0] & 0x80) { r = [0].concat(r); } + if (s[0] & 0x80) { s = [0].concat(s); } + + var total = r.length + s.length + 4; + var res = [ + 0x30, total, 0x02, r.length + ]; + res = res.concat(r, [0x02, s.length], s); + return Buffer.from(res); +} + +function getKey(x, q, hash, algo) { + x = Buffer.from(x.toArray()); + if (x.length < q.byteLength()) { + var zeros = Buffer.alloc(q.byteLength() - x.length); + x = Buffer.concat([zeros, x]); + } + var hlen = hash.length; + var hbits = bits2octets(hash, q); + var v = Buffer.alloc(hlen); + v.fill(1); + var k = Buffer.alloc(hlen); + k = createHmac(algo, k).update(v).update(Buffer.from([0])).update(x).update(hbits).digest(); + v = createHmac(algo, k).update(v).digest(); + k = createHmac(algo, k).update(v).update(Buffer.from([1])).update(x).update(hbits).digest(); + v = createHmac(algo, k).update(v).digest(); + return { k: k, v: v }; +} + +function bits2int(obits, q) { + var bits = new BN(obits); + var shift = (obits.length << 3) - q.bitLength(); + if (shift > 0) { bits.ishrn(shift); } + return bits; +} + +function bits2octets(bits, q) { + bits = bits2int(bits, q); + bits = bits.mod(q); + var out = Buffer.from(bits.toArray()); + if (out.length < q.byteLength()) { + var zeros = Buffer.alloc(q.byteLength() - out.length); + out = Buffer.concat([zeros, out]); + } + return out; +} + +function makeKey(q, kv, algo) { + var t; + var k; + + do { + t = Buffer.alloc(0); + + while (t.length * 8 < q.bitLength()) { + kv.v = createHmac(algo, kv.k).update(kv.v).digest(); + t = Buffer.concat([t, kv.v]); + } + + k = bits2int(t, q); + kv.k = createHmac(algo, kv.k).update(kv.v).update(Buffer.from([0])).digest(); + kv.v = createHmac(algo, kv.k).update(kv.v).digest(); + } while (k.cmp(q) !== -1); + + return k; +} + +function makeR(g, k, p, q) { + return g.toRed(BN.mont(p)).redPow(k).fromRed().mod(q); +} + +module.exports = sign; +module.exports.getKey = getKey; +module.exports.makeKey = makeKey; + + +}, +34786(module, __unused_webpack_exports, __webpack_require__) { +"use strict"; + + +// much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js +var Buffer = (__webpack_require__(46279)/* .Buffer */.Buffer); +var BN = __webpack_require__(79657); +var EC = (__webpack_require__(92090)/* .ec */.ec); +var parseKeys = __webpack_require__(580); +var curves = __webpack_require__(69644); + +function verify(sig, hash, key, signType, tag) { + var pub = parseKeys(key); + if (pub.type === 'ec') { + // rsa keys can be interpreted as ecdsa ones in openssl + if (signType !== 'ecdsa' && signType !== 'ecdsa/rsa') { throw new Error('wrong public key type'); } + return ecVerify(sig, hash, pub); + } else if (pub.type === 'dsa') { + if (signType !== 'dsa') { throw new Error('wrong public key type'); } + return dsaVerify(sig, hash, pub); + } + if (signType !== 'rsa' && signType !== 'ecdsa/rsa') { throw new Error('wrong public key type'); } + + hash = Buffer.concat([tag, hash]); + var len = pub.modulus.byteLength(); + var pad = [1]; + var padNum = 0; + while (hash.length + pad.length + 2 < len) { + pad.push(0xff); + padNum += 1; + } + pad.push(0x00); + var i = -1; + while (++i < hash.length) { + pad.push(hash[i]); + } + pad = Buffer.from(pad); + var red = BN.mont(pub.modulus); + sig = new BN(sig).toRed(red); + + sig = sig.redPow(new BN(pub.publicExponent)); + sig = Buffer.from(sig.fromRed().toArray()); + var out = padNum < 8 ? 1 : 0; + len = Math.min(sig.length, pad.length); + if (sig.length !== pad.length) { out = 1; } + + i = -1; + while (++i < len) { out |= sig[i] ^ pad[i]; } + return out === 0; +} + +function ecVerify(sig, hash, pub) { + var curveId = curves[pub.data.algorithm.curve.join('.')]; + if (!curveId) { throw new Error('unknown curve ' + pub.data.algorithm.curve.join('.')); } + + var curve = new EC(curveId); + var pubkey = pub.data.subjectPrivateKey.data; + + return curve.verify(hash, sig, pubkey); +} + +function dsaVerify(sig, hash, pub) { + var p = pub.data.p; + var q = pub.data.q; + var g = pub.data.g; + var y = pub.data.pub_key; + var unpacked = parseKeys.signature.decode(sig, 'der'); + var s = unpacked.s; + var r = unpacked.r; + checkValue(s, q); + checkValue(r, q); + var montp = BN.mont(p); + var w = s.invm(q); + var v = g.toRed(montp) + .redPow(new BN(hash).mul(w).mod(q)) + .fromRed() + .mul(y.toRed(montp).redPow(r.mul(w).mod(q)).fromRed()) + .mod(p) + .mod(q); + return v.cmp(r) === 0; +} + +function checkValue(b, q) { + if (b.cmpn(0) <= 0) { throw new Error('invalid sig'); } + if (b.cmp(q) >= 0) { throw new Error('invalid sig'); } +} + +module.exports = verify; + + +}, +56483(module) { +module.exports = function xor (a, b) { + var length = Math.min(a.length, b.length) + var buffer = new Buffer(length) + + for (var i = 0; i < length; ++i) { + buffer[i] = a[i] ^ b[i] + } + + return buffer +} + + +}, +75334(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; +/*! + * The buffer module from node.js, for the browser. + * + * @author Feross Aboukhadijeh + * @license MIT + */ +/* eslint-disable no-proto */ + + + +const base64 = __webpack_require__(8910) +const ieee754 = __webpack_require__(17299) +const customInspectSymbol = + (typeof Symbol === 'function' && typeof Symbol['for'] === 'function') // eslint-disable-line dot-notation + ? Symbol['for']('nodejs.util.inspect.custom') // eslint-disable-line dot-notation + : null + +exports.Buffer = Buffer +exports.SlowBuffer = SlowBuffer +exports.INSPECT_MAX_BYTES = 50 + +const K_MAX_LENGTH = 0x7fffffff +exports.kMaxLength = K_MAX_LENGTH + +/** + * If `Buffer.TYPED_ARRAY_SUPPORT`: + * === true Use Uint8Array implementation (fastest) + * === false Print warning and recommend using `buffer` v4.x which has an Object + * implementation (most compatible, even IE6) + * + * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+, + * Opera 11.6+, iOS 4.2+. + * + * We report that the browser does not support typed arrays if the are not subclassable + * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array` + * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support + * for __proto__ and has a buggy typed array implementation. + */ +Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport() + +if (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' && + typeof console.error === 'function') { + console.error( + 'This browser lacks typed array (Uint8Array) support which is required by ' + + '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.' + ) +} + +function typedArraySupport () { + // Can typed array instances can be augmented? + try { + const arr = new Uint8Array(1) + const proto = { foo: function () { return 42 } } + Object.setPrototypeOf(proto, Uint8Array.prototype) + Object.setPrototypeOf(arr, proto) + return arr.foo() === 42 + } catch (e) { + return false + } +} + +Object.defineProperty(Buffer.prototype, 'parent', { + enumerable: true, + get: function () { + if (!Buffer.isBuffer(this)) return undefined + return this.buffer + } +}) + +Object.defineProperty(Buffer.prototype, 'offset', { + enumerable: true, + get: function () { + if (!Buffer.isBuffer(this)) return undefined + return this.byteOffset + } +}) + +function createBuffer (length) { + if (length > K_MAX_LENGTH) { + throw new RangeError('The value "' + length + '" is invalid for option "size"') + } + // Return an augmented `Uint8Array` instance + const buf = new Uint8Array(length) + Object.setPrototypeOf(buf, Buffer.prototype) + return buf +} + +/** + * The Buffer constructor returns instances of `Uint8Array` that have their + * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of + * `Uint8Array`, so the returned instances will have all the node `Buffer` methods + * and the `Uint8Array` methods. Square bracket notation works as expected -- it + * returns a single octet. + * + * The `Uint8Array` prototype remains unmodified. + */ + +function Buffer (arg, encodingOrOffset, length) { + // Common case. + if (typeof arg === 'number') { + if (typeof encodingOrOffset === 'string') { + throw new TypeError( + 'The "string" argument must be of type string. Received type number' + ) + } + return allocUnsafe(arg) + } + return from(arg, encodingOrOffset, length) +} + +Buffer.poolSize = 8192 // not used by this implementation + +function from (value, encodingOrOffset, length) { + if (typeof value === 'string') { + return fromString(value, encodingOrOffset) + } + + if (ArrayBuffer.isView(value)) { + return fromArrayView(value) + } + + if (value == null) { + throw new TypeError( + 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' + + 'or Array-like Object. Received type ' + (typeof value) + ) + } + + if (isInstance(value, ArrayBuffer) || + (value && isInstance(value.buffer, ArrayBuffer))) { + return fromArrayBuffer(value, encodingOrOffset, length) + } + + if (typeof SharedArrayBuffer !== 'undefined' && + (isInstance(value, SharedArrayBuffer) || + (value && isInstance(value.buffer, SharedArrayBuffer)))) { + return fromArrayBuffer(value, encodingOrOffset, length) + } + + if (typeof value === 'number') { + throw new TypeError( + 'The "value" argument must not be of type number. Received type number' + ) + } + + const valueOf = value.valueOf && value.valueOf() + if (valueOf != null && valueOf !== value) { + return Buffer.from(valueOf, encodingOrOffset, length) + } + + const b = fromObject(value) + if (b) return b + + if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null && + typeof value[Symbol.toPrimitive] === 'function') { + return Buffer.from(value[Symbol.toPrimitive]('string'), encodingOrOffset, length) + } + + throw new TypeError( + 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' + + 'or Array-like Object. Received type ' + (typeof value) + ) +} + +/** + * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError + * if value is a number. + * Buffer.from(str[, encoding]) + * Buffer.from(array) + * Buffer.from(buffer) + * Buffer.from(arrayBuffer[, byteOffset[, length]]) + **/ +Buffer.from = function (value, encodingOrOffset, length) { + return from(value, encodingOrOffset, length) +} + +// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug: +// https://github.com/feross/buffer/pull/148 +Object.setPrototypeOf(Buffer.prototype, Uint8Array.prototype) +Object.setPrototypeOf(Buffer, Uint8Array) + +function assertSize (size) { + if (typeof size !== 'number') { + throw new TypeError('"size" argument must be of type number') + } else if (size < 0) { + throw new RangeError('The value "' + size + '" is invalid for option "size"') + } +} + +function alloc (size, fill, encoding) { + assertSize(size) + if (size <= 0) { + return createBuffer(size) + } + if (fill !== undefined) { + // Only pay attention to encoding if it's a string. This + // prevents accidentally sending in a number that would + // be interpreted as a start offset. + return typeof encoding === 'string' + ? createBuffer(size).fill(fill, encoding) + : createBuffer(size).fill(fill) + } + return createBuffer(size) +} + +/** + * Creates a new filled Buffer instance. + * alloc(size[, fill[, encoding]]) + **/ +Buffer.alloc = function (size, fill, encoding) { + return alloc(size, fill, encoding) +} + +function allocUnsafe (size) { + assertSize(size) + return createBuffer(size < 0 ? 0 : checked(size) | 0) +} + +/** + * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance. + * */ +Buffer.allocUnsafe = function (size) { + return allocUnsafe(size) +} +/** + * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance. + */ +Buffer.allocUnsafeSlow = function (size) { + return allocUnsafe(size) +} + +function fromString (string, encoding) { + if (typeof encoding !== 'string' || encoding === '') { + encoding = 'utf8' + } + + if (!Buffer.isEncoding(encoding)) { + throw new TypeError('Unknown encoding: ' + encoding) + } + + const length = byteLength(string, encoding) | 0 + let buf = createBuffer(length) + + const actual = buf.write(string, encoding) + + if (actual !== length) { + // Writing a hex string, for example, that contains invalid characters will + // cause everything after the first invalid character to be ignored. (e.g. + // 'abxxcd' will be treated as 'ab') + buf = buf.slice(0, actual) + } + + return buf +} + +function fromArrayLike (array) { + const length = array.length < 0 ? 0 : checked(array.length) | 0 + const buf = createBuffer(length) + for (let i = 0; i < length; i += 1) { + buf[i] = array[i] & 255 + } + return buf +} + +function fromArrayView (arrayView) { + if (isInstance(arrayView, Uint8Array)) { + const copy = new Uint8Array(arrayView) + return fromArrayBuffer(copy.buffer, copy.byteOffset, copy.byteLength) + } + return fromArrayLike(arrayView) +} + +function fromArrayBuffer (array, byteOffset, length) { + if (byteOffset < 0 || array.byteLength < byteOffset) { + throw new RangeError('"offset" is outside of buffer bounds') + } + + if (array.byteLength < byteOffset + (length || 0)) { + throw new RangeError('"length" is outside of buffer bounds') + } + + let buf + if (byteOffset === undefined && length === undefined) { + buf = new Uint8Array(array) + } else if (length === undefined) { + buf = new Uint8Array(array, byteOffset) + } else { + buf = new Uint8Array(array, byteOffset, length) + } + + // Return an augmented `Uint8Array` instance + Object.setPrototypeOf(buf, Buffer.prototype) + + return buf +} + +function fromObject (obj) { + if (Buffer.isBuffer(obj)) { + const len = checked(obj.length) | 0 + const buf = createBuffer(len) + + if (buf.length === 0) { + return buf + } + + obj.copy(buf, 0, 0, len) + return buf + } + + if (obj.length !== undefined) { + if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) { + return createBuffer(0) + } + return fromArrayLike(obj) + } + + if (obj.type === 'Buffer' && Array.isArray(obj.data)) { + return fromArrayLike(obj.data) + } +} + +function checked (length) { + // Note: cannot use `length < K_MAX_LENGTH` here because that fails when + // length is NaN (which is otherwise coerced to zero.) + if (length >= K_MAX_LENGTH) { + throw new RangeError('Attempt to allocate Buffer larger than maximum ' + + 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes') + } + return length | 0 +} + +function SlowBuffer (length) { + if (+length != length) { // eslint-disable-line eqeqeq + length = 0 + } + return Buffer.alloc(+length) +} + +Buffer.isBuffer = function isBuffer (b) { + return b != null && b._isBuffer === true && + b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false +} + +Buffer.compare = function compare (a, b) { + if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength) + if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength) + if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) { + throw new TypeError( + 'The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array' + ) + } + + if (a === b) return 0 + + let x = a.length + let y = b.length + + for (let i = 0, len = Math.min(x, y); i < len; ++i) { + if (a[i] !== b[i]) { + x = a[i] + y = b[i] + break + } + } + + if (x < y) return -1 + if (y < x) return 1 + return 0 +} + +Buffer.isEncoding = function isEncoding (encoding) { + switch (String(encoding).toLowerCase()) { + case 'hex': + case 'utf8': + case 'utf-8': + case 'ascii': + case 'latin1': + case 'binary': + case 'base64': + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return true + default: + return false + } +} + +Buffer.concat = function concat (list, length) { + if (!Array.isArray(list)) { + throw new TypeError('"list" argument must be an Array of Buffers') + } + + if (list.length === 0) { + return Buffer.alloc(0) + } + + let i + if (length === undefined) { + length = 0 + for (i = 0; i < list.length; ++i) { + length += list[i].length + } + } + + const buffer = Buffer.allocUnsafe(length) + let pos = 0 + for (i = 0; i < list.length; ++i) { + let buf = list[i] + if (isInstance(buf, Uint8Array)) { + if (pos + buf.length > buffer.length) { + if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf) + buf.copy(buffer, pos) + } else { + Uint8Array.prototype.set.call( + buffer, + buf, + pos + ) + } + } else if (!Buffer.isBuffer(buf)) { + throw new TypeError('"list" argument must be an Array of Buffers') + } else { + buf.copy(buffer, pos) + } + pos += buf.length + } + return buffer +} + +function byteLength (string, encoding) { + if (Buffer.isBuffer(string)) { + return string.length + } + if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) { + return string.byteLength + } + if (typeof string !== 'string') { + throw new TypeError( + 'The "string" argument must be one of type string, Buffer, or ArrayBuffer. ' + + 'Received type ' + typeof string + ) + } + + const len = string.length + const mustMatch = (arguments.length > 2 && arguments[2] === true) + if (!mustMatch && len === 0) return 0 + + // Use a for loop to avoid recursion + let loweredCase = false + for (;;) { + switch (encoding) { + case 'ascii': + case 'latin1': + case 'binary': + return len + case 'utf8': + case 'utf-8': + return utf8ToBytes(string).length + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return len * 2 + case 'hex': + return len >>> 1 + case 'base64': + return base64ToBytes(string).length + default: + if (loweredCase) { + return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8 + } + encoding = ('' + encoding).toLowerCase() + loweredCase = true + } + } +} +Buffer.byteLength = byteLength + +function slowToString (encoding, start, end) { + let loweredCase = false + + // No need to verify that "this.length <= MAX_UINT32" since it's a read-only + // property of a typed array. + + // This behaves neither like String nor Uint8Array in that we set start/end + // to their upper/lower bounds if the value passed is out of range. + // undefined is handled specially as per ECMA-262 6th Edition, + // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization. + if (start === undefined || start < 0) { + start = 0 + } + // Return early if start > this.length. Done here to prevent potential uint32 + // coercion fail below. + if (start > this.length) { + return '' + } + + if (end === undefined || end > this.length) { + end = this.length + } + + if (end <= 0) { + return '' + } + + // Force coercion to uint32. This will also coerce falsey/NaN values to 0. + end >>>= 0 + start >>>= 0 + + if (end <= start) { + return '' + } + + if (!encoding) encoding = 'utf8' + + while (true) { + switch (encoding) { + case 'hex': + return hexSlice(this, start, end) + + case 'utf8': + case 'utf-8': + return utf8Slice(this, start, end) + + case 'ascii': + return asciiSlice(this, start, end) + + case 'latin1': + case 'binary': + return latin1Slice(this, start, end) + + case 'base64': + return base64Slice(this, start, end) + + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return utf16leSlice(this, start, end) + + default: + if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding) + encoding = (encoding + '').toLowerCase() + loweredCase = true + } + } +} + +// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package) +// to detect a Buffer instance. It's not possible to use `instanceof Buffer` +// reliably in a browserify context because there could be multiple different +// copies of the 'buffer' package in use. This method works even for Buffer +// instances that were created from another copy of the `buffer` package. +// See: https://github.com/feross/buffer/issues/154 +Buffer.prototype._isBuffer = true + +function swap (b, n, m) { + const i = b[n] + b[n] = b[m] + b[m] = i +} + +Buffer.prototype.swap16 = function swap16 () { + const len = this.length + if (len % 2 !== 0) { + throw new RangeError('Buffer size must be a multiple of 16-bits') + } + for (let i = 0; i < len; i += 2) { + swap(this, i, i + 1) + } + return this +} + +Buffer.prototype.swap32 = function swap32 () { + const len = this.length + if (len % 4 !== 0) { + throw new RangeError('Buffer size must be a multiple of 32-bits') + } + for (let i = 0; i < len; i += 4) { + swap(this, i, i + 3) + swap(this, i + 1, i + 2) + } + return this +} + +Buffer.prototype.swap64 = function swap64 () { + const len = this.length + if (len % 8 !== 0) { + throw new RangeError('Buffer size must be a multiple of 64-bits') + } + for (let i = 0; i < len; i += 8) { + swap(this, i, i + 7) + swap(this, i + 1, i + 6) + swap(this, i + 2, i + 5) + swap(this, i + 3, i + 4) + } + return this +} + +Buffer.prototype.toString = function toString () { + const length = this.length + if (length === 0) return '' + if (arguments.length === 0) return utf8Slice(this, 0, length) + return slowToString.apply(this, arguments) +} + +Buffer.prototype.toLocaleString = Buffer.prototype.toString + +Buffer.prototype.equals = function equals (b) { + if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer') + if (this === b) return true + return Buffer.compare(this, b) === 0 +} + +Buffer.prototype.inspect = function inspect () { + let str = '' + const max = exports.INSPECT_MAX_BYTES + str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim() + if (this.length > max) str += ' ... ' + return '' +} +if (customInspectSymbol) { + Buffer.prototype[customInspectSymbol] = Buffer.prototype.inspect +} + +Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) { + if (isInstance(target, Uint8Array)) { + target = Buffer.from(target, target.offset, target.byteLength) + } + if (!Buffer.isBuffer(target)) { + throw new TypeError( + 'The "target" argument must be one of type Buffer or Uint8Array. ' + + 'Received type ' + (typeof target) + ) + } + + if (start === undefined) { + start = 0 + } + if (end === undefined) { + end = target ? target.length : 0 + } + if (thisStart === undefined) { + thisStart = 0 + } + if (thisEnd === undefined) { + thisEnd = this.length + } + + if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) { + throw new RangeError('out of range index') + } + + if (thisStart >= thisEnd && start >= end) { + return 0 + } + if (thisStart >= thisEnd) { + return -1 + } + if (start >= end) { + return 1 + } + + start >>>= 0 + end >>>= 0 + thisStart >>>= 0 + thisEnd >>>= 0 + + if (this === target) return 0 + + let x = thisEnd - thisStart + let y = end - start + const len = Math.min(x, y) + + const thisCopy = this.slice(thisStart, thisEnd) + const targetCopy = target.slice(start, end) + + for (let i = 0; i < len; ++i) { + if (thisCopy[i] !== targetCopy[i]) { + x = thisCopy[i] + y = targetCopy[i] + break + } + } + + if (x < y) return -1 + if (y < x) return 1 + return 0 +} + +// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`, +// OR the last index of `val` in `buffer` at offset <= `byteOffset`. +// +// Arguments: +// - buffer - a Buffer to search +// - val - a string, Buffer, or number +// - byteOffset - an index into `buffer`; will be clamped to an int32 +// - encoding - an optional encoding, relevant is val is a string +// - dir - true for indexOf, false for lastIndexOf +function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) { + // Empty buffer means no match + if (buffer.length === 0) return -1 + + // Normalize byteOffset + if (typeof byteOffset === 'string') { + encoding = byteOffset + byteOffset = 0 + } else if (byteOffset > 0x7fffffff) { + byteOffset = 0x7fffffff + } else if (byteOffset < -0x80000000) { + byteOffset = -0x80000000 + } + byteOffset = +byteOffset // Coerce to Number. + if (numberIsNaN(byteOffset)) { + // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer + byteOffset = dir ? 0 : (buffer.length - 1) + } + + // Normalize byteOffset: negative offsets start from the end of the buffer + if (byteOffset < 0) byteOffset = buffer.length + byteOffset + if (byteOffset >= buffer.length) { + if (dir) return -1 + else byteOffset = buffer.length - 1 + } else if (byteOffset < 0) { + if (dir) byteOffset = 0 + else return -1 + } + + // Normalize val + if (typeof val === 'string') { + val = Buffer.from(val, encoding) + } + + // Finally, search either indexOf (if dir is true) or lastIndexOf + if (Buffer.isBuffer(val)) { + // Special case: looking for empty string/buffer always fails + if (val.length === 0) { + return -1 + } + return arrayIndexOf(buffer, val, byteOffset, encoding, dir) + } else if (typeof val === 'number') { + val = val & 0xFF // Search for a byte value [0-255] + if (typeof Uint8Array.prototype.indexOf === 'function') { + if (dir) { + return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset) + } else { + return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset) + } + } + return arrayIndexOf(buffer, [val], byteOffset, encoding, dir) + } + + throw new TypeError('val must be string, number or Buffer') +} + +function arrayIndexOf (arr, val, byteOffset, encoding, dir) { + let indexSize = 1 + let arrLength = arr.length + let valLength = val.length + + if (encoding !== undefined) { + encoding = String(encoding).toLowerCase() + if (encoding === 'ucs2' || encoding === 'ucs-2' || + encoding === 'utf16le' || encoding === 'utf-16le') { + if (arr.length < 2 || val.length < 2) { + return -1 + } + indexSize = 2 + arrLength /= 2 + valLength /= 2 + byteOffset /= 2 + } + } + + function read (buf, i) { + if (indexSize === 1) { + return buf[i] + } else { + return buf.readUInt16BE(i * indexSize) + } + } + + let i + if (dir) { + let foundIndex = -1 + for (i = byteOffset; i < arrLength; i++) { + if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) { + if (foundIndex === -1) foundIndex = i + if (i - foundIndex + 1 === valLength) return foundIndex * indexSize + } else { + if (foundIndex !== -1) i -= i - foundIndex + foundIndex = -1 + } + } + } else { + if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength + for (i = byteOffset; i >= 0; i--) { + let found = true + for (let j = 0; j < valLength; j++) { + if (read(arr, i + j) !== read(val, j)) { + found = false + break + } + } + if (found) return i + } + } + + return -1 +} + +Buffer.prototype.includes = function includes (val, byteOffset, encoding) { + return this.indexOf(val, byteOffset, encoding) !== -1 +} + +Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) { + return bidirectionalIndexOf(this, val, byteOffset, encoding, true) +} + +Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) { + return bidirectionalIndexOf(this, val, byteOffset, encoding, false) +} + +function hexWrite (buf, string, offset, length) { + offset = Number(offset) || 0 + const remaining = buf.length - offset + if (!length) { + length = remaining + } else { + length = Number(length) + if (length > remaining) { + length = remaining + } + } + + const strLen = string.length + + if (length > strLen / 2) { + length = strLen / 2 + } + let i + for (i = 0; i < length; ++i) { + const parsed = parseInt(string.substr(i * 2, 2), 16) + if (numberIsNaN(parsed)) return i + buf[offset + i] = parsed + } + return i +} + +function utf8Write (buf, string, offset, length) { + return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length) +} + +function asciiWrite (buf, string, offset, length) { + return blitBuffer(asciiToBytes(string), buf, offset, length) +} + +function base64Write (buf, string, offset, length) { + return blitBuffer(base64ToBytes(string), buf, offset, length) +} + +function ucs2Write (buf, string, offset, length) { + return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length) +} + +Buffer.prototype.write = function write (string, offset, length, encoding) { + // Buffer#write(string) + if (offset === undefined) { + encoding = 'utf8' + length = this.length + offset = 0 + // Buffer#write(string, encoding) + } else if (length === undefined && typeof offset === 'string') { + encoding = offset + length = this.length + offset = 0 + // Buffer#write(string, offset[, length][, encoding]) + } else if (isFinite(offset)) { + offset = offset >>> 0 + if (isFinite(length)) { + length = length >>> 0 + if (encoding === undefined) encoding = 'utf8' + } else { + encoding = length + length = undefined + } + } else { + throw new Error( + 'Buffer.write(string, encoding, offset[, length]) is no longer supported' + ) + } + + const remaining = this.length - offset + if (length === undefined || length > remaining) length = remaining + + if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) { + throw new RangeError('Attempt to write outside buffer bounds') + } + + if (!encoding) encoding = 'utf8' + + let loweredCase = false + for (;;) { + switch (encoding) { + case 'hex': + return hexWrite(this, string, offset, length) + + case 'utf8': + case 'utf-8': + return utf8Write(this, string, offset, length) + + case 'ascii': + case 'latin1': + case 'binary': + return asciiWrite(this, string, offset, length) + + case 'base64': + // Warning: maxLength not taken into account in base64Write + return base64Write(this, string, offset, length) + + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return ucs2Write(this, string, offset, length) + + default: + if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding) + encoding = ('' + encoding).toLowerCase() + loweredCase = true + } + } +} + +Buffer.prototype.toJSON = function toJSON () { + return { + type: 'Buffer', + data: Array.prototype.slice.call(this._arr || this, 0) + } +} + +function base64Slice (buf, start, end) { + if (start === 0 && end === buf.length) { + return base64.fromByteArray(buf) + } else { + return base64.fromByteArray(buf.slice(start, end)) + } +} + +function utf8Slice (buf, start, end) { + end = Math.min(buf.length, end) + const res = [] + + let i = start + while (i < end) { + const firstByte = buf[i] + let codePoint = null + let bytesPerSequence = (firstByte > 0xEF) + ? 4 + : (firstByte > 0xDF) + ? 3 + : (firstByte > 0xBF) + ? 2 + : 1 + + if (i + bytesPerSequence <= end) { + let secondByte, thirdByte, fourthByte, tempCodePoint + + switch (bytesPerSequence) { + case 1: + if (firstByte < 0x80) { + codePoint = firstByte + } + break + case 2: + secondByte = buf[i + 1] + if ((secondByte & 0xC0) === 0x80) { + tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F) + if (tempCodePoint > 0x7F) { + codePoint = tempCodePoint + } + } + break + case 3: + secondByte = buf[i + 1] + thirdByte = buf[i + 2] + if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) { + tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F) + if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) { + codePoint = tempCodePoint + } + } + break + case 4: + secondByte = buf[i + 1] + thirdByte = buf[i + 2] + fourthByte = buf[i + 3] + if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) { + tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F) + if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) { + codePoint = tempCodePoint + } + } + } + } + + if (codePoint === null) { + // we did not generate a valid codePoint so insert a + // replacement char (U+FFFD) and advance only 1 byte + codePoint = 0xFFFD + bytesPerSequence = 1 + } else if (codePoint > 0xFFFF) { + // encode to utf16 (surrogate pair dance) + codePoint -= 0x10000 + res.push(codePoint >>> 10 & 0x3FF | 0xD800) + codePoint = 0xDC00 | codePoint & 0x3FF + } + + res.push(codePoint) + i += bytesPerSequence + } + + return decodeCodePointsArray(res) +} + +// Based on http://stackoverflow.com/a/22747272/680742, the browser with +// the lowest limit is Chrome, with 0x10000 args. +// We go 1 magnitude less, for safety +const MAX_ARGUMENTS_LENGTH = 0x1000 + +function decodeCodePointsArray (codePoints) { + const len = codePoints.length + if (len <= MAX_ARGUMENTS_LENGTH) { + return String.fromCharCode.apply(String, codePoints) // avoid extra slice() + } + + // Decode in chunks to avoid "call stack size exceeded". + let res = '' + let i = 0 + while (i < len) { + res += String.fromCharCode.apply( + String, + codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH) + ) + } + return res +} + +function asciiSlice (buf, start, end) { + let ret = '' + end = Math.min(buf.length, end) + + for (let i = start; i < end; ++i) { + ret += String.fromCharCode(buf[i] & 0x7F) + } + return ret +} + +function latin1Slice (buf, start, end) { + let ret = '' + end = Math.min(buf.length, end) + + for (let i = start; i < end; ++i) { + ret += String.fromCharCode(buf[i]) + } + return ret +} + +function hexSlice (buf, start, end) { + const len = buf.length + + if (!start || start < 0) start = 0 + if (!end || end < 0 || end > len) end = len + + let out = '' + for (let i = start; i < end; ++i) { + out += hexSliceLookupTable[buf[i]] + } + return out +} + +function utf16leSlice (buf, start, end) { + const bytes = buf.slice(start, end) + let res = '' + // If bytes.length is odd, the last 8 bits must be ignored (same as node.js) + for (let i = 0; i < bytes.length - 1; i += 2) { + res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256)) + } + return res +} + +Buffer.prototype.slice = function slice (start, end) { + const len = this.length + start = ~~start + end = end === undefined ? len : ~~end + + if (start < 0) { + start += len + if (start < 0) start = 0 + } else if (start > len) { + start = len + } + + if (end < 0) { + end += len + if (end < 0) end = 0 + } else if (end > len) { + end = len + } + + if (end < start) end = start + + const newBuf = this.subarray(start, end) + // Return an augmented `Uint8Array` instance + Object.setPrototypeOf(newBuf, Buffer.prototype) + + return newBuf +} + +/* + * Need to make sure that buffer isn't trying to write out of bounds. + */ +function checkOffset (offset, ext, length) { + if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint') + if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length') +} + +Buffer.prototype.readUintLE = +Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) { + offset = offset >>> 0 + byteLength = byteLength >>> 0 + if (!noAssert) checkOffset(offset, byteLength, this.length) + + let val = this[offset] + let mul = 1 + let i = 0 + while (++i < byteLength && (mul *= 0x100)) { + val += this[offset + i] * mul + } + + return val +} + +Buffer.prototype.readUintBE = +Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) { + offset = offset >>> 0 + byteLength = byteLength >>> 0 + if (!noAssert) { + checkOffset(offset, byteLength, this.length) + } + + let val = this[offset + --byteLength] + let mul = 1 + while (byteLength > 0 && (mul *= 0x100)) { + val += this[offset + --byteLength] * mul + } + + return val +} + +Buffer.prototype.readUint8 = +Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 1, this.length) + return this[offset] +} + +Buffer.prototype.readUint16LE = +Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 2, this.length) + return this[offset] | (this[offset + 1] << 8) +} + +Buffer.prototype.readUint16BE = +Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 2, this.length) + return (this[offset] << 8) | this[offset + 1] +} + +Buffer.prototype.readUint32LE = +Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 4, this.length) + + return ((this[offset]) | + (this[offset + 1] << 8) | + (this[offset + 2] << 16)) + + (this[offset + 3] * 0x1000000) +} + +Buffer.prototype.readUint32BE = +Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 4, this.length) + + return (this[offset] * 0x1000000) + + ((this[offset + 1] << 16) | + (this[offset + 2] << 8) | + this[offset + 3]) +} + +Buffer.prototype.readBigUInt64LE = defineBigIntMethod(function readBigUInt64LE (offset) { + offset = offset >>> 0 + validateNumber(offset, 'offset') + const first = this[offset] + const last = this[offset + 7] + if (first === undefined || last === undefined) { + boundsError(offset, this.length - 8) + } + + const lo = first + + this[++offset] * 2 ** 8 + + this[++offset] * 2 ** 16 + + this[++offset] * 2 ** 24 + + const hi = this[++offset] + + this[++offset] * 2 ** 8 + + this[++offset] * 2 ** 16 + + last * 2 ** 24 + + return BigInt(lo) + (BigInt(hi) << BigInt(32)) +}) + +Buffer.prototype.readBigUInt64BE = defineBigIntMethod(function readBigUInt64BE (offset) { + offset = offset >>> 0 + validateNumber(offset, 'offset') + const first = this[offset] + const last = this[offset + 7] + if (first === undefined || last === undefined) { + boundsError(offset, this.length - 8) + } + + const hi = first * 2 ** 24 + + this[++offset] * 2 ** 16 + + this[++offset] * 2 ** 8 + + this[++offset] + + const lo = this[++offset] * 2 ** 24 + + this[++offset] * 2 ** 16 + + this[++offset] * 2 ** 8 + + last + + return (BigInt(hi) << BigInt(32)) + BigInt(lo) +}) + +Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) { + offset = offset >>> 0 + byteLength = byteLength >>> 0 + if (!noAssert) checkOffset(offset, byteLength, this.length) + + let val = this[offset] + let mul = 1 + let i = 0 + while (++i < byteLength && (mul *= 0x100)) { + val += this[offset + i] * mul + } + mul *= 0x80 + + if (val >= mul) val -= Math.pow(2, 8 * byteLength) + + return val +} + +Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) { + offset = offset >>> 0 + byteLength = byteLength >>> 0 + if (!noAssert) checkOffset(offset, byteLength, this.length) + + let i = byteLength + let mul = 1 + let val = this[offset + --i] + while (i > 0 && (mul *= 0x100)) { + val += this[offset + --i] * mul + } + mul *= 0x80 + + if (val >= mul) val -= Math.pow(2, 8 * byteLength) + + return val +} + +Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 1, this.length) + if (!(this[offset] & 0x80)) return (this[offset]) + return ((0xff - this[offset] + 1) * -1) +} + +Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 2, this.length) + const val = this[offset] | (this[offset + 1] << 8) + return (val & 0x8000) ? val | 0xFFFF0000 : val +} + +Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 2, this.length) + const val = this[offset + 1] | (this[offset] << 8) + return (val & 0x8000) ? val | 0xFFFF0000 : val +} + +Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 4, this.length) + + return (this[offset]) | + (this[offset + 1] << 8) | + (this[offset + 2] << 16) | + (this[offset + 3] << 24) +} + +Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 4, this.length) + + return (this[offset] << 24) | + (this[offset + 1] << 16) | + (this[offset + 2] << 8) | + (this[offset + 3]) +} + +Buffer.prototype.readBigInt64LE = defineBigIntMethod(function readBigInt64LE (offset) { + offset = offset >>> 0 + validateNumber(offset, 'offset') + const first = this[offset] + const last = this[offset + 7] + if (first === undefined || last === undefined) { + boundsError(offset, this.length - 8) + } + + const val = this[offset + 4] + + this[offset + 5] * 2 ** 8 + + this[offset + 6] * 2 ** 16 + + (last << 24) // Overflow + + return (BigInt(val) << BigInt(32)) + + BigInt(first + + this[++offset] * 2 ** 8 + + this[++offset] * 2 ** 16 + + this[++offset] * 2 ** 24) +}) + +Buffer.prototype.readBigInt64BE = defineBigIntMethod(function readBigInt64BE (offset) { + offset = offset >>> 0 + validateNumber(offset, 'offset') + const first = this[offset] + const last = this[offset + 7] + if (first === undefined || last === undefined) { + boundsError(offset, this.length - 8) + } + + const val = (first << 24) + // Overflow + this[++offset] * 2 ** 16 + + this[++offset] * 2 ** 8 + + this[++offset] + + return (BigInt(val) << BigInt(32)) + + BigInt(this[++offset] * 2 ** 24 + + this[++offset] * 2 ** 16 + + this[++offset] * 2 ** 8 + + last) +}) + +Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 4, this.length) + return ieee754.read(this, offset, true, 23, 4) +} + +Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 4, this.length) + return ieee754.read(this, offset, false, 23, 4) +} + +Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 8, this.length) + return ieee754.read(this, offset, true, 52, 8) +} + +Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 8, this.length) + return ieee754.read(this, offset, false, 52, 8) +} + +function checkInt (buf, value, offset, ext, max, min) { + if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance') + if (value > max || value < min) throw new RangeError('"value" argument is out of bounds') + if (offset + ext > buf.length) throw new RangeError('Index out of range') +} + +Buffer.prototype.writeUintLE = +Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) { + value = +value + offset = offset >>> 0 + byteLength = byteLength >>> 0 + if (!noAssert) { + const maxBytes = Math.pow(2, 8 * byteLength) - 1 + checkInt(this, value, offset, byteLength, maxBytes, 0) + } + + let mul = 1 + let i = 0 + this[offset] = value & 0xFF + while (++i < byteLength && (mul *= 0x100)) { + this[offset + i] = (value / mul) & 0xFF + } + + return offset + byteLength +} + +Buffer.prototype.writeUintBE = +Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) { + value = +value + offset = offset >>> 0 + byteLength = byteLength >>> 0 + if (!noAssert) { + const maxBytes = Math.pow(2, 8 * byteLength) - 1 + checkInt(this, value, offset, byteLength, maxBytes, 0) + } + + let i = byteLength - 1 + let mul = 1 + this[offset + i] = value & 0xFF + while (--i >= 0 && (mul *= 0x100)) { + this[offset + i] = (value / mul) & 0xFF + } + + return offset + byteLength +} + +Buffer.prototype.writeUint8 = +Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0) + this[offset] = (value & 0xff) + return offset + 1 +} + +Buffer.prototype.writeUint16LE = +Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0) + this[offset] = (value & 0xff) + this[offset + 1] = (value >>> 8) + return offset + 2 +} + +Buffer.prototype.writeUint16BE = +Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0) + this[offset] = (value >>> 8) + this[offset + 1] = (value & 0xff) + return offset + 2 +} + +Buffer.prototype.writeUint32LE = +Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0) + this[offset + 3] = (value >>> 24) + this[offset + 2] = (value >>> 16) + this[offset + 1] = (value >>> 8) + this[offset] = (value & 0xff) + return offset + 4 +} + +Buffer.prototype.writeUint32BE = +Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0) + this[offset] = (value >>> 24) + this[offset + 1] = (value >>> 16) + this[offset + 2] = (value >>> 8) + this[offset + 3] = (value & 0xff) + return offset + 4 +} + +function wrtBigUInt64LE (buf, value, offset, min, max) { + checkIntBI(value, min, max, buf, offset, 7) + + let lo = Number(value & BigInt(0xffffffff)) + buf[offset++] = lo + lo = lo >> 8 + buf[offset++] = lo + lo = lo >> 8 + buf[offset++] = lo + lo = lo >> 8 + buf[offset++] = lo + let hi = Number(value >> BigInt(32) & BigInt(0xffffffff)) + buf[offset++] = hi + hi = hi >> 8 + buf[offset++] = hi + hi = hi >> 8 + buf[offset++] = hi + hi = hi >> 8 + buf[offset++] = hi + return offset +} + +function wrtBigUInt64BE (buf, value, offset, min, max) { + checkIntBI(value, min, max, buf, offset, 7) + + let lo = Number(value & BigInt(0xffffffff)) + buf[offset + 7] = lo + lo = lo >> 8 + buf[offset + 6] = lo + lo = lo >> 8 + buf[offset + 5] = lo + lo = lo >> 8 + buf[offset + 4] = lo + let hi = Number(value >> BigInt(32) & BigInt(0xffffffff)) + buf[offset + 3] = hi + hi = hi >> 8 + buf[offset + 2] = hi + hi = hi >> 8 + buf[offset + 1] = hi + hi = hi >> 8 + buf[offset] = hi + return offset + 8 +} + +Buffer.prototype.writeBigUInt64LE = defineBigIntMethod(function writeBigUInt64LE (value, offset = 0) { + return wrtBigUInt64LE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff')) +}) + +Buffer.prototype.writeBigUInt64BE = defineBigIntMethod(function writeBigUInt64BE (value, offset = 0) { + return wrtBigUInt64BE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff')) +}) + +Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) { + const limit = Math.pow(2, (8 * byteLength) - 1) + + checkInt(this, value, offset, byteLength, limit - 1, -limit) + } + + let i = 0 + let mul = 1 + let sub = 0 + this[offset] = value & 0xFF + while (++i < byteLength && (mul *= 0x100)) { + if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) { + sub = 1 + } + this[offset + i] = ((value / mul) >> 0) - sub & 0xFF + } + + return offset + byteLength +} + +Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) { + const limit = Math.pow(2, (8 * byteLength) - 1) + + checkInt(this, value, offset, byteLength, limit - 1, -limit) + } + + let i = byteLength - 1 + let mul = 1 + let sub = 0 + this[offset + i] = value & 0xFF + while (--i >= 0 && (mul *= 0x100)) { + if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) { + sub = 1 + } + this[offset + i] = ((value / mul) >> 0) - sub & 0xFF + } + + return offset + byteLength +} + +Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80) + if (value < 0) value = 0xff + value + 1 + this[offset] = (value & 0xff) + return offset + 1 +} + +Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000) + this[offset] = (value & 0xff) + this[offset + 1] = (value >>> 8) + return offset + 2 +} + +Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000) + this[offset] = (value >>> 8) + this[offset + 1] = (value & 0xff) + return offset + 2 +} + +Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000) + this[offset] = (value & 0xff) + this[offset + 1] = (value >>> 8) + this[offset + 2] = (value >>> 16) + this[offset + 3] = (value >>> 24) + return offset + 4 +} + +Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000) + if (value < 0) value = 0xffffffff + value + 1 + this[offset] = (value >>> 24) + this[offset + 1] = (value >>> 16) + this[offset + 2] = (value >>> 8) + this[offset + 3] = (value & 0xff) + return offset + 4 +} + +Buffer.prototype.writeBigInt64LE = defineBigIntMethod(function writeBigInt64LE (value, offset = 0) { + return wrtBigUInt64LE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff')) +}) + +Buffer.prototype.writeBigInt64BE = defineBigIntMethod(function writeBigInt64BE (value, offset = 0) { + return wrtBigUInt64BE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff')) +}) + +function checkIEEE754 (buf, value, offset, ext, max, min) { + if (offset + ext > buf.length) throw new RangeError('Index out of range') + if (offset < 0) throw new RangeError('Index out of range') +} + +function writeFloat (buf, value, offset, littleEndian, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) { + checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38) + } + ieee754.write(buf, value, offset, littleEndian, 23, 4) + return offset + 4 +} + +Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) { + return writeFloat(this, value, offset, true, noAssert) +} + +Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) { + return writeFloat(this, value, offset, false, noAssert) +} + +function writeDouble (buf, value, offset, littleEndian, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) { + checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308) + } + ieee754.write(buf, value, offset, littleEndian, 52, 8) + return offset + 8 +} + +Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) { + return writeDouble(this, value, offset, true, noAssert) +} + +Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) { + return writeDouble(this, value, offset, false, noAssert) +} + +// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length) +Buffer.prototype.copy = function copy (target, targetStart, start, end) { + if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer') + if (!start) start = 0 + if (!end && end !== 0) end = this.length + if (targetStart >= target.length) targetStart = target.length + if (!targetStart) targetStart = 0 + if (end > 0 && end < start) end = start + + // Copy 0 bytes; we're done + if (end === start) return 0 + if (target.length === 0 || this.length === 0) return 0 + + // Fatal error conditions + if (targetStart < 0) { + throw new RangeError('targetStart out of bounds') + } + if (start < 0 || start >= this.length) throw new RangeError('Index out of range') + if (end < 0) throw new RangeError('sourceEnd out of bounds') + + // Are we oob? + if (end > this.length) end = this.length + if (target.length - targetStart < end - start) { + end = target.length - targetStart + start + } + + const len = end - start + + if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') { + // Use built-in when available, missing from IE11 + this.copyWithin(targetStart, start, end) + } else { + Uint8Array.prototype.set.call( + target, + this.subarray(start, end), + targetStart + ) + } + + return len +} + +// Usage: +// buffer.fill(number[, offset[, end]]) +// buffer.fill(buffer[, offset[, end]]) +// buffer.fill(string[, offset[, end]][, encoding]) +Buffer.prototype.fill = function fill (val, start, end, encoding) { + // Handle string cases: + if (typeof val === 'string') { + if (typeof start === 'string') { + encoding = start + start = 0 + end = this.length + } else if (typeof end === 'string') { + encoding = end + end = this.length + } + if (encoding !== undefined && typeof encoding !== 'string') { + throw new TypeError('encoding must be a string') + } + if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) { + throw new TypeError('Unknown encoding: ' + encoding) + } + if (val.length === 1) { + const code = val.charCodeAt(0) + if ((encoding === 'utf8' && code < 128) || + encoding === 'latin1') { + // Fast path: If `val` fits into a single byte, use that numeric value. + val = code + } + } + } else if (typeof val === 'number') { + val = val & 255 + } else if (typeof val === 'boolean') { + val = Number(val) + } + + // Invalid ranges are not set to a default, so can range check early. + if (start < 0 || this.length < start || this.length < end) { + throw new RangeError('Out of range index') + } + + if (end <= start) { + return this + } + + start = start >>> 0 + end = end === undefined ? this.length : end >>> 0 + + if (!val) val = 0 + + let i + if (typeof val === 'number') { + for (i = start; i < end; ++i) { + this[i] = val + } + } else { + const bytes = Buffer.isBuffer(val) + ? val + : Buffer.from(val, encoding) + const len = bytes.length + if (len === 0) { + throw new TypeError('The value "' + val + + '" is invalid for argument "value"') + } + for (i = 0; i < end - start; ++i) { + this[i + start] = bytes[i % len] + } + } + + return this +} + +// CUSTOM ERRORS +// ============= + +// Simplified versions from Node, changed for Buffer-only usage +const errors = {} +function E (sym, getMessage, Base) { + errors[sym] = class NodeError extends Base { + constructor () { + super() + + Object.defineProperty(this, 'message', { + value: getMessage.apply(this, arguments), + writable: true, + configurable: true + }) + + // Add the error code to the name to include it in the stack trace. + this.name = `${this.name} [${sym}]` + // Access the stack to generate the error message including the error code + // from the name. + this.stack // eslint-disable-line no-unused-expressions + // Reset the name to the actual name. + delete this.name + } + + get code () { + return sym + } + + set code (value) { + Object.defineProperty(this, 'code', { + configurable: true, + enumerable: true, + value, + writable: true + }) + } + + toString () { + return `${this.name} [${sym}]: ${this.message}` + } + } +} + +E('ERR_BUFFER_OUT_OF_BOUNDS', + function (name) { + if (name) { + return `${name} is outside of buffer bounds` + } + + return 'Attempt to access memory outside buffer bounds' + }, RangeError) +E('ERR_INVALID_ARG_TYPE', + function (name, actual) { + return `The "${name}" argument must be of type number. Received type ${typeof actual}` + }, TypeError) +E('ERR_OUT_OF_RANGE', + function (str, range, input) { + let msg = `The value of "${str}" is out of range.` + let received = input + if (Number.isInteger(input) && Math.abs(input) > 2 ** 32) { + received = addNumericalSeparator(String(input)) + } else if (typeof input === 'bigint') { + received = String(input) + if (input > BigInt(2) ** BigInt(32) || input < -(BigInt(2) ** BigInt(32))) { + received = addNumericalSeparator(received) + } + received += 'n' + } + msg += ` It must be ${range}. Received ${received}` + return msg + }, RangeError) + +function addNumericalSeparator (val) { + let res = '' + let i = val.length + const start = val[0] === '-' ? 1 : 0 + for (; i >= start + 4; i -= 3) { + res = `_${val.slice(i - 3, i)}${res}` + } + return `${val.slice(0, i)}${res}` +} + +// CHECK FUNCTIONS +// =============== + +function checkBounds (buf, offset, byteLength) { + validateNumber(offset, 'offset') + if (buf[offset] === undefined || buf[offset + byteLength] === undefined) { + boundsError(offset, buf.length - (byteLength + 1)) + } +} + +function checkIntBI (value, min, max, buf, offset, byteLength) { + if (value > max || value < min) { + const n = typeof min === 'bigint' ? 'n' : '' + let range + if (byteLength > 3) { + if (min === 0 || min === BigInt(0)) { + range = `>= 0${n} and < 2${n} ** ${(byteLength + 1) * 8}${n}` + } else { + range = `>= -(2${n} ** ${(byteLength + 1) * 8 - 1}${n}) and < 2 ** ` + + `${(byteLength + 1) * 8 - 1}${n}` + } + } else { + range = `>= ${min}${n} and <= ${max}${n}` + } + throw new errors.ERR_OUT_OF_RANGE('value', range, value) + } + checkBounds(buf, offset, byteLength) +} + +function validateNumber (value, name) { + if (typeof value !== 'number') { + throw new errors.ERR_INVALID_ARG_TYPE(name, 'number', value) + } +} + +function boundsError (value, length, type) { + if (Math.floor(value) !== value) { + validateNumber(value, type) + throw new errors.ERR_OUT_OF_RANGE(type || 'offset', 'an integer', value) + } + + if (length < 0) { + throw new errors.ERR_BUFFER_OUT_OF_BOUNDS() + } + + throw new errors.ERR_OUT_OF_RANGE(type || 'offset', + `>= ${type ? 1 : 0} and <= ${length}`, + value) +} + +// HELPER FUNCTIONS +// ================ + +const INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g + +function base64clean (str) { + // Node takes equal signs as end of the Base64 encoding + str = str.split('=')[0] + // Node strips out invalid characters like \n and \t from the string, base64-js does not + str = str.trim().replace(INVALID_BASE64_RE, '') + // Node converts strings with length < 2 to '' + if (str.length < 2) return '' + // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not + while (str.length % 4 !== 0) { + str = str + '=' + } + return str +} + +function utf8ToBytes (string, units) { + units = units || Infinity + let codePoint + const length = string.length + let leadSurrogate = null + const bytes = [] + + for (let i = 0; i < length; ++i) { + codePoint = string.charCodeAt(i) + + // is surrogate component + if (codePoint > 0xD7FF && codePoint < 0xE000) { + // last char was a lead + if (!leadSurrogate) { + // no lead yet + if (codePoint > 0xDBFF) { + // unexpected trail + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) + continue + } else if (i + 1 === length) { + // unpaired lead + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) + continue + } + + // valid lead + leadSurrogate = codePoint + + continue + } + + // 2 leads in a row + if (codePoint < 0xDC00) { + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) + leadSurrogate = codePoint + continue + } + + // valid surrogate pair + codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000 + } else if (leadSurrogate) { + // valid bmp char, but last char was a lead + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) + } + + leadSurrogate = null + + // encode utf8 + if (codePoint < 0x80) { + if ((units -= 1) < 0) break + bytes.push(codePoint) + } else if (codePoint < 0x800) { + if ((units -= 2) < 0) break + bytes.push( + codePoint >> 0x6 | 0xC0, + codePoint & 0x3F | 0x80 + ) + } else if (codePoint < 0x10000) { + if ((units -= 3) < 0) break + bytes.push( + codePoint >> 0xC | 0xE0, + codePoint >> 0x6 & 0x3F | 0x80, + codePoint & 0x3F | 0x80 + ) + } else if (codePoint < 0x110000) { + if ((units -= 4) < 0) break + bytes.push( + codePoint >> 0x12 | 0xF0, + codePoint >> 0xC & 0x3F | 0x80, + codePoint >> 0x6 & 0x3F | 0x80, + codePoint & 0x3F | 0x80 + ) + } else { + throw new Error('Invalid code point') + } + } + + return bytes +} + +function asciiToBytes (str) { + const byteArray = [] + for (let i = 0; i < str.length; ++i) { + // Node's code seems to be doing this and not & 0x7F.. + byteArray.push(str.charCodeAt(i) & 0xFF) + } + return byteArray +} + +function utf16leToBytes (str, units) { + let c, hi, lo + const byteArray = [] + for (let i = 0; i < str.length; ++i) { + if ((units -= 2) < 0) break + + c = str.charCodeAt(i) + hi = c >> 8 + lo = c % 256 + byteArray.push(lo) + byteArray.push(hi) + } + + return byteArray +} + +function base64ToBytes (str) { + return base64.toByteArray(base64clean(str)) +} + +function blitBuffer (src, dst, offset, length) { + let i + for (i = 0; i < length; ++i) { + if ((i + offset >= dst.length) || (i >= src.length)) break + dst[i + offset] = src[i] + } + return i +} + +// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass +// the `instanceof` check but they should be treated as of that type. +// See: https://github.com/feross/buffer/issues/166 +function isInstance (obj, type) { + return obj instanceof type || + (obj != null && obj.constructor != null && obj.constructor.name != null && + obj.constructor.name === type.name) +} +function numberIsNaN (obj) { + // For IE11 support + return obj !== obj // eslint-disable-line no-self-compare +} + +// Create lookup table for `toString('hex')` +// See: https://github.com/feross/buffer/issues/219 +const hexSliceLookupTable = (function () { + const alphabet = '0123456789abcdef' + const table = new Array(256) + for (let i = 0; i < 16; ++i) { + const i16 = i * 16 + for (let j = 0; j < 16; ++j) { + table[i16 + j] = alphabet[i] + alphabet[j] + } + } + return table +})() + +// Return not function with Error if BigInt not supported +function defineBigIntMethod (fn) { + return typeof BigInt === 'undefined' ? BufferBigIntNotDefined : fn +} + +function BufferBigIntNotDefined () { + throw new Error('BigInt not supported') +} + + +}, +70488(module, __unused_webpack_exports, __webpack_require__) { +"use strict"; + + +const ipRegex = __webpack_require__(22576); + +const defaultOpts = {exact: false}; + +const v4str = `${ipRegex.v4().source}\\/(3[0-2]|[12]?[0-9])`; +const v6str = `${ipRegex.v6().source}\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])`; + +// can not precompile the non-exact regexes because global flag makes the regex object stateful +// which would require the user to reset .lastIndex on subsequent calls +const v4exact = new RegExp(`^${v4str}$`); +const v6exact = new RegExp(`^${v6str}$`); +const v46exact = new RegExp(`(?:^${v4str}$)|(?:^${v6str}$)`); + +module.exports = ({exact} = defaultOpts) => exact ? v46exact : new RegExp(`(?:${v4str})|(?:${v6str})`, "g"); +module.exports.v4 = ({exact} = defaultOpts) => exact ? v4exact : new RegExp(v4str, "g"); +module.exports.v6 = ({exact} = defaultOpts) => exact ? v6exact : new RegExp(v6str, "g"); + + +}, +27416(module, __unused_webpack_exports, __webpack_require__) { +"use strict"; + + +var Buffer = (__webpack_require__(46279)/* .Buffer */.Buffer); +var Transform = (__webpack_require__(28280)/* .Transform */.Transform); +var StringDecoder = (__webpack_require__(33345)/* .StringDecoder */.StringDecoder); +var inherits = __webpack_require__(86040); + +function CipherBase(hashMode) { + Transform.call(this); + this.hashMode = typeof hashMode === 'string'; + if (this.hashMode) { + this[hashMode] = this._finalOrDigest; + } else { + this['final'] = this._finalOrDigest; + } + if (this._final) { + this.__final = this._final; + this._final = null; + } + this._decoder = null; + this._encoding = null; +} +inherits(CipherBase, Transform); + +var useUint8Array = typeof Uint8Array !== 'undefined'; +var useArrayBuffer = typeof ArrayBuffer !== 'undefined' + && typeof Uint8Array !== 'undefined' + && ArrayBuffer.isView + && (Buffer.prototype instanceof Uint8Array || Buffer.TYPED_ARRAY_SUPPORT); + +function toBuffer(data, encoding) { + /* + * No need to do anything for exact instance + * This is only valid when safe-buffer.Buffer === buffer.Buffer, i.e. when Buffer.from/Buffer.alloc existed + */ + if (data instanceof Buffer) { + return data; + } + + // Convert strings to Buffer + if (typeof data === 'string') { + return Buffer.from(data, encoding); + } + + /* + * Wrap any TypedArray instances and DataViews + * Makes sense only on engines with full TypedArray support -- let Buffer detect that + */ + if (useArrayBuffer && ArrayBuffer.isView(data)) { + // Bug in Node.js <6.3.1, which treats this as out-of-bounds + if (data.byteLength === 0) { + return Buffer.alloc(0); + } + + var res = Buffer.from(data.buffer, data.byteOffset, data.byteLength); + /* + * Recheck result size, as offset/length doesn't work on Node.js <5.10 + * We just go to Uint8Array case if this fails + */ + if (res.byteLength === data.byteLength) { + return res; + } + } + + /* + * Uint8Array in engines where Buffer.from might not work with ArrayBuffer, just copy over + * Doesn't make sense with other TypedArray instances + */ + if (useUint8Array && data instanceof Uint8Array) { + return Buffer.from(data); + } + + /* + * Old Buffer polyfill on an engine that doesn't have TypedArray support + * Also, this is from a different Buffer polyfill implementation then we have, as instanceof check failed + * Convert to our current Buffer implementation + */ + if ( + Buffer.isBuffer(data) + && data.constructor + && typeof data.constructor.isBuffer === 'function' + && data.constructor.isBuffer(data) + ) { + return Buffer.from(data); + } + + throw new TypeError('The "data" argument must be of type string or an instance of Buffer, TypedArray, or DataView.'); +} + +CipherBase.prototype.update = function (data, inputEnc, outputEnc) { + var bufferData = toBuffer(data, inputEnc); // asserts correct input type + var outData = this._update(bufferData); + if (this.hashMode) { + return this; + } + + if (outputEnc) { + outData = this._toString(outData, outputEnc); + } + + return outData; +}; + +CipherBase.prototype.setAutoPadding = function () {}; +CipherBase.prototype.getAuthTag = function () { + throw new Error('trying to get auth tag in unsupported state'); +}; + +CipherBase.prototype.setAuthTag = function () { + throw new Error('trying to set auth tag in unsupported state'); +}; + +CipherBase.prototype.setAAD = function () { + throw new Error('trying to set aad in unsupported state'); +}; + +CipherBase.prototype._transform = function (data, _, next) { + var err; + try { + if (this.hashMode) { + this._update(data); + } else { + this.push(this._update(data)); + } + } catch (e) { + err = e; + } finally { + next(err); + } +}; +CipherBase.prototype._flush = function (done) { + var err; + try { + this.push(this.__final()); + } catch (e) { + err = e; + } + + done(err); +}; +CipherBase.prototype._finalOrDigest = function (outputEnc) { + var outData = this.__final() || Buffer.alloc(0); + if (outputEnc) { + outData = this._toString(outData, outputEnc, true); + } + return outData; +}; + +CipherBase.prototype._toString = function (value, enc, fin) { + if (!this._decoder) { + this._decoder = new StringDecoder(enc); + this._encoding = enc; + } + + if (this._encoding !== enc) { + throw new Error('can’t switch encodings'); + } + + var out = this._decoder.write(value); + if (fin) { + out += this._decoder.end(); + } + + return out; +}; + +module.exports = CipherBase; + + +}, +98518(module, __unused_webpack_exports, __webpack_require__) { +"use strict"; + + +/** + * Module dependenices + */ + +const clone = __webpack_require__(2595); +const typeOf = __webpack_require__(44456); +const isPlainObject = __webpack_require__(92153); + +function cloneDeep(val, instanceClone) { + switch (typeOf(val)) { + case 'object': + return cloneObjectDeep(val, instanceClone); + case 'array': + return cloneArrayDeep(val, instanceClone); + default: { + return clone(val); + } + } +} + +function cloneObjectDeep(val, instanceClone) { + if (typeof instanceClone === 'function') { + return instanceClone(val); + } + if (instanceClone || isPlainObject(val)) { + const res = new val.constructor(); + for (let key in val) { + res[key] = cloneDeep(val[key], instanceClone); + } + return res; + } + return val; +} + +function cloneArrayDeep(val, instanceClone) { + const res = new val.constructor(val.length); + for (let i = 0; i < val.length; i++) { + res[i] = cloneDeep(val[i], instanceClone); + } + return res; +} + +/** + * Expose `cloneDeep` + */ + +module.exports = cloneDeep; + + +}, +93495(__unused_webpack_module, exports, __webpack_require__) { +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +// NOTE: These type checking functions intentionally don't use `instanceof` +// because it is fragile and can be easily faked with `Object.create()`. + +function isArray(arg) { + if (Array.isArray) { + return Array.isArray(arg); + } + return objectToString(arg) === '[object Array]'; +} +exports.isArray = isArray; + +function isBoolean(arg) { + return typeof arg === 'boolean'; +} +exports.isBoolean = isBoolean; + +function isNull(arg) { + return arg === null; +} +exports.isNull = isNull; + +function isNullOrUndefined(arg) { + return arg == null; +} +exports.isNullOrUndefined = isNullOrUndefined; + +function isNumber(arg) { + return typeof arg === 'number'; +} +exports.isNumber = isNumber; + +function isString(arg) { + return typeof arg === 'string'; +} +exports.isString = isString; + +function isSymbol(arg) { + return typeof arg === 'symbol'; +} +exports.isSymbol = isSymbol; + +function isUndefined(arg) { + return arg === void 0; +} +exports.isUndefined = isUndefined; + +function isRegExp(re) { + return objectToString(re) === '[object RegExp]'; +} +exports.isRegExp = isRegExp; + +function isObject(arg) { + return typeof arg === 'object' && arg !== null; +} +exports.isObject = isObject; + +function isDate(d) { + return objectToString(d) === '[object Date]'; +} +exports.isDate = isDate; + +function isError(e) { + return (objectToString(e) === '[object Error]' || e instanceof Error); +} +exports.isError = isError; + +function isFunction(arg) { + return typeof arg === 'function'; +} +exports.isFunction = isFunction; + +function isPrimitive(arg) { + return arg === null || + typeof arg === 'boolean' || + typeof arg === 'number' || + typeof arg === 'string' || + typeof arg === 'symbol' || // ES6 symbol + typeof arg === 'undefined'; +} +exports.isPrimitive = isPrimitive; + +exports.isBuffer = __webpack_require__(75334)/* .Buffer.isBuffer */.Buffer.isBuffer; + +function objectToString(o) { + return Object.prototype.toString.call(o); +} + + +}, +56995(module, __unused_webpack_exports, __webpack_require__) { +var elliptic = __webpack_require__(92090) +var BN = __webpack_require__(91939) + +module.exports = function createECDH (curve) { + return new ECDH(curve) +} + +var aliases = { + secp256k1: { + name: 'secp256k1', + byteLength: 32 + }, + secp224r1: { + name: 'p224', + byteLength: 28 + }, + prime256v1: { + name: 'p256', + byteLength: 32 + }, + prime192v1: { + name: 'p192', + byteLength: 24 + }, + ed25519: { + name: 'ed25519', + byteLength: 32 + }, + secp384r1: { + name: 'p384', + byteLength: 48 + }, + secp521r1: { + name: 'p521', + byteLength: 66 + } +} + +aliases.p224 = aliases.secp224r1 +aliases.p256 = aliases.secp256r1 = aliases.prime256v1 +aliases.p192 = aliases.secp192r1 = aliases.prime192v1 +aliases.p384 = aliases.secp384r1 +aliases.p521 = aliases.secp521r1 + +function ECDH (curve) { + this.curveType = aliases[curve] + if (!this.curveType) { + this.curveType = { + name: curve + } + } + this.curve = new elliptic.ec(this.curveType.name) // eslint-disable-line new-cap + this.keys = void 0 +} + +ECDH.prototype.generateKeys = function (enc, format) { + this.keys = this.curve.genKeyPair() + return this.getPublicKey(enc, format) +} + +ECDH.prototype.computeSecret = function (other, inenc, enc) { + inenc = inenc || 'utf8' + if (!Buffer.isBuffer(other)) { + other = new Buffer(other, inenc) + } + var otherPub = this.curve.keyFromPublic(other).getPublic() + var out = otherPub.mul(this.keys.getPrivate()).getX() + return formatReturnValue(out, enc, this.curveType.byteLength) +} + +ECDH.prototype.getPublicKey = function (enc, format) { + var key = this.keys.getPublic(format === 'compressed', true) + if (format === 'hybrid') { + if (key[key.length - 1] % 2) { + key[0] = 7 + } else { + key[0] = 6 + } + } + return formatReturnValue(key, enc) +} + +ECDH.prototype.getPrivateKey = function (enc) { + return formatReturnValue(this.keys.getPrivate(), enc) +} + +ECDH.prototype.setPublicKey = function (pub, enc) { + enc = enc || 'utf8' + if (!Buffer.isBuffer(pub)) { + pub = new Buffer(pub, enc) + } + this.keys._importPublic(pub) + return this +} + +ECDH.prototype.setPrivateKey = function (priv, enc) { + enc = enc || 'utf8' + if (!Buffer.isBuffer(priv)) { + priv = new Buffer(priv, enc) + } + + var _priv = new BN(priv) + _priv = _priv.toString(16) + this.keys = this.curve.genKeyPair() + this.keys._importPrivate(_priv) + return this +} + +function formatReturnValue (bn, enc, len) { + if (!Array.isArray(bn)) { + bn = bn.toArray() + } + var buf = new Buffer(bn) + if (len && buf.length < len) { + var zeros = new Buffer(len - buf.length) + zeros.fill(0) + buf = Buffer.concat([zeros, buf]) + } + if (!enc) { + return buf + } else { + return buf.toString(enc) + } +} + + +}, +73752(module, __unused_webpack_exports, __webpack_require__) { +"use strict"; + +var inherits = __webpack_require__(86040) +var MD5 = __webpack_require__(52164) +var RIPEMD160 = __webpack_require__(8785) +var sha = __webpack_require__(8993) +var Base = __webpack_require__(27416) + +function Hash (hash) { + Base.call(this, 'digest') + + this._hash = hash +} + +inherits(Hash, Base) + +Hash.prototype._update = function (data) { + this._hash.update(data) +} + +Hash.prototype._final = function () { + return this._hash.digest() +} + +module.exports = function createHash (alg) { + alg = alg.toLowerCase() + if (alg === 'md5') return new MD5() + if (alg === 'rmd160' || alg === 'ripemd160') return new RIPEMD160() + + return new Hash(sha(alg)) +} + + +}, +99124(module, __unused_webpack_exports, __webpack_require__) { +var MD5 = __webpack_require__(52164) + +module.exports = function (buffer) { + return new MD5().update(buffer).digest() +} + + +}, +65870(module, __unused_webpack_exports, __webpack_require__) { +"use strict"; + +var inherits = __webpack_require__(86040) +var Legacy = __webpack_require__(44087) +var Base = __webpack_require__(27416) +var Buffer = (__webpack_require__(46279)/* .Buffer */.Buffer) +var md5 = __webpack_require__(99124) +var RIPEMD160 = __webpack_require__(8785) + +var sha = __webpack_require__(8993) + +var ZEROS = Buffer.alloc(128) + +function Hmac (alg, key) { + Base.call(this, 'digest') + if (typeof key === 'string') { + key = Buffer.from(key) + } + + var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64 + + this._alg = alg + this._key = key + if (key.length > blocksize) { + var hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg) + key = hash.update(key).digest() + } else if (key.length < blocksize) { + key = Buffer.concat([key, ZEROS], blocksize) + } + + var ipad = this._ipad = Buffer.allocUnsafe(blocksize) + var opad = this._opad = Buffer.allocUnsafe(blocksize) + + for (var i = 0; i < blocksize; i++) { + ipad[i] = key[i] ^ 0x36 + opad[i] = key[i] ^ 0x5C + } + this._hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg) + this._hash.update(ipad) +} + +inherits(Hmac, Base) + +Hmac.prototype._update = function (data) { + this._hash.update(data) +} + +Hmac.prototype._final = function () { + var h = this._hash.digest() + var hash = this._alg === 'rmd160' ? new RIPEMD160() : sha(this._alg) + return hash.update(this._opad).update(h).digest() +} + +module.exports = function createHmac (alg, key) { + alg = alg.toLowerCase() + if (alg === 'rmd160' || alg === 'ripemd160') { + return new Hmac('rmd160', key) + } + if (alg === 'md5') { + return new Legacy(md5, key) + } + return new Hmac(alg, key) +} + + +}, +44087(module, __unused_webpack_exports, __webpack_require__) { +"use strict"; + +var inherits = __webpack_require__(86040) +var Buffer = (__webpack_require__(46279)/* .Buffer */.Buffer) + +var Base = __webpack_require__(27416) + +var ZEROS = Buffer.alloc(128) +var blocksize = 64 + +function Hmac (alg, key) { + Base.call(this, 'digest') + if (typeof key === 'string') { + key = Buffer.from(key) + } + + this._alg = alg + this._key = key + + if (key.length > blocksize) { + key = alg(key) + } else if (key.length < blocksize) { + key = Buffer.concat([key, ZEROS], blocksize) + } + + var ipad = this._ipad = Buffer.allocUnsafe(blocksize) + var opad = this._opad = Buffer.allocUnsafe(blocksize) + + for (var i = 0; i < blocksize; i++) { + ipad[i] = key[i] ^ 0x36 + opad[i] = key[i] ^ 0x5C + } + + this._hash = [ipad] +} + +inherits(Hmac, Base) + +Hmac.prototype._update = function (data) { + this._hash.push(data) +} + +Hmac.prototype._final = function () { + var h = this._alg(Buffer.concat(this._hash)) + return this._alg(Buffer.concat([this._opad, h])) +} +module.exports = Hmac + + +}, +86015(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; + + +exports.randomBytes = exports.rng = exports.pseudoRandomBytes = exports.prng = __webpack_require__(31734) +exports.createHash = exports.Hash = __webpack_require__(73752) +exports.createHmac = exports.Hmac = __webpack_require__(65870) + +var algos = __webpack_require__(72040) +var algoKeys = Object.keys(algos) +var hashes = ['sha1', 'sha224', 'sha256', 'sha384', 'sha512', 'md5', 'rmd160'].concat(algoKeys) +exports.getHashes = function () { + return hashes +} + +var p = __webpack_require__(44085) +exports.pbkdf2 = p.pbkdf2 +exports.pbkdf2Sync = p.pbkdf2Sync + +var aes = __webpack_require__(13925) + +exports.Cipher = aes.Cipher +exports.createCipher = aes.createCipher +exports.Cipheriv = aes.Cipheriv +exports.createCipheriv = aes.createCipheriv +exports.Decipher = aes.Decipher +exports.createDecipher = aes.createDecipher +exports.Decipheriv = aes.Decipheriv +exports.createDecipheriv = aes.createDecipheriv +exports.getCiphers = aes.getCiphers +exports.listCiphers = aes.listCiphers + +var dh = __webpack_require__(84119) + +exports.DiffieHellmanGroup = dh.DiffieHellmanGroup +exports.createDiffieHellmanGroup = dh.createDiffieHellmanGroup +exports.getDiffieHellman = dh.getDiffieHellman +exports.createDiffieHellman = dh.createDiffieHellman +exports.DiffieHellman = dh.DiffieHellman + +var sign = __webpack_require__(20007) + +exports.createSign = sign.createSign +exports.Sign = sign.Sign +exports.createVerify = sign.createVerify +exports.Verify = sign.Verify + +exports.createECDH = __webpack_require__(56995) + +var publicEncrypt = __webpack_require__(23772) + +exports.publicEncrypt = publicEncrypt.publicEncrypt +exports.privateEncrypt = publicEncrypt.privateEncrypt +exports.publicDecrypt = publicEncrypt.publicDecrypt +exports.privateDecrypt = publicEncrypt.privateDecrypt + +// the least I can do is make error messages for the rest of the node.js/crypto api. +// ;[ +// 'createCredentials' +// ].forEach(function (name) { +// exports[name] = function () { +// throw new Error([ +// 'sorry, ' + name + ' is not implemented yet', +// 'we accept pull requests', +// 'https://github.com/crypto-browserify/crypto-browserify' +// ].join('\n')) +// } +// }) + +var rf = __webpack_require__(75238) + +exports.randomFill = rf.randomFill +exports.randomFillSync = rf.randomFillSync + +exports.createCredentials = function () { + throw new Error([ + 'sorry, createCredentials is not implemented yet', + 'we accept pull requests', + 'https://github.com/crypto-browserify/crypto-browserify' + ].join('\n')) +} + +exports.constants = { + 'DH_CHECK_P_NOT_SAFE_PRIME': 2, + 'DH_CHECK_P_NOT_PRIME': 1, + 'DH_UNABLE_TO_CHECK_GENERATOR': 4, + 'DH_NOT_SUITABLE_GENERATOR': 8, + 'NPN_ENABLED': 1, + 'ALPN_ENABLED': 1, + 'RSA_PKCS1_PADDING': 1, + 'RSA_SSLV23_PADDING': 2, + 'RSA_NO_PADDING': 3, + 'RSA_PKCS1_OAEP_PADDING': 4, + 'RSA_X931_PADDING': 5, + 'RSA_PKCS1_PSS_PADDING': 6, + 'POINT_CONVERSION_COMPRESSED': 2, + 'POINT_CONVERSION_UNCOMPRESSED': 4, + 'POINT_CONVERSION_HYBRID': 6 +} + + +}, +81742(module, exports, __webpack_require__) { +;(function (root, factory) { + if (true) { + // CommonJS + module.exports = exports = factory(); + } + else {} +}(this, function () { + + /*globals window, global, require*/ + + /** + * CryptoJS core components. + */ + var CryptoJS = CryptoJS || (function (Math, undefined) { + + var crypto; + + // Native crypto from window (Browser) + if (typeof window !== 'undefined' && window.crypto) { + crypto = window.crypto; + } + + // Native crypto in web worker (Browser) + if (typeof self !== 'undefined' && self.crypto) { + crypto = self.crypto; + } + + // Native crypto from worker + if (typeof globalThis !== 'undefined' && globalThis.crypto) { + crypto = globalThis.crypto; + } + + // Native (experimental IE 11) crypto from window (Browser) + if (!crypto && typeof window !== 'undefined' && window.msCrypto) { + crypto = window.msCrypto; + } + + // Native crypto from global (NodeJS) + if (!crypto && typeof __webpack_require__.g !== 'undefined' && __webpack_require__.g.crypto) { + crypto = __webpack_require__.g.crypto; + } + + // Native crypto import via require (NodeJS) + if (!crypto && 'function' === 'function') { + try { + crypto = __webpack_require__(15703); + } catch (err) {} + } + + /* + * Cryptographically secure pseudorandom number generator + * + * As Math.random() is cryptographically not safe to use + */ + var cryptoSecureRandomInt = function () { + if (crypto) { + // Use getRandomValues method (Browser) + if (typeof crypto.getRandomValues === 'function') { + try { + return crypto.getRandomValues(new Uint32Array(1))[0]; + } catch (err) {} + } + + // Use randomBytes method (NodeJS) + if (typeof crypto.randomBytes === 'function') { + try { + return crypto.randomBytes(4).readInt32LE(); + } catch (err) {} + } + } + + throw new Error('Native crypto module could not be used to get secure random number.'); + }; + + /* + * Local polyfill of Object.create + + */ + var create = Object.create || (function () { + function F() {} + + return function (obj) { + var subtype; + + F.prototype = obj; + + subtype = new F(); + + F.prototype = null; + + return subtype; + }; + }()); + + /** + * CryptoJS namespace. + */ + var C = {}; + + /** + * Library namespace. + */ + var C_lib = C.lib = {}; + + /** + * Base object for prototypal inheritance. + */ + var Base = C_lib.Base = (function () { + + + return { + /** + * Creates a new object that inherits from this object. + * + * @param {Object} overrides Properties to copy into the new object. + * + * @return {Object} The new object. + * + * @static + * + * @example + * + * var MyType = CryptoJS.lib.Base.extend({ + * field: 'value', + * + * method: function () { + * } + * }); + */ + extend: function (overrides) { + // Spawn + var subtype = create(this); + + // Augment + if (overrides) { + subtype.mixIn(overrides); + } + + // Create default initializer + if (!subtype.hasOwnProperty('init') || this.init === subtype.init) { + subtype.init = function () { + subtype.$super.init.apply(this, arguments); + }; + } + + // Initializer's prototype is the subtype object + subtype.init.prototype = subtype; + + // Reference supertype + subtype.$super = this; + + return subtype; + }, + + /** + * Extends this object and runs the init method. + * Arguments to create() will be passed to init(). + * + * @return {Object} The new object. + * + * @static + * + * @example + * + * var instance = MyType.create(); + */ + create: function () { + var instance = this.extend(); + instance.init.apply(instance, arguments); + + return instance; + }, + + /** + * Initializes a newly created object. + * Override this method to add some logic when your objects are created. + * + * @example + * + * var MyType = CryptoJS.lib.Base.extend({ + * init: function () { + * // ... + * } + * }); + */ + init: function () { + }, + + /** + * Copies properties into this object. + * + * @param {Object} properties The properties to mix in. + * + * @example + * + * MyType.mixIn({ + * field: 'value' + * }); + */ + mixIn: function (properties) { + for (var propertyName in properties) { + if (properties.hasOwnProperty(propertyName)) { + this[propertyName] = properties[propertyName]; + } + } + + // IE won't copy toString using the loop above + if (properties.hasOwnProperty('toString')) { + this.toString = properties.toString; + } + }, + + /** + * Creates a copy of this object. + * + * @return {Object} The clone. + * + * @example + * + * var clone = instance.clone(); + */ + clone: function () { + return this.init.prototype.extend(this); + } + }; + }()); + + /** + * An array of 32-bit words. + * + * @property {Array} words The array of 32-bit words. + * @property {number} sigBytes The number of significant bytes in this word array. + */ + var WordArray = C_lib.WordArray = Base.extend({ + /** + * Initializes a newly created word array. + * + * @param {Array} words (Optional) An array of 32-bit words. + * @param {number} sigBytes (Optional) The number of significant bytes in the words. + * + * @example + * + * var wordArray = CryptoJS.lib.WordArray.create(); + * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607]); + * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607], 6); + */ + init: function (words, sigBytes) { + words = this.words = words || []; + + if (sigBytes != undefined) { + this.sigBytes = sigBytes; + } else { + this.sigBytes = words.length * 4; + } + }, + + /** + * Converts this word array to a string. + * + * @param {Encoder} encoder (Optional) The encoding strategy to use. Default: CryptoJS.enc.Hex + * + * @return {string} The stringified word array. + * + * @example + * + * var string = wordArray + ''; + * var string = wordArray.toString(); + * var string = wordArray.toString(CryptoJS.enc.Utf8); + */ + toString: function (encoder) { + return (encoder || Hex).stringify(this); + }, + + /** + * Concatenates a word array to this word array. + * + * @param {WordArray} wordArray The word array to append. + * + * @return {WordArray} This word array. + * + * @example + * + * wordArray1.concat(wordArray2); + */ + concat: function (wordArray) { + // Shortcuts + var thisWords = this.words; + var thatWords = wordArray.words; + var thisSigBytes = this.sigBytes; + var thatSigBytes = wordArray.sigBytes; + + // Clamp excess bits + this.clamp(); + + // Concat + if (thisSigBytes % 4) { + // Copy one byte at a time + for (var i = 0; i < thatSigBytes; i++) { + var thatByte = (thatWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; + thisWords[(thisSigBytes + i) >>> 2] |= thatByte << (24 - ((thisSigBytes + i) % 4) * 8); + } + } else { + // Copy one word at a time + for (var j = 0; j < thatSigBytes; j += 4) { + thisWords[(thisSigBytes + j) >>> 2] = thatWords[j >>> 2]; + } + } + this.sigBytes += thatSigBytes; + + // Chainable + return this; + }, + + /** + * Removes insignificant bits. + * + * @example + * + * wordArray.clamp(); + */ + clamp: function () { + // Shortcuts + var words = this.words; + var sigBytes = this.sigBytes; + + // Clamp + words[sigBytes >>> 2] &= 0xffffffff << (32 - (sigBytes % 4) * 8); + words.length = Math.ceil(sigBytes / 4); + }, + + /** + * Creates a copy of this word array. + * + * @return {WordArray} The clone. + * + * @example + * + * var clone = wordArray.clone(); + */ + clone: function () { + var clone = Base.clone.call(this); + clone.words = this.words.slice(0); + + return clone; + }, + + /** + * Creates a word array filled with random bytes. + * + * @param {number} nBytes The number of random bytes to generate. + * + * @return {WordArray} The random word array. + * + * @static + * + * @example + * + * var wordArray = CryptoJS.lib.WordArray.random(16); + */ + random: function (nBytes) { + var words = []; + + for (var i = 0; i < nBytes; i += 4) { + words.push(cryptoSecureRandomInt()); + } + + return new WordArray.init(words, nBytes); + } + }); + + /** + * Encoder namespace. + */ + var C_enc = C.enc = {}; + + /** + * Hex encoding strategy. + */ + var Hex = C_enc.Hex = { + /** + * Converts a word array to a hex string. + * + * @param {WordArray} wordArray The word array. + * + * @return {string} The hex string. + * + * @static + * + * @example + * + * var hexString = CryptoJS.enc.Hex.stringify(wordArray); + */ + stringify: function (wordArray) { + // Shortcuts + var words = wordArray.words; + var sigBytes = wordArray.sigBytes; + + // Convert + var hexChars = []; + for (var i = 0; i < sigBytes; i++) { + var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; + hexChars.push((bite >>> 4).toString(16)); + hexChars.push((bite & 0x0f).toString(16)); + } + + return hexChars.join(''); + }, + + /** + * Converts a hex string to a word array. + * + * @param {string} hexStr The hex string. + * + * @return {WordArray} The word array. + * + * @static + * + * @example + * + * var wordArray = CryptoJS.enc.Hex.parse(hexString); + */ + parse: function (hexStr) { + // Shortcut + var hexStrLength = hexStr.length; + + // Convert + var words = []; + for (var i = 0; i < hexStrLength; i += 2) { + words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << (24 - (i % 8) * 4); + } + + return new WordArray.init(words, hexStrLength / 2); + } + }; + + /** + * Latin1 encoding strategy. + */ + var Latin1 = C_enc.Latin1 = { + /** + * Converts a word array to a Latin1 string. + * + * @param {WordArray} wordArray The word array. + * + * @return {string} The Latin1 string. + * + * @static + * + * @example + * + * var latin1String = CryptoJS.enc.Latin1.stringify(wordArray); + */ + stringify: function (wordArray) { + // Shortcuts + var words = wordArray.words; + var sigBytes = wordArray.sigBytes; + + // Convert + var latin1Chars = []; + for (var i = 0; i < sigBytes; i++) { + var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; + latin1Chars.push(String.fromCharCode(bite)); + } + + return latin1Chars.join(''); + }, + + /** + * Converts a Latin1 string to a word array. + * + * @param {string} latin1Str The Latin1 string. + * + * @return {WordArray} The word array. + * + * @static + * + * @example + * + * var wordArray = CryptoJS.enc.Latin1.parse(latin1String); + */ + parse: function (latin1Str) { + // Shortcut + var latin1StrLength = latin1Str.length; + + // Convert + var words = []; + for (var i = 0; i < latin1StrLength; i++) { + words[i >>> 2] |= (latin1Str.charCodeAt(i) & 0xff) << (24 - (i % 4) * 8); + } + + return new WordArray.init(words, latin1StrLength); + } + }; + + /** + * UTF-8 encoding strategy. + */ + var Utf8 = C_enc.Utf8 = { + /** + * Converts a word array to a UTF-8 string. + * + * @param {WordArray} wordArray The word array. + * + * @return {string} The UTF-8 string. + * + * @static + * + * @example + * + * var utf8String = CryptoJS.enc.Utf8.stringify(wordArray); + */ + stringify: function (wordArray) { + try { + return decodeURIComponent(escape(Latin1.stringify(wordArray))); + } catch (e) { + throw new Error('Malformed UTF-8 data'); + } + }, + + /** + * Converts a UTF-8 string to a word array. + * + * @param {string} utf8Str The UTF-8 string. + * + * @return {WordArray} The word array. + * + * @static + * + * @example + * + * var wordArray = CryptoJS.enc.Utf8.parse(utf8String); + */ + parse: function (utf8Str) { + return Latin1.parse(unescape(encodeURIComponent(utf8Str))); + } + }; + + /** + * Abstract buffered block algorithm template. + * + * The property blockSize must be implemented in a concrete subtype. + * + * @property {number} _minBufferSize The number of blocks that should be kept unprocessed in the buffer. Default: 0 + */ + var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({ + /** + * Resets this block algorithm's data buffer to its initial state. + * + * @example + * + * bufferedBlockAlgorithm.reset(); + */ + reset: function () { + // Initial values + this._data = new WordArray.init(); + this._nDataBytes = 0; + }, + + /** + * Adds new data to this block algorithm's buffer. + * + * @param {WordArray|string} data The data to append. Strings are converted to a WordArray using UTF-8. + * + * @example + * + * bufferedBlockAlgorithm._append('data'); + * bufferedBlockAlgorithm._append(wordArray); + */ + _append: function (data) { + // Convert string to WordArray, else assume WordArray already + if (typeof data == 'string') { + data = Utf8.parse(data); + } + + // Append + this._data.concat(data); + this._nDataBytes += data.sigBytes; + }, + + /** + * Processes available data blocks. + * + * This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype. + * + * @param {boolean} doFlush Whether all blocks and partial blocks should be processed. + * + * @return {WordArray} The processed data. + * + * @example + * + * var processedData = bufferedBlockAlgorithm._process(); + * var processedData = bufferedBlockAlgorithm._process(!!'flush'); + */ + _process: function (doFlush) { + var processedWords; + + // Shortcuts + var data = this._data; + var dataWords = data.words; + var dataSigBytes = data.sigBytes; + var blockSize = this.blockSize; + var blockSizeBytes = blockSize * 4; + + // Count blocks ready + var nBlocksReady = dataSigBytes / blockSizeBytes; + if (doFlush) { + // Round up to include partial blocks + nBlocksReady = Math.ceil(nBlocksReady); + } else { + // Round down to include only full blocks, + // less the number of blocks that must remain in the buffer + nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0); + } + + // Count words ready + var nWordsReady = nBlocksReady * blockSize; + + // Count bytes ready + var nBytesReady = Math.min(nWordsReady * 4, dataSigBytes); + + // Process blocks + if (nWordsReady) { + for (var offset = 0; offset < nWordsReady; offset += blockSize) { + // Perform concrete-algorithm logic + this._doProcessBlock(dataWords, offset); + } + + // Remove processed words + processedWords = dataWords.splice(0, nWordsReady); + data.sigBytes -= nBytesReady; + } + + // Return processed words + return new WordArray.init(processedWords, nBytesReady); + }, + + /** + * Creates a copy of this object. + * + * @return {Object} The clone. + * + * @example + * + * var clone = bufferedBlockAlgorithm.clone(); + */ + clone: function () { + var clone = Base.clone.call(this); + clone._data = this._data.clone(); + + return clone; + }, + + _minBufferSize: 0 + }); + + /** + * Abstract hasher template. + * + * @property {number} blockSize The number of 32-bit words this hasher operates on. Default: 16 (512 bits) + */ + var Hasher = C_lib.Hasher = BufferedBlockAlgorithm.extend({ + /** + * Configuration options. + */ + cfg: Base.extend(), + + /** + * Initializes a newly created hasher. + * + * @param {Object} cfg (Optional) The configuration options to use for this hash computation. + * + * @example + * + * var hasher = CryptoJS.algo.SHA256.create(); + */ + init: function (cfg) { + // Apply config defaults + this.cfg = this.cfg.extend(cfg); + + // Set initial values + this.reset(); + }, + + /** + * Resets this hasher to its initial state. + * + * @example + * + * hasher.reset(); + */ + reset: function () { + // Reset data buffer + BufferedBlockAlgorithm.reset.call(this); + + // Perform concrete-hasher logic + this._doReset(); + }, + + /** + * Updates this hasher with a message. + * + * @param {WordArray|string} messageUpdate The message to append. + * + * @return {Hasher} This hasher. + * + * @example + * + * hasher.update('message'); + * hasher.update(wordArray); + */ + update: function (messageUpdate) { + // Append + this._append(messageUpdate); + + // Update the hash + this._process(); + + // Chainable + return this; + }, + + /** + * Finalizes the hash computation. + * Note that the finalize operation is effectively a destructive, read-once operation. + * + * @param {WordArray|string} messageUpdate (Optional) A final message update. + * + * @return {WordArray} The hash. + * + * @example + * + * var hash = hasher.finalize(); + * var hash = hasher.finalize('message'); + * var hash = hasher.finalize(wordArray); + */ + finalize: function (messageUpdate) { + // Final message update + if (messageUpdate) { + this._append(messageUpdate); + } + + // Perform concrete-hasher logic + var hash = this._doFinalize(); + + return hash; + }, + + blockSize: 512/32, + + /** + * Creates a shortcut function to a hasher's object interface. + * + * @param {Hasher} hasher The hasher to create a helper for. + * + * @return {Function} The shortcut function. + * + * @static + * + * @example + * + * var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256); + */ + _createHelper: function (hasher) { + return function (message, cfg) { + return new hasher.init(cfg).finalize(message); + }; + }, + + /** + * Creates a shortcut function to the HMAC's object interface. + * + * @param {Hasher} hasher The hasher to use in this HMAC helper. + * + * @return {Function} The shortcut function. + * + * @static + * + * @example + * + * var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256); + */ + _createHmacHelper: function (hasher) { + return function (message, key) { + return new C_algo.HMAC.init(hasher, key).finalize(message); + }; + } + }); + + /** + * Algorithm namespace. + */ + var C_algo = C.algo = {}; + + return C; + }(Math)); + + + return CryptoJS; + +})); + +}, +68405(module, exports, __webpack_require__) { +;(function (root, factory) { + if (true) { + // CommonJS + module.exports = exports = factory(__webpack_require__(81742)); + } + else {} +}(this, function (CryptoJS) { + + (function (Math) { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var WordArray = C_lib.WordArray; + var Hasher = C_lib.Hasher; + var C_algo = C.algo; + + // Constants table + var T = []; + + // Compute constants + (function () { + for (var i = 0; i < 64; i++) { + T[i] = (Math.abs(Math.sin(i + 1)) * 0x100000000) | 0; + } + }()); + + /** + * MD5 hash algorithm. + */ + var MD5 = C_algo.MD5 = Hasher.extend({ + _doReset: function () { + this._hash = new WordArray.init([ + 0x67452301, 0xefcdab89, + 0x98badcfe, 0x10325476 + ]); + }, + + _doProcessBlock: function (M, offset) { + // Swap endian + for (var i = 0; i < 16; i++) { + // Shortcuts + var offset_i = offset + i; + var M_offset_i = M[offset_i]; + + M[offset_i] = ( + (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) | + (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00) + ); + } + + // Shortcuts + var H = this._hash.words; + + var M_offset_0 = M[offset + 0]; + var M_offset_1 = M[offset + 1]; + var M_offset_2 = M[offset + 2]; + var M_offset_3 = M[offset + 3]; + var M_offset_4 = M[offset + 4]; + var M_offset_5 = M[offset + 5]; + var M_offset_6 = M[offset + 6]; + var M_offset_7 = M[offset + 7]; + var M_offset_8 = M[offset + 8]; + var M_offset_9 = M[offset + 9]; + var M_offset_10 = M[offset + 10]; + var M_offset_11 = M[offset + 11]; + var M_offset_12 = M[offset + 12]; + var M_offset_13 = M[offset + 13]; + var M_offset_14 = M[offset + 14]; + var M_offset_15 = M[offset + 15]; + + // Working variables + var a = H[0]; + var b = H[1]; + var c = H[2]; + var d = H[3]; + + // Computation + a = FF(a, b, c, d, M_offset_0, 7, T[0]); + d = FF(d, a, b, c, M_offset_1, 12, T[1]); + c = FF(c, d, a, b, M_offset_2, 17, T[2]); + b = FF(b, c, d, a, M_offset_3, 22, T[3]); + a = FF(a, b, c, d, M_offset_4, 7, T[4]); + d = FF(d, a, b, c, M_offset_5, 12, T[5]); + c = FF(c, d, a, b, M_offset_6, 17, T[6]); + b = FF(b, c, d, a, M_offset_7, 22, T[7]); + a = FF(a, b, c, d, M_offset_8, 7, T[8]); + d = FF(d, a, b, c, M_offset_9, 12, T[9]); + c = FF(c, d, a, b, M_offset_10, 17, T[10]); + b = FF(b, c, d, a, M_offset_11, 22, T[11]); + a = FF(a, b, c, d, M_offset_12, 7, T[12]); + d = FF(d, a, b, c, M_offset_13, 12, T[13]); + c = FF(c, d, a, b, M_offset_14, 17, T[14]); + b = FF(b, c, d, a, M_offset_15, 22, T[15]); + + a = GG(a, b, c, d, M_offset_1, 5, T[16]); + d = GG(d, a, b, c, M_offset_6, 9, T[17]); + c = GG(c, d, a, b, M_offset_11, 14, T[18]); + b = GG(b, c, d, a, M_offset_0, 20, T[19]); + a = GG(a, b, c, d, M_offset_5, 5, T[20]); + d = GG(d, a, b, c, M_offset_10, 9, T[21]); + c = GG(c, d, a, b, M_offset_15, 14, T[22]); + b = GG(b, c, d, a, M_offset_4, 20, T[23]); + a = GG(a, b, c, d, M_offset_9, 5, T[24]); + d = GG(d, a, b, c, M_offset_14, 9, T[25]); + c = GG(c, d, a, b, M_offset_3, 14, T[26]); + b = GG(b, c, d, a, M_offset_8, 20, T[27]); + a = GG(a, b, c, d, M_offset_13, 5, T[28]); + d = GG(d, a, b, c, M_offset_2, 9, T[29]); + c = GG(c, d, a, b, M_offset_7, 14, T[30]); + b = GG(b, c, d, a, M_offset_12, 20, T[31]); + + a = HH(a, b, c, d, M_offset_5, 4, T[32]); + d = HH(d, a, b, c, M_offset_8, 11, T[33]); + c = HH(c, d, a, b, M_offset_11, 16, T[34]); + b = HH(b, c, d, a, M_offset_14, 23, T[35]); + a = HH(a, b, c, d, M_offset_1, 4, T[36]); + d = HH(d, a, b, c, M_offset_4, 11, T[37]); + c = HH(c, d, a, b, M_offset_7, 16, T[38]); + b = HH(b, c, d, a, M_offset_10, 23, T[39]); + a = HH(a, b, c, d, M_offset_13, 4, T[40]); + d = HH(d, a, b, c, M_offset_0, 11, T[41]); + c = HH(c, d, a, b, M_offset_3, 16, T[42]); + b = HH(b, c, d, a, M_offset_6, 23, T[43]); + a = HH(a, b, c, d, M_offset_9, 4, T[44]); + d = HH(d, a, b, c, M_offset_12, 11, T[45]); + c = HH(c, d, a, b, M_offset_15, 16, T[46]); + b = HH(b, c, d, a, M_offset_2, 23, T[47]); + + a = II(a, b, c, d, M_offset_0, 6, T[48]); + d = II(d, a, b, c, M_offset_7, 10, T[49]); + c = II(c, d, a, b, M_offset_14, 15, T[50]); + b = II(b, c, d, a, M_offset_5, 21, T[51]); + a = II(a, b, c, d, M_offset_12, 6, T[52]); + d = II(d, a, b, c, M_offset_3, 10, T[53]); + c = II(c, d, a, b, M_offset_10, 15, T[54]); + b = II(b, c, d, a, M_offset_1, 21, T[55]); + a = II(a, b, c, d, M_offset_8, 6, T[56]); + d = II(d, a, b, c, M_offset_15, 10, T[57]); + c = II(c, d, a, b, M_offset_6, 15, T[58]); + b = II(b, c, d, a, M_offset_13, 21, T[59]); + a = II(a, b, c, d, M_offset_4, 6, T[60]); + d = II(d, a, b, c, M_offset_11, 10, T[61]); + c = II(c, d, a, b, M_offset_2, 15, T[62]); + b = II(b, c, d, a, M_offset_9, 21, T[63]); + + // Intermediate hash value + H[0] = (H[0] + a) | 0; + H[1] = (H[1] + b) | 0; + H[2] = (H[2] + c) | 0; + H[3] = (H[3] + d) | 0; + }, + + _doFinalize: function () { + // Shortcuts + var data = this._data; + var dataWords = data.words; + + var nBitsTotal = this._nDataBytes * 8; + var nBitsLeft = data.sigBytes * 8; + + // Add padding + dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); + + var nBitsTotalH = Math.floor(nBitsTotal / 0x100000000); + var nBitsTotalL = nBitsTotal; + dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = ( + (((nBitsTotalH << 8) | (nBitsTotalH >>> 24)) & 0x00ff00ff) | + (((nBitsTotalH << 24) | (nBitsTotalH >>> 8)) & 0xff00ff00) + ); + dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = ( + (((nBitsTotalL << 8) | (nBitsTotalL >>> 24)) & 0x00ff00ff) | + (((nBitsTotalL << 24) | (nBitsTotalL >>> 8)) & 0xff00ff00) + ); + + data.sigBytes = (dataWords.length + 1) * 4; + + // Hash final blocks + this._process(); + + // Shortcuts + var hash = this._hash; + var H = hash.words; + + // Swap endian + for (var i = 0; i < 4; i++) { + // Shortcut + var H_i = H[i]; + + H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) | + (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00); + } + + // Return final computed hash + return hash; + }, + + clone: function () { + var clone = Hasher.clone.call(this); + clone._hash = this._hash.clone(); + + return clone; + } + }); + + function FF(a, b, c, d, x, s, t) { + var n = a + ((b & c) | (~b & d)) + x + t; + return ((n << s) | (n >>> (32 - s))) + b; + } + + function GG(a, b, c, d, x, s, t) { + var n = a + ((b & d) | (c & ~d)) + x + t; + return ((n << s) | (n >>> (32 - s))) + b; + } + + function HH(a, b, c, d, x, s, t) { + var n = a + (b ^ c ^ d) + x + t; + return ((n << s) | (n >>> (32 - s))) + b; + } + + function II(a, b, c, d, x, s, t) { + var n = a + (c ^ (b | ~d)) + x + t; + return ((n << s) | (n >>> (32 - s))) + b; + } + + /** + * Shortcut function to the hasher's object interface. + * + * @param {WordArray|string} message The message to hash. + * + * @return {WordArray} The hash. + * + * @static + * + * @example + * + * var hash = CryptoJS.MD5('message'); + * var hash = CryptoJS.MD5(wordArray); + */ + C.MD5 = Hasher._createHelper(MD5); + + /** + * Shortcut function to the HMAC's object interface. + * + * @param {WordArray|string} message The message to hash. + * @param {WordArray|string} key The secret key. + * + * @return {WordArray} The HMAC. + * + * @static + * + * @example + * + * var hmac = CryptoJS.HmacMD5(message, key); + */ + C.HmacMD5 = Hasher._createHmacHelper(MD5); + }(Math)); + + + return CryptoJS.MD5; + +})); + +}, +37254(module, exports, __webpack_require__) { +;(function (root, factory) { + if (true) { + // CommonJS + module.exports = exports = factory(__webpack_require__(81742)); + } + else {} +}(this, function (CryptoJS) { + + (function (Math) { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var WordArray = C_lib.WordArray; + var Hasher = C_lib.Hasher; + var C_algo = C.algo; + + // Initialization and round constants tables + var H = []; + var K = []; + + // Compute constants + (function () { + function isPrime(n) { + var sqrtN = Math.sqrt(n); + for (var factor = 2; factor <= sqrtN; factor++) { + if (!(n % factor)) { + return false; + } + } + + return true; + } + + function getFractionalBits(n) { + return ((n - (n | 0)) * 0x100000000) | 0; + } + + var n = 2; + var nPrime = 0; + while (nPrime < 64) { + if (isPrime(n)) { + if (nPrime < 8) { + H[nPrime] = getFractionalBits(Math.pow(n, 1 / 2)); + } + K[nPrime] = getFractionalBits(Math.pow(n, 1 / 3)); + + nPrime++; + } + + n++; + } + }()); + + // Reusable object + var W = []; + + /** + * SHA-256 hash algorithm. + */ + var SHA256 = C_algo.SHA256 = Hasher.extend({ + _doReset: function () { + this._hash = new WordArray.init(H.slice(0)); + }, + + _doProcessBlock: function (M, offset) { + // Shortcut + var H = this._hash.words; + + // Working variables + var a = H[0]; + var b = H[1]; + var c = H[2]; + var d = H[3]; + var e = H[4]; + var f = H[5]; + var g = H[6]; + var h = H[7]; + + // Computation + for (var i = 0; i < 64; i++) { + if (i < 16) { + W[i] = M[offset + i] | 0; + } else { + var gamma0x = W[i - 15]; + var gamma0 = ((gamma0x << 25) | (gamma0x >>> 7)) ^ + ((gamma0x << 14) | (gamma0x >>> 18)) ^ + (gamma0x >>> 3); + + var gamma1x = W[i - 2]; + var gamma1 = ((gamma1x << 15) | (gamma1x >>> 17)) ^ + ((gamma1x << 13) | (gamma1x >>> 19)) ^ + (gamma1x >>> 10); + + W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]; + } + + var ch = (e & f) ^ (~e & g); + var maj = (a & b) ^ (a & c) ^ (b & c); + + var sigma0 = ((a << 30) | (a >>> 2)) ^ ((a << 19) | (a >>> 13)) ^ ((a << 10) | (a >>> 22)); + var sigma1 = ((e << 26) | (e >>> 6)) ^ ((e << 21) | (e >>> 11)) ^ ((e << 7) | (e >>> 25)); + + var t1 = h + sigma1 + ch + K[i] + W[i]; + var t2 = sigma0 + maj; + + h = g; + g = f; + f = e; + e = (d + t1) | 0; + d = c; + c = b; + b = a; + a = (t1 + t2) | 0; + } + + // Intermediate hash value + H[0] = (H[0] + a) | 0; + H[1] = (H[1] + b) | 0; + H[2] = (H[2] + c) | 0; + H[3] = (H[3] + d) | 0; + H[4] = (H[4] + e) | 0; + H[5] = (H[5] + f) | 0; + H[6] = (H[6] + g) | 0; + H[7] = (H[7] + h) | 0; + }, + + _doFinalize: function () { + // Shortcuts + var data = this._data; + var dataWords = data.words; + + var nBitsTotal = this._nDataBytes * 8; + var nBitsLeft = data.sigBytes * 8; + + // Add padding + dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); + dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000); + dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal; + data.sigBytes = dataWords.length * 4; + + // Hash final blocks + this._process(); + + // Return final computed hash + return this._hash; + }, + + clone: function () { + var clone = Hasher.clone.call(this); + clone._hash = this._hash.clone(); + + return clone; + } + }); + + /** + * Shortcut function to the hasher's object interface. + * + * @param {WordArray|string} message The message to hash. + * + * @return {WordArray} The hash. + * + * @static + * + * @example + * + * var hash = CryptoJS.SHA256('message'); + * var hash = CryptoJS.SHA256(wordArray); + */ + C.SHA256 = Hasher._createHelper(SHA256); + + /** + * Shortcut function to the HMAC's object interface. + * + * @param {WordArray|string} message The message to hash. + * @param {WordArray|string} key The secret key. + * + * @return {WordArray} The HMAC. + * + * @static + * + * @example + * + * var hmac = CryptoJS.HmacSHA256(message, key); + */ + C.HmacSHA256 = Hasher._createHmacHelper(SHA256); + }(Math)); + + + return CryptoJS.SHA256; + +})); + +}, +88833(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; + + +exports.utils = __webpack_require__(62827); +exports.Cipher = __webpack_require__(8887); +exports.DES = __webpack_require__(30386); +exports.CBC = __webpack_require__(63596); +exports.EDE = __webpack_require__(34366); + + +}, +63596(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; + + +var assert = __webpack_require__(77285); +var inherits = __webpack_require__(86040); + +var proto = {}; + +function CBCState(iv) { + assert.equal(iv.length, 8, 'Invalid IV length'); + + this.iv = new Array(8); + for (var i = 0; i < this.iv.length; i++) + this.iv[i] = iv[i]; +} + +function instantiate(Base) { + function CBC(options) { + Base.call(this, options); + this._cbcInit(); + } + inherits(CBC, Base); + + var keys = Object.keys(proto); + for (var i = 0; i < keys.length; i++) { + var key = keys[i]; + CBC.prototype[key] = proto[key]; + } + + CBC.create = function create(options) { + return new CBC(options); + }; + + return CBC; +} + +exports.instantiate = instantiate; + +proto._cbcInit = function _cbcInit() { + var state = new CBCState(this.options.iv); + this._cbcState = state; +}; + +proto._update = function _update(inp, inOff, out, outOff) { + var state = this._cbcState; + var superProto = this.constructor.super_.prototype; + + var iv = state.iv; + if (this.type === 'encrypt') { + for (var i = 0; i < this.blockSize; i++) + iv[i] ^= inp[inOff + i]; + + superProto._update.call(this, iv, 0, out, outOff); + + for (var i = 0; i < this.blockSize; i++) + iv[i] = out[outOff + i]; + } else { + superProto._update.call(this, inp, inOff, out, outOff); + + for (var i = 0; i < this.blockSize; i++) + out[outOff + i] ^= iv[i]; + + for (var i = 0; i < this.blockSize; i++) + iv[i] = inp[inOff + i]; + } +}; + + +}, +8887(module, __unused_webpack_exports, __webpack_require__) { +"use strict"; + + +var assert = __webpack_require__(77285); + +function Cipher(options) { + this.options = options; + + this.type = this.options.type; + this.blockSize = 8; + this._init(); + + this.buffer = new Array(this.blockSize); + this.bufferOff = 0; + this.padding = options.padding !== false +} +module.exports = Cipher; + +Cipher.prototype._init = function _init() { + // Might be overrided +}; + +Cipher.prototype.update = function update(data) { + if (data.length === 0) + return []; + + if (this.type === 'decrypt') + return this._updateDecrypt(data); + else + return this._updateEncrypt(data); +}; + +Cipher.prototype._buffer = function _buffer(data, off) { + // Append data to buffer + var min = Math.min(this.buffer.length - this.bufferOff, data.length - off); + for (var i = 0; i < min; i++) + this.buffer[this.bufferOff + i] = data[off + i]; + this.bufferOff += min; + + // Shift next + return min; +}; + +Cipher.prototype._flushBuffer = function _flushBuffer(out, off) { + this._update(this.buffer, 0, out, off); + this.bufferOff = 0; + return this.blockSize; +}; + +Cipher.prototype._updateEncrypt = function _updateEncrypt(data) { + var inputOff = 0; + var outputOff = 0; + + var count = ((this.bufferOff + data.length) / this.blockSize) | 0; + var out = new Array(count * this.blockSize); + + if (this.bufferOff !== 0) { + inputOff += this._buffer(data, inputOff); + + if (this.bufferOff === this.buffer.length) + outputOff += this._flushBuffer(out, outputOff); + } + + // Write blocks + var max = data.length - ((data.length - inputOff) % this.blockSize); + for (; inputOff < max; inputOff += this.blockSize) { + this._update(data, inputOff, out, outputOff); + outputOff += this.blockSize; + } + + // Queue rest + for (; inputOff < data.length; inputOff++, this.bufferOff++) + this.buffer[this.bufferOff] = data[inputOff]; + + return out; +}; + +Cipher.prototype._updateDecrypt = function _updateDecrypt(data) { + var inputOff = 0; + var outputOff = 0; + + var count = Math.ceil((this.bufferOff + data.length) / this.blockSize) - 1; + var out = new Array(count * this.blockSize); + + // TODO(indutny): optimize it, this is far from optimal + for (; count > 0; count--) { + inputOff += this._buffer(data, inputOff); + outputOff += this._flushBuffer(out, outputOff); + } + + // Buffer rest of the input + inputOff += this._buffer(data, inputOff); + + return out; +}; + +Cipher.prototype.final = function final(buffer) { + var first; + if (buffer) + first = this.update(buffer); + + var last; + if (this.type === 'encrypt') + last = this._finalEncrypt(); + else + last = this._finalDecrypt(); + + if (first) + return first.concat(last); + else + return last; +}; + +Cipher.prototype._pad = function _pad(buffer, off) { + if (off === 0) + return false; + + while (off < buffer.length) + buffer[off++] = 0; + + return true; +}; + +Cipher.prototype._finalEncrypt = function _finalEncrypt() { + if (!this._pad(this.buffer, this.bufferOff)) + return []; + + var out = new Array(this.blockSize); + this._update(this.buffer, 0, out, 0); + return out; +}; + +Cipher.prototype._unpad = function _unpad(buffer) { + return buffer; +}; + +Cipher.prototype._finalDecrypt = function _finalDecrypt() { + assert.equal(this.bufferOff, this.blockSize, 'Not enough data to decrypt'); + var out = new Array(this.blockSize); + this._flushBuffer(out, 0); + + return this._unpad(out); +}; + + +}, +30386(module, __unused_webpack_exports, __webpack_require__) { +"use strict"; + + +var assert = __webpack_require__(77285); +var inherits = __webpack_require__(86040); + +var utils = __webpack_require__(62827); +var Cipher = __webpack_require__(8887); + +function DESState() { + this.tmp = new Array(2); + this.keys = null; +} + +function DES(options) { + Cipher.call(this, options); + + var state = new DESState(); + this._desState = state; + + this.deriveKeys(state, options.key); +} +inherits(DES, Cipher); +module.exports = DES; + +DES.create = function create(options) { + return new DES(options); +}; + +var shiftTable = [ + 1, 1, 2, 2, 2, 2, 2, 2, + 1, 2, 2, 2, 2, 2, 2, 1 +]; + +DES.prototype.deriveKeys = function deriveKeys(state, key) { + state.keys = new Array(16 * 2); + + assert.equal(key.length, this.blockSize, 'Invalid key length'); + + var kL = utils.readUInt32BE(key, 0); + var kR = utils.readUInt32BE(key, 4); + + utils.pc1(kL, kR, state.tmp, 0); + kL = state.tmp[0]; + kR = state.tmp[1]; + for (var i = 0; i < state.keys.length; i += 2) { + var shift = shiftTable[i >>> 1]; + kL = utils.r28shl(kL, shift); + kR = utils.r28shl(kR, shift); + utils.pc2(kL, kR, state.keys, i); + } +}; + +DES.prototype._update = function _update(inp, inOff, out, outOff) { + var state = this._desState; + + var l = utils.readUInt32BE(inp, inOff); + var r = utils.readUInt32BE(inp, inOff + 4); + + // Initial Permutation + utils.ip(l, r, state.tmp, 0); + l = state.tmp[0]; + r = state.tmp[1]; + + if (this.type === 'encrypt') + this._encrypt(state, l, r, state.tmp, 0); + else + this._decrypt(state, l, r, state.tmp, 0); + + l = state.tmp[0]; + r = state.tmp[1]; + + utils.writeUInt32BE(out, l, outOff); + utils.writeUInt32BE(out, r, outOff + 4); +}; + +DES.prototype._pad = function _pad(buffer, off) { + if (this.padding === false) { + return false; + } + + var value = buffer.length - off; + for (var i = off; i < buffer.length; i++) + buffer[i] = value; + + return true; +}; + +DES.prototype._unpad = function _unpad(buffer) { + if (this.padding === false) { + return buffer; + } + + var pad = buffer[buffer.length - 1]; + for (var i = buffer.length - pad; i < buffer.length; i++) + assert.equal(buffer[i], pad); + + return buffer.slice(0, buffer.length - pad); +}; + +DES.prototype._encrypt = function _encrypt(state, lStart, rStart, out, off) { + var l = lStart; + var r = rStart; + + // Apply f() x16 times + for (var i = 0; i < state.keys.length; i += 2) { + var keyL = state.keys[i]; + var keyR = state.keys[i + 1]; + + // f(r, k) + utils.expand(r, state.tmp, 0); + + keyL ^= state.tmp[0]; + keyR ^= state.tmp[1]; + var s = utils.substitute(keyL, keyR); + var f = utils.permute(s); + + var t = r; + r = (l ^ f) >>> 0; + l = t; + } + + // Reverse Initial Permutation + utils.rip(r, l, out, off); +}; + +DES.prototype._decrypt = function _decrypt(state, lStart, rStart, out, off) { + var l = rStart; + var r = lStart; + + // Apply f() x16 times + for (var i = state.keys.length - 2; i >= 0; i -= 2) { + var keyL = state.keys[i]; + var keyR = state.keys[i + 1]; + + // f(r, k) + utils.expand(l, state.tmp, 0); + + keyL ^= state.tmp[0]; + keyR ^= state.tmp[1]; + var s = utils.substitute(keyL, keyR); + var f = utils.permute(s); + + var t = l; + l = (r ^ f) >>> 0; + r = t; + } + + // Reverse Initial Permutation + utils.rip(l, r, out, off); +}; + + +}, +34366(module, __unused_webpack_exports, __webpack_require__) { +"use strict"; + + +var assert = __webpack_require__(77285); +var inherits = __webpack_require__(86040); + +var Cipher = __webpack_require__(8887); +var DES = __webpack_require__(30386); + +function EDEState(type, key) { + assert.equal(key.length, 24, 'Invalid key length'); + + var k1 = key.slice(0, 8); + var k2 = key.slice(8, 16); + var k3 = key.slice(16, 24); + + if (type === 'encrypt') { + this.ciphers = [ + DES.create({ type: 'encrypt', key: k1 }), + DES.create({ type: 'decrypt', key: k2 }), + DES.create({ type: 'encrypt', key: k3 }) + ]; + } else { + this.ciphers = [ + DES.create({ type: 'decrypt', key: k3 }), + DES.create({ type: 'encrypt', key: k2 }), + DES.create({ type: 'decrypt', key: k1 }) + ]; + } +} + +function EDE(options) { + Cipher.call(this, options); + + var state = new EDEState(this.type, this.options.key); + this._edeState = state; +} +inherits(EDE, Cipher); + +module.exports = EDE; + +EDE.create = function create(options) { + return new EDE(options); +}; + +EDE.prototype._update = function _update(inp, inOff, out, outOff) { + var state = this._edeState; + + state.ciphers[0]._update(inp, inOff, out, outOff); + state.ciphers[1]._update(out, outOff, out, outOff); + state.ciphers[2]._update(out, outOff, out, outOff); +}; + +EDE.prototype._pad = DES.prototype._pad; +EDE.prototype._unpad = DES.prototype._unpad; + + +}, +62827(__unused_webpack_module, exports) { +"use strict"; + + +exports.readUInt32BE = function readUInt32BE(bytes, off) { + var res = (bytes[0 + off] << 24) | + (bytes[1 + off] << 16) | + (bytes[2 + off] << 8) | + bytes[3 + off]; + return res >>> 0; +}; + +exports.writeUInt32BE = function writeUInt32BE(bytes, value, off) { + bytes[0 + off] = value >>> 24; + bytes[1 + off] = (value >>> 16) & 0xff; + bytes[2 + off] = (value >>> 8) & 0xff; + bytes[3 + off] = value & 0xff; +}; + +exports.ip = function ip(inL, inR, out, off) { + var outL = 0; + var outR = 0; + + for (var i = 6; i >= 0; i -= 2) { + for (var j = 0; j <= 24; j += 8) { + outL <<= 1; + outL |= (inR >>> (j + i)) & 1; + } + for (var j = 0; j <= 24; j += 8) { + outL <<= 1; + outL |= (inL >>> (j + i)) & 1; + } + } + + for (var i = 6; i >= 0; i -= 2) { + for (var j = 1; j <= 25; j += 8) { + outR <<= 1; + outR |= (inR >>> (j + i)) & 1; + } + for (var j = 1; j <= 25; j += 8) { + outR <<= 1; + outR |= (inL >>> (j + i)) & 1; + } + } + + out[off + 0] = outL >>> 0; + out[off + 1] = outR >>> 0; +}; + +exports.rip = function rip(inL, inR, out, off) { + var outL = 0; + var outR = 0; + + for (var i = 0; i < 4; i++) { + for (var j = 24; j >= 0; j -= 8) { + outL <<= 1; + outL |= (inR >>> (j + i)) & 1; + outL <<= 1; + outL |= (inL >>> (j + i)) & 1; + } + } + for (var i = 4; i < 8; i++) { + for (var j = 24; j >= 0; j -= 8) { + outR <<= 1; + outR |= (inR >>> (j + i)) & 1; + outR <<= 1; + outR |= (inL >>> (j + i)) & 1; + } + } + + out[off + 0] = outL >>> 0; + out[off + 1] = outR >>> 0; +}; + +exports.pc1 = function pc1(inL, inR, out, off) { + var outL = 0; + var outR = 0; + + // 7, 15, 23, 31, 39, 47, 55, 63 + // 6, 14, 22, 30, 39, 47, 55, 63 + // 5, 13, 21, 29, 39, 47, 55, 63 + // 4, 12, 20, 28 + for (var i = 7; i >= 5; i--) { + for (var j = 0; j <= 24; j += 8) { + outL <<= 1; + outL |= (inR >> (j + i)) & 1; + } + for (var j = 0; j <= 24; j += 8) { + outL <<= 1; + outL |= (inL >> (j + i)) & 1; + } + } + for (var j = 0; j <= 24; j += 8) { + outL <<= 1; + outL |= (inR >> (j + i)) & 1; + } + + // 1, 9, 17, 25, 33, 41, 49, 57 + // 2, 10, 18, 26, 34, 42, 50, 58 + // 3, 11, 19, 27, 35, 43, 51, 59 + // 36, 44, 52, 60 + for (var i = 1; i <= 3; i++) { + for (var j = 0; j <= 24; j += 8) { + outR <<= 1; + outR |= (inR >> (j + i)) & 1; + } + for (var j = 0; j <= 24; j += 8) { + outR <<= 1; + outR |= (inL >> (j + i)) & 1; + } + } + for (var j = 0; j <= 24; j += 8) { + outR <<= 1; + outR |= (inL >> (j + i)) & 1; + } + + out[off + 0] = outL >>> 0; + out[off + 1] = outR >>> 0; +}; + +exports.r28shl = function r28shl(num, shift) { + return ((num << shift) & 0xfffffff) | (num >>> (28 - shift)); +}; + +var pc2table = [ + // inL => outL + 14, 11, 17, 4, 27, 23, 25, 0, + 13, 22, 7, 18, 5, 9, 16, 24, + 2, 20, 12, 21, 1, 8, 15, 26, + + // inR => outR + 15, 4, 25, 19, 9, 1, 26, 16, + 5, 11, 23, 8, 12, 7, 17, 0, + 22, 3, 10, 14, 6, 20, 27, 24 +]; + +exports.pc2 = function pc2(inL, inR, out, off) { + var outL = 0; + var outR = 0; + + var len = pc2table.length >>> 1; + for (var i = 0; i < len; i++) { + outL <<= 1; + outL |= (inL >>> pc2table[i]) & 0x1; + } + for (var i = len; i < pc2table.length; i++) { + outR <<= 1; + outR |= (inR >>> pc2table[i]) & 0x1; + } + + out[off + 0] = outL >>> 0; + out[off + 1] = outR >>> 0; +}; + +exports.expand = function expand(r, out, off) { + var outL = 0; + var outR = 0; + + outL = ((r & 1) << 5) | (r >>> 27); + for (var i = 23; i >= 15; i -= 4) { + outL <<= 6; + outL |= (r >>> i) & 0x3f; + } + for (var i = 11; i >= 3; i -= 4) { + outR |= (r >>> i) & 0x3f; + outR <<= 6; + } + outR |= ((r & 0x1f) << 1) | (r >>> 31); + + out[off + 0] = outL >>> 0; + out[off + 1] = outR >>> 0; +}; + +var sTable = [ + 14, 0, 4, 15, 13, 7, 1, 4, 2, 14, 15, 2, 11, 13, 8, 1, + 3, 10, 10, 6, 6, 12, 12, 11, 5, 9, 9, 5, 0, 3, 7, 8, + 4, 15, 1, 12, 14, 8, 8, 2, 13, 4, 6, 9, 2, 1, 11, 7, + 15, 5, 12, 11, 9, 3, 7, 14, 3, 10, 10, 0, 5, 6, 0, 13, + + 15, 3, 1, 13, 8, 4, 14, 7, 6, 15, 11, 2, 3, 8, 4, 14, + 9, 12, 7, 0, 2, 1, 13, 10, 12, 6, 0, 9, 5, 11, 10, 5, + 0, 13, 14, 8, 7, 10, 11, 1, 10, 3, 4, 15, 13, 4, 1, 2, + 5, 11, 8, 6, 12, 7, 6, 12, 9, 0, 3, 5, 2, 14, 15, 9, + + 10, 13, 0, 7, 9, 0, 14, 9, 6, 3, 3, 4, 15, 6, 5, 10, + 1, 2, 13, 8, 12, 5, 7, 14, 11, 12, 4, 11, 2, 15, 8, 1, + 13, 1, 6, 10, 4, 13, 9, 0, 8, 6, 15, 9, 3, 8, 0, 7, + 11, 4, 1, 15, 2, 14, 12, 3, 5, 11, 10, 5, 14, 2, 7, 12, + + 7, 13, 13, 8, 14, 11, 3, 5, 0, 6, 6, 15, 9, 0, 10, 3, + 1, 4, 2, 7, 8, 2, 5, 12, 11, 1, 12, 10, 4, 14, 15, 9, + 10, 3, 6, 15, 9, 0, 0, 6, 12, 10, 11, 1, 7, 13, 13, 8, + 15, 9, 1, 4, 3, 5, 14, 11, 5, 12, 2, 7, 8, 2, 4, 14, + + 2, 14, 12, 11, 4, 2, 1, 12, 7, 4, 10, 7, 11, 13, 6, 1, + 8, 5, 5, 0, 3, 15, 15, 10, 13, 3, 0, 9, 14, 8, 9, 6, + 4, 11, 2, 8, 1, 12, 11, 7, 10, 1, 13, 14, 7, 2, 8, 13, + 15, 6, 9, 15, 12, 0, 5, 9, 6, 10, 3, 4, 0, 5, 14, 3, + + 12, 10, 1, 15, 10, 4, 15, 2, 9, 7, 2, 12, 6, 9, 8, 5, + 0, 6, 13, 1, 3, 13, 4, 14, 14, 0, 7, 11, 5, 3, 11, 8, + 9, 4, 14, 3, 15, 2, 5, 12, 2, 9, 8, 5, 12, 15, 3, 10, + 7, 11, 0, 14, 4, 1, 10, 7, 1, 6, 13, 0, 11, 8, 6, 13, + + 4, 13, 11, 0, 2, 11, 14, 7, 15, 4, 0, 9, 8, 1, 13, 10, + 3, 14, 12, 3, 9, 5, 7, 12, 5, 2, 10, 15, 6, 8, 1, 6, + 1, 6, 4, 11, 11, 13, 13, 8, 12, 1, 3, 4, 7, 10, 14, 7, + 10, 9, 15, 5, 6, 0, 8, 15, 0, 14, 5, 2, 9, 3, 2, 12, + + 13, 1, 2, 15, 8, 13, 4, 8, 6, 10, 15, 3, 11, 7, 1, 4, + 10, 12, 9, 5, 3, 6, 14, 11, 5, 0, 0, 14, 12, 9, 7, 2, + 7, 2, 11, 1, 4, 14, 1, 7, 9, 4, 12, 10, 14, 8, 2, 13, + 0, 15, 6, 12, 10, 9, 13, 0, 15, 3, 3, 5, 5, 6, 8, 11 +]; + +exports.substitute = function substitute(inL, inR) { + var out = 0; + for (var i = 0; i < 4; i++) { + var b = (inL >>> (18 - i * 6)) & 0x3f; + var sb = sTable[i * 0x40 + b]; + + out <<= 4; + out |= sb; + } + for (var i = 0; i < 4; i++) { + var b = (inR >>> (18 - i * 6)) & 0x3f; + var sb = sTable[4 * 0x40 + i * 0x40 + b]; + + out <<= 4; + out |= sb; + } + return out >>> 0; +}; + +var permuteTable = [ + 16, 25, 12, 11, 3, 20, 4, 15, 31, 17, 9, 6, 27, 14, 1, 22, + 30, 24, 8, 18, 0, 5, 29, 23, 13, 19, 2, 26, 10, 21, 28, 7 +]; + +exports.permute = function permute(num) { + var out = 0; + for (var i = 0; i < permuteTable.length; i++) { + out <<= 1; + out |= (num >>> permuteTable[i]) & 0x1; + } + return out >>> 0; +}; + +exports.padSplit = function padSplit(num, size, group) { + var str = num.toString(2); + while (str.length < size) + str = '0' + str; + + var out = []; + for (var i = 0; i < size; i += group) + out.push(str.slice(i, i + group)); + return out.join(' '); +}; + + +}, +84119(__unused_webpack_module, exports, __webpack_require__) { +var generatePrime = __webpack_require__(94829) +var primes = __webpack_require__(54828) + +var DH = __webpack_require__(94235) + +function getDiffieHellman (mod) { + var prime = new Buffer(primes[mod].prime, 'hex') + var gen = new Buffer(primes[mod].gen, 'hex') + + return new DH(prime, gen) +} + +var ENCODINGS = { + 'binary': true, 'hex': true, 'base64': true +} + +function createDiffieHellman (prime, enc, generator, genc) { + if (Buffer.isBuffer(enc) || ENCODINGS[enc] === undefined) { + return createDiffieHellman(prime, 'binary', enc, generator) + } + + enc = enc || 'binary' + genc = genc || 'binary' + generator = generator || new Buffer([2]) + + if (!Buffer.isBuffer(generator)) { + generator = new Buffer(generator, genc) + } + + if (typeof prime === 'number') { + return new DH(generatePrime(prime, generator), generator, true) + } + + if (!Buffer.isBuffer(prime)) { + prime = new Buffer(prime, enc) + } + + return new DH(prime, generator, true) +} + +exports.DiffieHellmanGroup = exports.createDiffieHellmanGroup = exports.getDiffieHellman = getDiffieHellman +exports.createDiffieHellman = exports.DiffieHellman = createDiffieHellman + + +}, +94235(module, __unused_webpack_exports, __webpack_require__) { +var BN = __webpack_require__(91939); +var MillerRabin = __webpack_require__(31607); +var millerRabin = new MillerRabin(); +var TWENTYFOUR = new BN(24); +var ELEVEN = new BN(11); +var TEN = new BN(10); +var THREE = new BN(3); +var SEVEN = new BN(7); +var primes = __webpack_require__(94829); +var randomBytes = __webpack_require__(31734); +module.exports = DH; + +function setPublicKey(pub, enc) { + enc = enc || 'utf8'; + if (!Buffer.isBuffer(pub)) { + pub = new Buffer(pub, enc); + } + this._pub = new BN(pub); + return this; +} + +function setPrivateKey(priv, enc) { + enc = enc || 'utf8'; + if (!Buffer.isBuffer(priv)) { + priv = new Buffer(priv, enc); + } + this._priv = new BN(priv); + return this; +} + +var primeCache = {}; +function checkPrime(prime, generator) { + var gen = generator.toString('hex'); + var hex = [gen, prime.toString(16)].join('_'); + if (hex in primeCache) { + return primeCache[hex]; + } + var error = 0; + + if (prime.isEven() || + !primes.simpleSieve || + !primes.fermatTest(prime) || + !millerRabin.test(prime)) { + //not a prime so +1 + error += 1; + + if (gen === '02' || gen === '05') { + // we'd be able to check the generator + // it would fail so +8 + error += 8; + } else { + //we wouldn't be able to test the generator + // so +4 + error += 4; + } + primeCache[hex] = error; + return error; + } + if (!millerRabin.test(prime.shrn(1))) { + //not a safe prime + error += 2; + } + var rem; + switch (gen) { + case '02': + if (prime.mod(TWENTYFOUR).cmp(ELEVEN)) { + // unsuidable generator + error += 8; + } + break; + case '05': + rem = prime.mod(TEN); + if (rem.cmp(THREE) && rem.cmp(SEVEN)) { + // prime mod 10 needs to equal 3 or 7 + error += 8; + } + break; + default: + error += 4; + } + primeCache[hex] = error; + return error; +} + +function DH(prime, generator, malleable) { + this.setGenerator(generator); + this.__prime = new BN(prime); + this._prime = BN.mont(this.__prime); + this._primeLen = prime.length; + this._pub = undefined; + this._priv = undefined; + this._primeCode = undefined; + if (malleable) { + this.setPublicKey = setPublicKey; + this.setPrivateKey = setPrivateKey; + } else { + this._primeCode = 8; + } +} +Object.defineProperty(DH.prototype, 'verifyError', { + enumerable: true, + get: function () { + if (typeof this._primeCode !== 'number') { + this._primeCode = checkPrime(this.__prime, this.__gen); + } + return this._primeCode; + } +}); +DH.prototype.generateKeys = function () { + if (!this._priv) { + this._priv = new BN(randomBytes(this._primeLen)); + } + this._pub = this._gen.toRed(this._prime).redPow(this._priv).fromRed(); + return this.getPublicKey(); +}; + +DH.prototype.computeSecret = function (other) { + other = new BN(other); + other = other.toRed(this._prime); + var secret = other.redPow(this._priv).fromRed(); + var out = new Buffer(secret.toArray()); + var prime = this.getPrime(); + if (out.length < prime.length) { + var front = new Buffer(prime.length - out.length); + front.fill(0); + out = Buffer.concat([front, out]); + } + return out; +}; + +DH.prototype.getPublicKey = function getPublicKey(enc) { + return formatReturnValue(this._pub, enc); +}; + +DH.prototype.getPrivateKey = function getPrivateKey(enc) { + return formatReturnValue(this._priv, enc); +}; + +DH.prototype.getPrime = function (enc) { + return formatReturnValue(this.__prime, enc); +}; + +DH.prototype.getGenerator = function (enc) { + return formatReturnValue(this._gen, enc); +}; + +DH.prototype.setGenerator = function (gen, enc) { + enc = enc || 'utf8'; + if (!Buffer.isBuffer(gen)) { + gen = new Buffer(gen, enc); + } + this.__gen = gen; + this._gen = new BN(gen); + return this; +}; + +function formatReturnValue(bn, enc) { + var buf = new Buffer(bn.toArray()); + if (!enc) { + return buf; + } else { + return buf.toString(enc); + } +} + + +}, +94829(module, __unused_webpack_exports, __webpack_require__) { +var randomBytes = __webpack_require__(31734); +module.exports = findPrime; +findPrime.simpleSieve = simpleSieve; +findPrime.fermatTest = fermatTest; +var BN = __webpack_require__(91939); +var TWENTYFOUR = new BN(24); +var MillerRabin = __webpack_require__(31607); +var millerRabin = new MillerRabin(); +var ONE = new BN(1); +var TWO = new BN(2); +var FIVE = new BN(5); +var SIXTEEN = new BN(16); +var EIGHT = new BN(8); +var TEN = new BN(10); +var THREE = new BN(3); +var SEVEN = new BN(7); +var ELEVEN = new BN(11); +var FOUR = new BN(4); +var TWELVE = new BN(12); +var primes = null; + +function _getPrimes() { + if (primes !== null) + return primes; + + var limit = 0x100000; + var res = []; + res[0] = 2; + for (var i = 1, k = 3; k < limit; k += 2) { + var sqrt = Math.ceil(Math.sqrt(k)); + for (var j = 0; j < i && res[j] <= sqrt; j++) + if (k % res[j] === 0) + break; + + if (i !== j && res[j] <= sqrt) + continue; + + res[i++] = k; + } + primes = res; + return res; +} + +function simpleSieve(p) { + var primes = _getPrimes(); + + for (var i = 0; i < primes.length; i++) + if (p.modn(primes[i]) === 0) { + if (p.cmpn(primes[i]) === 0) { + return true; + } else { + return false; + } + } + + return true; +} + +function fermatTest(p) { + var red = BN.mont(p); + return TWO.toRed(red).redPow(p.subn(1)).fromRed().cmpn(1) === 0; +} + +function findPrime(bits, gen) { + if (bits < 16) { + // this is what openssl does + if (gen === 2 || gen === 5) { + return new BN([0x8c, 0x7b]); + } else { + return new BN([0x8c, 0x27]); + } + } + gen = new BN(gen); + + var num, n2; + + while (true) { + num = new BN(randomBytes(Math.ceil(bits / 8))); + while (num.bitLength() > bits) { + num.ishrn(1); + } + if (num.isEven()) { + num.iadd(ONE); + } + if (!num.testn(1)) { + num.iadd(TWO); + } + if (!gen.cmp(TWO)) { + while (num.mod(TWENTYFOUR).cmp(ELEVEN)) { + num.iadd(FOUR); + } + } else if (!gen.cmp(FIVE)) { + while (num.mod(TEN).cmp(THREE)) { + num.iadd(FOUR); + } + } + n2 = num.shrn(1); + if (simpleSieve(n2) && simpleSieve(num) && + fermatTest(n2) && fermatTest(num) && + millerRabin.test(n2) && millerRabin.test(num)) { + return num; + } + } + +} + + +}, +92090(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; + + +var elliptic = exports; + +elliptic.version = (__webpack_require__(13453)/* .version */.rE); +elliptic.utils = __webpack_require__(67156); +elliptic.rand = __webpack_require__(93705); +elliptic.curve = __webpack_require__(32765); +elliptic.curves = __webpack_require__(88261); + +// Protocols +elliptic.ec = __webpack_require__(97646); +elliptic.eddsa = __webpack_require__(73241); + + +}, +68024(module, __unused_webpack_exports, __webpack_require__) { +"use strict"; + + +var BN = __webpack_require__(91939); +var utils = __webpack_require__(67156); +var getNAF = utils.getNAF; +var getJSF = utils.getJSF; +var assert = utils.assert; + +function BaseCurve(type, conf) { + this.type = type; + this.p = new BN(conf.p, 16); + + // Use Montgomery, when there is no fast reduction for the prime + this.red = conf.prime ? BN.red(conf.prime) : BN.mont(this.p); + + // Useful for many curves + this.zero = new BN(0).toRed(this.red); + this.one = new BN(1).toRed(this.red); + this.two = new BN(2).toRed(this.red); + + // Curve configuration, optional + this.n = conf.n && new BN(conf.n, 16); + this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed); + + // Temporary arrays + this._wnafT1 = new Array(4); + this._wnafT2 = new Array(4); + this._wnafT3 = new Array(4); + this._wnafT4 = new Array(4); + + this._bitLength = this.n ? this.n.bitLength() : 0; + + // Generalized Greg Maxwell's trick + var adjustCount = this.n && this.p.div(this.n); + if (!adjustCount || adjustCount.cmpn(100) > 0) { + this.redN = null; + } else { + this._maxwellTrick = true; + this.redN = this.n.toRed(this.red); + } +} +module.exports = BaseCurve; + +BaseCurve.prototype.point = function point() { + throw new Error('Not implemented'); +}; + +BaseCurve.prototype.validate = function validate() { + throw new Error('Not implemented'); +}; + +BaseCurve.prototype._fixedNafMul = function _fixedNafMul(p, k) { + assert(p.precomputed); + var doubles = p._getDoubles(); + + var naf = getNAF(k, 1, this._bitLength); + var I = (1 << (doubles.step + 1)) - (doubles.step % 2 === 0 ? 2 : 1); + I /= 3; + + // Translate into more windowed form + var repr = []; + var j; + var nafW; + for (j = 0; j < naf.length; j += doubles.step) { + nafW = 0; + for (var l = j + doubles.step - 1; l >= j; l--) + nafW = (nafW << 1) + naf[l]; + repr.push(nafW); + } + + var a = this.jpoint(null, null, null); + var b = this.jpoint(null, null, null); + for (var i = I; i > 0; i--) { + for (j = 0; j < repr.length; j++) { + nafW = repr[j]; + if (nafW === i) + b = b.mixedAdd(doubles.points[j]); + else if (nafW === -i) + b = b.mixedAdd(doubles.points[j].neg()); + } + a = a.add(b); + } + return a.toP(); +}; + +BaseCurve.prototype._wnafMul = function _wnafMul(p, k) { + var w = 4; + + // Precompute window + var nafPoints = p._getNAFPoints(w); + w = nafPoints.wnd; + var wnd = nafPoints.points; + + // Get NAF form + var naf = getNAF(k, w, this._bitLength); + + // Add `this`*(N+1) for every w-NAF index + var acc = this.jpoint(null, null, null); + for (var i = naf.length - 1; i >= 0; i--) { + // Count zeroes + for (var l = 0; i >= 0 && naf[i] === 0; i--) + l++; + if (i >= 0) + l++; + acc = acc.dblp(l); + + if (i < 0) + break; + var z = naf[i]; + assert(z !== 0); + if (p.type === 'affine') { + // J +- P + if (z > 0) + acc = acc.mixedAdd(wnd[(z - 1) >> 1]); + else + acc = acc.mixedAdd(wnd[(-z - 1) >> 1].neg()); + } else { + // J +- J + if (z > 0) + acc = acc.add(wnd[(z - 1) >> 1]); + else + acc = acc.add(wnd[(-z - 1) >> 1].neg()); + } + } + return p.type === 'affine' ? acc.toP() : acc; +}; + +BaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW, + points, + coeffs, + len, + jacobianResult) { + var wndWidth = this._wnafT1; + var wnd = this._wnafT2; + var naf = this._wnafT3; + + // Fill all arrays + var max = 0; + var i; + var j; + var p; + for (i = 0; i < len; i++) { + p = points[i]; + var nafPoints = p._getNAFPoints(defW); + wndWidth[i] = nafPoints.wnd; + wnd[i] = nafPoints.points; + } + + // Comb small window NAFs + for (i = len - 1; i >= 1; i -= 2) { + var a = i - 1; + var b = i; + if (wndWidth[a] !== 1 || wndWidth[b] !== 1) { + naf[a] = getNAF(coeffs[a], wndWidth[a], this._bitLength); + naf[b] = getNAF(coeffs[b], wndWidth[b], this._bitLength); + max = Math.max(naf[a].length, max); + max = Math.max(naf[b].length, max); + continue; + } + + var comb = [ + points[a], /* 1 */ + null, /* 3 */ + null, /* 5 */ + points[b], /* 7 */ + ]; + + // Try to avoid Projective points, if possible + if (points[a].y.cmp(points[b].y) === 0) { + comb[1] = points[a].add(points[b]); + comb[2] = points[a].toJ().mixedAdd(points[b].neg()); + } else if (points[a].y.cmp(points[b].y.redNeg()) === 0) { + comb[1] = points[a].toJ().mixedAdd(points[b]); + comb[2] = points[a].add(points[b].neg()); + } else { + comb[1] = points[a].toJ().mixedAdd(points[b]); + comb[2] = points[a].toJ().mixedAdd(points[b].neg()); + } + + var index = [ + -3, /* -1 -1 */ + -1, /* -1 0 */ + -5, /* -1 1 */ + -7, /* 0 -1 */ + 0, /* 0 0 */ + 7, /* 0 1 */ + 5, /* 1 -1 */ + 1, /* 1 0 */ + 3, /* 1 1 */ + ]; + + var jsf = getJSF(coeffs[a], coeffs[b]); + max = Math.max(jsf[0].length, max); + naf[a] = new Array(max); + naf[b] = new Array(max); + for (j = 0; j < max; j++) { + var ja = jsf[0][j] | 0; + var jb = jsf[1][j] | 0; + + naf[a][j] = index[(ja + 1) * 3 + (jb + 1)]; + naf[b][j] = 0; + wnd[a] = comb; + } + } + + var acc = this.jpoint(null, null, null); + var tmp = this._wnafT4; + for (i = max; i >= 0; i--) { + var k = 0; + + while (i >= 0) { + var zero = true; + for (j = 0; j < len; j++) { + tmp[j] = naf[j][i] | 0; + if (tmp[j] !== 0) + zero = false; + } + if (!zero) + break; + k++; + i--; + } + if (i >= 0) + k++; + acc = acc.dblp(k); + if (i < 0) + break; + + for (j = 0; j < len; j++) { + var z = tmp[j]; + p; + if (z === 0) + continue; + else if (z > 0) + p = wnd[j][(z - 1) >> 1]; + else if (z < 0) + p = wnd[j][(-z - 1) >> 1].neg(); + + if (p.type === 'affine') + acc = acc.mixedAdd(p); + else + acc = acc.add(p); + } + } + // Zeroify references + for (i = 0; i < len; i++) + wnd[i] = null; + + if (jacobianResult) + return acc; + else + return acc.toP(); +}; + +function BasePoint(curve, type) { + this.curve = curve; + this.type = type; + this.precomputed = null; +} +BaseCurve.BasePoint = BasePoint; + +BasePoint.prototype.eq = function eq(/*other*/) { + throw new Error('Not implemented'); +}; + +BasePoint.prototype.validate = function validate() { + return this.curve.validate(this); +}; + +BaseCurve.prototype.decodePoint = function decodePoint(bytes, enc) { + bytes = utils.toArray(bytes, enc); + + var len = this.p.byteLength(); + + // uncompressed, hybrid-odd, hybrid-even + if ((bytes[0] === 0x04 || bytes[0] === 0x06 || bytes[0] === 0x07) && + bytes.length - 1 === 2 * len) { + if (bytes[0] === 0x06) + assert(bytes[bytes.length - 1] % 2 === 0); + else if (bytes[0] === 0x07) + assert(bytes[bytes.length - 1] % 2 === 1); + + var res = this.point(bytes.slice(1, 1 + len), + bytes.slice(1 + len, 1 + 2 * len)); + + return res; + } else if ((bytes[0] === 0x02 || bytes[0] === 0x03) && + bytes.length - 1 === len) { + return this.pointFromX(bytes.slice(1, 1 + len), bytes[0] === 0x03); + } + throw new Error('Unknown point format'); +}; + +BasePoint.prototype.encodeCompressed = function encodeCompressed(enc) { + return this.encode(enc, true); +}; + +BasePoint.prototype._encode = function _encode(compact) { + var len = this.curve.p.byteLength(); + var x = this.getX().toArray('be', len); + + if (compact) + return [ this.getY().isEven() ? 0x02 : 0x03 ].concat(x); + + return [ 0x04 ].concat(x, this.getY().toArray('be', len)); +}; + +BasePoint.prototype.encode = function encode(enc, compact) { + return utils.encode(this._encode(compact), enc); +}; + +BasePoint.prototype.precompute = function precompute(power) { + if (this.precomputed) + return this; + + var precomputed = { + doubles: null, + naf: null, + beta: null, + }; + precomputed.naf = this._getNAFPoints(8); + precomputed.doubles = this._getDoubles(4, power); + precomputed.beta = this._getBeta(); + this.precomputed = precomputed; + + return this; +}; + +BasePoint.prototype._hasDoubles = function _hasDoubles(k) { + if (!this.precomputed) + return false; + + var doubles = this.precomputed.doubles; + if (!doubles) + return false; + + return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step); +}; + +BasePoint.prototype._getDoubles = function _getDoubles(step, power) { + if (this.precomputed && this.precomputed.doubles) + return this.precomputed.doubles; + + var doubles = [ this ]; + var acc = this; + for (var i = 0; i < power; i += step) { + for (var j = 0; j < step; j++) + acc = acc.dbl(); + doubles.push(acc); + } + return { + step: step, + points: doubles, + }; +}; + +BasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) { + if (this.precomputed && this.precomputed.naf) + return this.precomputed.naf; + + var res = [ this ]; + var max = (1 << wnd) - 1; + var dbl = max === 1 ? null : this.dbl(); + for (var i = 1; i < max; i++) + res[i] = res[i - 1].add(dbl); + return { + wnd: wnd, + points: res, + }; +}; + +BasePoint.prototype._getBeta = function _getBeta() { + return null; +}; + +BasePoint.prototype.dblp = function dblp(k) { + var r = this; + for (var i = 0; i < k; i++) + r = r.dbl(); + return r; +}; + + +}, +41309(module, __unused_webpack_exports, __webpack_require__) { +"use strict"; + + +var utils = __webpack_require__(67156); +var BN = __webpack_require__(91939); +var inherits = __webpack_require__(86040); +var Base = __webpack_require__(68024); + +var assert = utils.assert; + +function EdwardsCurve(conf) { + // NOTE: Important as we are creating point in Base.call() + this.twisted = (conf.a | 0) !== 1; + this.mOneA = this.twisted && (conf.a | 0) === -1; + this.extended = this.mOneA; + + Base.call(this, 'edwards', conf); + + this.a = new BN(conf.a, 16).umod(this.red.m); + this.a = this.a.toRed(this.red); + this.c = new BN(conf.c, 16).toRed(this.red); + this.c2 = this.c.redSqr(); + this.d = new BN(conf.d, 16).toRed(this.red); + this.dd = this.d.redAdd(this.d); + + assert(!this.twisted || this.c.fromRed().cmpn(1) === 0); + this.oneC = (conf.c | 0) === 1; +} +inherits(EdwardsCurve, Base); +module.exports = EdwardsCurve; + +EdwardsCurve.prototype._mulA = function _mulA(num) { + if (this.mOneA) + return num.redNeg(); + else + return this.a.redMul(num); +}; + +EdwardsCurve.prototype._mulC = function _mulC(num) { + if (this.oneC) + return num; + else + return this.c.redMul(num); +}; + +// Just for compatibility with Short curve +EdwardsCurve.prototype.jpoint = function jpoint(x, y, z, t) { + return this.point(x, y, z, t); +}; + +EdwardsCurve.prototype.pointFromX = function pointFromX(x, odd) { + x = new BN(x, 16); + if (!x.red) + x = x.toRed(this.red); + + var x2 = x.redSqr(); + var rhs = this.c2.redSub(this.a.redMul(x2)); + var lhs = this.one.redSub(this.c2.redMul(this.d).redMul(x2)); + + var y2 = rhs.redMul(lhs.redInvm()); + var y = y2.redSqrt(); + if (y.redSqr().redSub(y2).cmp(this.zero) !== 0) + throw new Error('invalid point'); + + var isOdd = y.fromRed().isOdd(); + if (odd && !isOdd || !odd && isOdd) + y = y.redNeg(); + + return this.point(x, y); +}; + +EdwardsCurve.prototype.pointFromY = function pointFromY(y, odd) { + y = new BN(y, 16); + if (!y.red) + y = y.toRed(this.red); + + // x^2 = (y^2 - c^2) / (c^2 d y^2 - a) + var y2 = y.redSqr(); + var lhs = y2.redSub(this.c2); + var rhs = y2.redMul(this.d).redMul(this.c2).redSub(this.a); + var x2 = lhs.redMul(rhs.redInvm()); + + if (x2.cmp(this.zero) === 0) { + if (odd) + throw new Error('invalid point'); + else + return this.point(this.zero, y); + } + + var x = x2.redSqrt(); + if (x.redSqr().redSub(x2).cmp(this.zero) !== 0) + throw new Error('invalid point'); + + if (x.fromRed().isOdd() !== odd) + x = x.redNeg(); + + return this.point(x, y); +}; + +EdwardsCurve.prototype.validate = function validate(point) { + if (point.isInfinity()) + return true; + + // Curve: A * X^2 + Y^2 = C^2 * (1 + D * X^2 * Y^2) + point.normalize(); + + var x2 = point.x.redSqr(); + var y2 = point.y.redSqr(); + var lhs = x2.redMul(this.a).redAdd(y2); + var rhs = this.c2.redMul(this.one.redAdd(this.d.redMul(x2).redMul(y2))); + + return lhs.cmp(rhs) === 0; +}; + +function Point(curve, x, y, z, t) { + Base.BasePoint.call(this, curve, 'projective'); + if (x === null && y === null && z === null) { + this.x = this.curve.zero; + this.y = this.curve.one; + this.z = this.curve.one; + this.t = this.curve.zero; + this.zOne = true; + } else { + this.x = new BN(x, 16); + this.y = new BN(y, 16); + this.z = z ? new BN(z, 16) : this.curve.one; + this.t = t && new BN(t, 16); + if (!this.x.red) + this.x = this.x.toRed(this.curve.red); + if (!this.y.red) + this.y = this.y.toRed(this.curve.red); + if (!this.z.red) + this.z = this.z.toRed(this.curve.red); + if (this.t && !this.t.red) + this.t = this.t.toRed(this.curve.red); + this.zOne = this.z === this.curve.one; + + // Use extended coordinates + if (this.curve.extended && !this.t) { + this.t = this.x.redMul(this.y); + if (!this.zOne) + this.t = this.t.redMul(this.z.redInvm()); + } + } +} +inherits(Point, Base.BasePoint); + +EdwardsCurve.prototype.pointFromJSON = function pointFromJSON(obj) { + return Point.fromJSON(this, obj); +}; + +EdwardsCurve.prototype.point = function point(x, y, z, t) { + return new Point(this, x, y, z, t); +}; + +Point.fromJSON = function fromJSON(curve, obj) { + return new Point(curve, obj[0], obj[1], obj[2]); +}; + +Point.prototype.inspect = function inspect() { + if (this.isInfinity()) + return ''; + return ''; +}; + +Point.prototype.isInfinity = function isInfinity() { + // XXX This code assumes that zero is always zero in red + return this.x.cmpn(0) === 0 && + (this.y.cmp(this.z) === 0 || + (this.zOne && this.y.cmp(this.curve.c) === 0)); +}; + +Point.prototype._extDbl = function _extDbl() { + // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html + // #doubling-dbl-2008-hwcd + // 4M + 4S + + // A = X1^2 + var a = this.x.redSqr(); + // B = Y1^2 + var b = this.y.redSqr(); + // C = 2 * Z1^2 + var c = this.z.redSqr(); + c = c.redIAdd(c); + // D = a * A + var d = this.curve._mulA(a); + // E = (X1 + Y1)^2 - A - B + var e = this.x.redAdd(this.y).redSqr().redISub(a).redISub(b); + // G = D + B + var g = d.redAdd(b); + // F = G - C + var f = g.redSub(c); + // H = D - B + var h = d.redSub(b); + // X3 = E * F + var nx = e.redMul(f); + // Y3 = G * H + var ny = g.redMul(h); + // T3 = E * H + var nt = e.redMul(h); + // Z3 = F * G + var nz = f.redMul(g); + return this.curve.point(nx, ny, nz, nt); +}; + +Point.prototype._projDbl = function _projDbl() { + // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html + // #doubling-dbl-2008-bbjlp + // #doubling-dbl-2007-bl + // and others + // Generally 3M + 4S or 2M + 4S + + // B = (X1 + Y1)^2 + var b = this.x.redAdd(this.y).redSqr(); + // C = X1^2 + var c = this.x.redSqr(); + // D = Y1^2 + var d = this.y.redSqr(); + + var nx; + var ny; + var nz; + var e; + var h; + var j; + if (this.curve.twisted) { + // E = a * C + e = this.curve._mulA(c); + // F = E + D + var f = e.redAdd(d); + if (this.zOne) { + // X3 = (B - C - D) * (F - 2) + nx = b.redSub(c).redSub(d).redMul(f.redSub(this.curve.two)); + // Y3 = F * (E - D) + ny = f.redMul(e.redSub(d)); + // Z3 = F^2 - 2 * F + nz = f.redSqr().redSub(f).redSub(f); + } else { + // H = Z1^2 + h = this.z.redSqr(); + // J = F - 2 * H + j = f.redSub(h).redISub(h); + // X3 = (B-C-D)*J + nx = b.redSub(c).redISub(d).redMul(j); + // Y3 = F * (E - D) + ny = f.redMul(e.redSub(d)); + // Z3 = F * J + nz = f.redMul(j); + } + } else { + // E = C + D + e = c.redAdd(d); + // H = (c * Z1)^2 + h = this.curve._mulC(this.z).redSqr(); + // J = E - 2 * H + j = e.redSub(h).redSub(h); + // X3 = c * (B - E) * J + nx = this.curve._mulC(b.redISub(e)).redMul(j); + // Y3 = c * E * (C - D) + ny = this.curve._mulC(e).redMul(c.redISub(d)); + // Z3 = E * J + nz = e.redMul(j); + } + return this.curve.point(nx, ny, nz); +}; + +Point.prototype.dbl = function dbl() { + if (this.isInfinity()) + return this; + + // Double in extended coordinates + if (this.curve.extended) + return this._extDbl(); + else + return this._projDbl(); +}; + +Point.prototype._extAdd = function _extAdd(p) { + // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html + // #addition-add-2008-hwcd-3 + // 8M + + // A = (Y1 - X1) * (Y2 - X2) + var a = this.y.redSub(this.x).redMul(p.y.redSub(p.x)); + // B = (Y1 + X1) * (Y2 + X2) + var b = this.y.redAdd(this.x).redMul(p.y.redAdd(p.x)); + // C = T1 * k * T2 + var c = this.t.redMul(this.curve.dd).redMul(p.t); + // D = Z1 * 2 * Z2 + var d = this.z.redMul(p.z.redAdd(p.z)); + // E = B - A + var e = b.redSub(a); + // F = D - C + var f = d.redSub(c); + // G = D + C + var g = d.redAdd(c); + // H = B + A + var h = b.redAdd(a); + // X3 = E * F + var nx = e.redMul(f); + // Y3 = G * H + var ny = g.redMul(h); + // T3 = E * H + var nt = e.redMul(h); + // Z3 = F * G + var nz = f.redMul(g); + return this.curve.point(nx, ny, nz, nt); +}; + +Point.prototype._projAdd = function _projAdd(p) { + // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html + // #addition-add-2008-bbjlp + // #addition-add-2007-bl + // 10M + 1S + + // A = Z1 * Z2 + var a = this.z.redMul(p.z); + // B = A^2 + var b = a.redSqr(); + // C = X1 * X2 + var c = this.x.redMul(p.x); + // D = Y1 * Y2 + var d = this.y.redMul(p.y); + // E = d * C * D + var e = this.curve.d.redMul(c).redMul(d); + // F = B - E + var f = b.redSub(e); + // G = B + E + var g = b.redAdd(e); + // X3 = A * F * ((X1 + Y1) * (X2 + Y2) - C - D) + var tmp = this.x.redAdd(this.y).redMul(p.x.redAdd(p.y)).redISub(c).redISub(d); + var nx = a.redMul(f).redMul(tmp); + var ny; + var nz; + if (this.curve.twisted) { + // Y3 = A * G * (D - a * C) + ny = a.redMul(g).redMul(d.redSub(this.curve._mulA(c))); + // Z3 = F * G + nz = f.redMul(g); + } else { + // Y3 = A * G * (D - C) + ny = a.redMul(g).redMul(d.redSub(c)); + // Z3 = c * F * G + nz = this.curve._mulC(f).redMul(g); + } + return this.curve.point(nx, ny, nz); +}; + +Point.prototype.add = function add(p) { + if (this.isInfinity()) + return p; + if (p.isInfinity()) + return this; + + if (this.curve.extended) + return this._extAdd(p); + else + return this._projAdd(p); +}; + +Point.prototype.mul = function mul(k) { + if (this._hasDoubles(k)) + return this.curve._fixedNafMul(this, k); + else + return this.curve._wnafMul(this, k); +}; + +Point.prototype.mulAdd = function mulAdd(k1, p, k2) { + return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, false); +}; + +Point.prototype.jmulAdd = function jmulAdd(k1, p, k2) { + return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, true); +}; + +Point.prototype.normalize = function normalize() { + if (this.zOne) + return this; + + // Normalize coordinates + var zi = this.z.redInvm(); + this.x = this.x.redMul(zi); + this.y = this.y.redMul(zi); + if (this.t) + this.t = this.t.redMul(zi); + this.z = this.curve.one; + this.zOne = true; + return this; +}; + +Point.prototype.neg = function neg() { + return this.curve.point(this.x.redNeg(), + this.y, + this.z, + this.t && this.t.redNeg()); +}; + +Point.prototype.getX = function getX() { + this.normalize(); + return this.x.fromRed(); +}; + +Point.prototype.getY = function getY() { + this.normalize(); + return this.y.fromRed(); +}; + +Point.prototype.eq = function eq(other) { + return this === other || + this.getX().cmp(other.getX()) === 0 && + this.getY().cmp(other.getY()) === 0; +}; + +Point.prototype.eqXToP = function eqXToP(x) { + var rx = x.toRed(this.curve.red).redMul(this.z); + if (this.x.cmp(rx) === 0) + return true; + + var xc = x.clone(); + var t = this.curve.redN.redMul(this.z); + for (;;) { + xc.iadd(this.curve.n); + if (xc.cmp(this.curve.p) >= 0) + return false; + + rx.redIAdd(t); + if (this.x.cmp(rx) === 0) + return true; + } +}; + +// Compatibility with BaseCurve +Point.prototype.toP = Point.prototype.normalize; +Point.prototype.mixedAdd = Point.prototype.add; + + +}, +32765(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; + + +var curve = exports; + +curve.base = __webpack_require__(68024); +curve.short = __webpack_require__(51751); +curve.mont = __webpack_require__(49271); +curve.edwards = __webpack_require__(41309); + + +}, +49271(module, __unused_webpack_exports, __webpack_require__) { +"use strict"; + + +var BN = __webpack_require__(91939); +var inherits = __webpack_require__(86040); +var Base = __webpack_require__(68024); + +var utils = __webpack_require__(67156); + +function MontCurve(conf) { + Base.call(this, 'mont', conf); + + this.a = new BN(conf.a, 16).toRed(this.red); + this.b = new BN(conf.b, 16).toRed(this.red); + this.i4 = new BN(4).toRed(this.red).redInvm(); + this.two = new BN(2).toRed(this.red); + this.a24 = this.i4.redMul(this.a.redAdd(this.two)); +} +inherits(MontCurve, Base); +module.exports = MontCurve; + +MontCurve.prototype.validate = function validate(point) { + var x = point.normalize().x; + var x2 = x.redSqr(); + var rhs = x2.redMul(x).redAdd(x2.redMul(this.a)).redAdd(x); + var y = rhs.redSqrt(); + + return y.redSqr().cmp(rhs) === 0; +}; + +function Point(curve, x, z) { + Base.BasePoint.call(this, curve, 'projective'); + if (x === null && z === null) { + this.x = this.curve.one; + this.z = this.curve.zero; + } else { + this.x = new BN(x, 16); + this.z = new BN(z, 16); + if (!this.x.red) + this.x = this.x.toRed(this.curve.red); + if (!this.z.red) + this.z = this.z.toRed(this.curve.red); + } +} +inherits(Point, Base.BasePoint); + +MontCurve.prototype.decodePoint = function decodePoint(bytes, enc) { + return this.point(utils.toArray(bytes, enc), 1); +}; + +MontCurve.prototype.point = function point(x, z) { + return new Point(this, x, z); +}; + +MontCurve.prototype.pointFromJSON = function pointFromJSON(obj) { + return Point.fromJSON(this, obj); +}; + +Point.prototype.precompute = function precompute() { + // No-op +}; + +Point.prototype._encode = function _encode() { + return this.getX().toArray('be', this.curve.p.byteLength()); +}; + +Point.fromJSON = function fromJSON(curve, obj) { + return new Point(curve, obj[0], obj[1] || curve.one); +}; + +Point.prototype.inspect = function inspect() { + if (this.isInfinity()) + return ''; + return ''; +}; + +Point.prototype.isInfinity = function isInfinity() { + // XXX This code assumes that zero is always zero in red + return this.z.cmpn(0) === 0; +}; + +Point.prototype.dbl = function dbl() { + // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#doubling-dbl-1987-m-3 + // 2M + 2S + 4A + + // A = X1 + Z1 + var a = this.x.redAdd(this.z); + // AA = A^2 + var aa = a.redSqr(); + // B = X1 - Z1 + var b = this.x.redSub(this.z); + // BB = B^2 + var bb = b.redSqr(); + // C = AA - BB + var c = aa.redSub(bb); + // X3 = AA * BB + var nx = aa.redMul(bb); + // Z3 = C * (BB + A24 * C) + var nz = c.redMul(bb.redAdd(this.curve.a24.redMul(c))); + return this.curve.point(nx, nz); +}; + +Point.prototype.add = function add() { + throw new Error('Not supported on Montgomery curve'); +}; + +Point.prototype.diffAdd = function diffAdd(p, diff) { + // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#diffadd-dadd-1987-m-3 + // 4M + 2S + 6A + + // A = X2 + Z2 + var a = this.x.redAdd(this.z); + // B = X2 - Z2 + var b = this.x.redSub(this.z); + // C = X3 + Z3 + var c = p.x.redAdd(p.z); + // D = X3 - Z3 + var d = p.x.redSub(p.z); + // DA = D * A + var da = d.redMul(a); + // CB = C * B + var cb = c.redMul(b); + // X5 = Z1 * (DA + CB)^2 + var nx = diff.z.redMul(da.redAdd(cb).redSqr()); + // Z5 = X1 * (DA - CB)^2 + var nz = diff.x.redMul(da.redISub(cb).redSqr()); + return this.curve.point(nx, nz); +}; + +Point.prototype.mul = function mul(k) { + var t = k.clone(); + var a = this; // (N / 2) * Q + Q + var b = this.curve.point(null, null); // (N / 2) * Q + var c = this; // Q + + for (var bits = []; t.cmpn(0) !== 0; t.iushrn(1)) + bits.push(t.andln(1)); + + for (var i = bits.length - 1; i >= 0; i--) { + if (bits[i] === 0) { + // N * Q + Q = ((N / 2) * Q + Q)) + (N / 2) * Q + a = a.diffAdd(b, c); + // N * Q = 2 * ((N / 2) * Q + Q)) + b = b.dbl(); + } else { + // N * Q = ((N / 2) * Q + Q) + ((N / 2) * Q) + b = a.diffAdd(b, c); + // N * Q + Q = 2 * ((N / 2) * Q + Q) + a = a.dbl(); + } + } + return b; +}; + +Point.prototype.mulAdd = function mulAdd() { + throw new Error('Not supported on Montgomery curve'); +}; + +Point.prototype.jumlAdd = function jumlAdd() { + throw new Error('Not supported on Montgomery curve'); +}; + +Point.prototype.eq = function eq(other) { + return this.getX().cmp(other.getX()) === 0; +}; + +Point.prototype.normalize = function normalize() { + this.x = this.x.redMul(this.z.redInvm()); + this.z = this.curve.one; + return this; +}; + +Point.prototype.getX = function getX() { + // Normalize coordinates + this.normalize(); + + return this.x.fromRed(); +}; + + +}, +51751(module, __unused_webpack_exports, __webpack_require__) { +"use strict"; + + +var utils = __webpack_require__(67156); +var BN = __webpack_require__(91939); +var inherits = __webpack_require__(86040); +var Base = __webpack_require__(68024); + +var assert = utils.assert; + +function ShortCurve(conf) { + Base.call(this, 'short', conf); + + this.a = new BN(conf.a, 16).toRed(this.red); + this.b = new BN(conf.b, 16).toRed(this.red); + this.tinv = this.two.redInvm(); + + this.zeroA = this.a.fromRed().cmpn(0) === 0; + this.threeA = this.a.fromRed().sub(this.p).cmpn(-3) === 0; + + // If the curve is endomorphic, precalculate beta and lambda + this.endo = this._getEndomorphism(conf); + this._endoWnafT1 = new Array(4); + this._endoWnafT2 = new Array(4); +} +inherits(ShortCurve, Base); +module.exports = ShortCurve; + +ShortCurve.prototype._getEndomorphism = function _getEndomorphism(conf) { + // No efficient endomorphism + if (!this.zeroA || !this.g || !this.n || this.p.modn(3) !== 1) + return; + + // Compute beta and lambda, that lambda * P = (beta * Px; Py) + var beta; + var lambda; + if (conf.beta) { + beta = new BN(conf.beta, 16).toRed(this.red); + } else { + var betas = this._getEndoRoots(this.p); + // Choose the smallest beta + beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1]; + beta = beta.toRed(this.red); + } + if (conf.lambda) { + lambda = new BN(conf.lambda, 16); + } else { + // Choose the lambda that is matching selected beta + var lambdas = this._getEndoRoots(this.n); + if (this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta)) === 0) { + lambda = lambdas[0]; + } else { + lambda = lambdas[1]; + assert(this.g.mul(lambda).x.cmp(this.g.x.redMul(beta)) === 0); + } + } + + // Get basis vectors, used for balanced length-two representation + var basis; + if (conf.basis) { + basis = conf.basis.map(function(vec) { + return { + a: new BN(vec.a, 16), + b: new BN(vec.b, 16), + }; + }); + } else { + basis = this._getEndoBasis(lambda); + } + + return { + beta: beta, + lambda: lambda, + basis: basis, + }; +}; + +ShortCurve.prototype._getEndoRoots = function _getEndoRoots(num) { + // Find roots of for x^2 + x + 1 in F + // Root = (-1 +- Sqrt(-3)) / 2 + // + var red = num === this.p ? this.red : BN.mont(num); + var tinv = new BN(2).toRed(red).redInvm(); + var ntinv = tinv.redNeg(); + + var s = new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv); + + var l1 = ntinv.redAdd(s).fromRed(); + var l2 = ntinv.redSub(s).fromRed(); + return [ l1, l2 ]; +}; + +ShortCurve.prototype._getEndoBasis = function _getEndoBasis(lambda) { + // aprxSqrt >= sqrt(this.n) + var aprxSqrt = this.n.ushrn(Math.floor(this.n.bitLength() / 2)); + + // 3.74 + // Run EGCD, until r(L + 1) < aprxSqrt + var u = lambda; + var v = this.n.clone(); + var x1 = new BN(1); + var y1 = new BN(0); + var x2 = new BN(0); + var y2 = new BN(1); + + // NOTE: all vectors are roots of: a + b * lambda = 0 (mod n) + var a0; + var b0; + // First vector + var a1; + var b1; + // Second vector + var a2; + var b2; + + var prevR; + var i = 0; + var r; + var x; + while (u.cmpn(0) !== 0) { + var q = v.div(u); + r = v.sub(q.mul(u)); + x = x2.sub(q.mul(x1)); + var y = y2.sub(q.mul(y1)); + + if (!a1 && r.cmp(aprxSqrt) < 0) { + a0 = prevR.neg(); + b0 = x1; + a1 = r.neg(); + b1 = x; + } else if (a1 && ++i === 2) { + break; + } + prevR = r; + + v = u; + u = r; + x2 = x1; + x1 = x; + y2 = y1; + y1 = y; + } + a2 = r.neg(); + b2 = x; + + var len1 = a1.sqr().add(b1.sqr()); + var len2 = a2.sqr().add(b2.sqr()); + if (len2.cmp(len1) >= 0) { + a2 = a0; + b2 = b0; + } + + // Normalize signs + if (a1.negative) { + a1 = a1.neg(); + b1 = b1.neg(); + } + if (a2.negative) { + a2 = a2.neg(); + b2 = b2.neg(); + } + + return [ + { a: a1, b: b1 }, + { a: a2, b: b2 }, + ]; +}; + +ShortCurve.prototype._endoSplit = function _endoSplit(k) { + var basis = this.endo.basis; + var v1 = basis[0]; + var v2 = basis[1]; + + var c1 = v2.b.mul(k).divRound(this.n); + var c2 = v1.b.neg().mul(k).divRound(this.n); + + var p1 = c1.mul(v1.a); + var p2 = c2.mul(v2.a); + var q1 = c1.mul(v1.b); + var q2 = c2.mul(v2.b); + + // Calculate answer + var k1 = k.sub(p1).sub(p2); + var k2 = q1.add(q2).neg(); + return { k1: k1, k2: k2 }; +}; + +ShortCurve.prototype.pointFromX = function pointFromX(x, odd) { + x = new BN(x, 16); + if (!x.red) + x = x.toRed(this.red); + + var y2 = x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b); + var y = y2.redSqrt(); + if (y.redSqr().redSub(y2).cmp(this.zero) !== 0) + throw new Error('invalid point'); + + // XXX Is there any way to tell if the number is odd without converting it + // to non-red form? + var isOdd = y.fromRed().isOdd(); + if (odd && !isOdd || !odd && isOdd) + y = y.redNeg(); + + return this.point(x, y); +}; + +ShortCurve.prototype.validate = function validate(point) { + if (point.inf) + return true; + + var x = point.x; + var y = point.y; + + var ax = this.a.redMul(x); + var rhs = x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b); + return y.redSqr().redISub(rhs).cmpn(0) === 0; +}; + +ShortCurve.prototype._endoWnafMulAdd = + function _endoWnafMulAdd(points, coeffs, jacobianResult) { + var npoints = this._endoWnafT1; + var ncoeffs = this._endoWnafT2; + for (var i = 0; i < points.length; i++) { + var split = this._endoSplit(coeffs[i]); + var p = points[i]; + var beta = p._getBeta(); + + if (split.k1.negative) { + split.k1.ineg(); + p = p.neg(true); + } + if (split.k2.negative) { + split.k2.ineg(); + beta = beta.neg(true); + } + + npoints[i * 2] = p; + npoints[i * 2 + 1] = beta; + ncoeffs[i * 2] = split.k1; + ncoeffs[i * 2 + 1] = split.k2; + } + var res = this._wnafMulAdd(1, npoints, ncoeffs, i * 2, jacobianResult); + + // Clean-up references to points and coefficients + for (var j = 0; j < i * 2; j++) { + npoints[j] = null; + ncoeffs[j] = null; + } + return res; + }; + +function Point(curve, x, y, isRed) { + Base.BasePoint.call(this, curve, 'affine'); + if (x === null && y === null) { + this.x = null; + this.y = null; + this.inf = true; + } else { + this.x = new BN(x, 16); + this.y = new BN(y, 16); + // Force redgomery representation when loading from JSON + if (isRed) { + this.x.forceRed(this.curve.red); + this.y.forceRed(this.curve.red); + } + if (!this.x.red) + this.x = this.x.toRed(this.curve.red); + if (!this.y.red) + this.y = this.y.toRed(this.curve.red); + this.inf = false; + } +} +inherits(Point, Base.BasePoint); + +ShortCurve.prototype.point = function point(x, y, isRed) { + return new Point(this, x, y, isRed); +}; + +ShortCurve.prototype.pointFromJSON = function pointFromJSON(obj, red) { + return Point.fromJSON(this, obj, red); +}; + +Point.prototype._getBeta = function _getBeta() { + if (!this.curve.endo) + return; + + var pre = this.precomputed; + if (pre && pre.beta) + return pre.beta; + + var beta = this.curve.point(this.x.redMul(this.curve.endo.beta), this.y); + if (pre) { + var curve = this.curve; + var endoMul = function(p) { + return curve.point(p.x.redMul(curve.endo.beta), p.y); + }; + pre.beta = beta; + beta.precomputed = { + beta: null, + naf: pre.naf && { + wnd: pre.naf.wnd, + points: pre.naf.points.map(endoMul), + }, + doubles: pre.doubles && { + step: pre.doubles.step, + points: pre.doubles.points.map(endoMul), + }, + }; + } + return beta; +}; + +Point.prototype.toJSON = function toJSON() { + if (!this.precomputed) + return [ this.x, this.y ]; + + return [ this.x, this.y, this.precomputed && { + doubles: this.precomputed.doubles && { + step: this.precomputed.doubles.step, + points: this.precomputed.doubles.points.slice(1), + }, + naf: this.precomputed.naf && { + wnd: this.precomputed.naf.wnd, + points: this.precomputed.naf.points.slice(1), + }, + } ]; +}; + +Point.fromJSON = function fromJSON(curve, obj, red) { + if (typeof obj === 'string') + obj = JSON.parse(obj); + var res = curve.point(obj[0], obj[1], red); + if (!obj[2]) + return res; + + function obj2point(obj) { + return curve.point(obj[0], obj[1], red); + } + + var pre = obj[2]; + res.precomputed = { + beta: null, + doubles: pre.doubles && { + step: pre.doubles.step, + points: [ res ].concat(pre.doubles.points.map(obj2point)), + }, + naf: pre.naf && { + wnd: pre.naf.wnd, + points: [ res ].concat(pre.naf.points.map(obj2point)), + }, + }; + return res; +}; + +Point.prototype.inspect = function inspect() { + if (this.isInfinity()) + return ''; + return ''; +}; + +Point.prototype.isInfinity = function isInfinity() { + return this.inf; +}; + +Point.prototype.add = function add(p) { + // O + P = P + if (this.inf) + return p; + + // P + O = P + if (p.inf) + return this; + + // P + P = 2P + if (this.eq(p)) + return this.dbl(); + + // P + (-P) = O + if (this.neg().eq(p)) + return this.curve.point(null, null); + + // P + Q = O + if (this.x.cmp(p.x) === 0) + return this.curve.point(null, null); + + var c = this.y.redSub(p.y); + if (c.cmpn(0) !== 0) + c = c.redMul(this.x.redSub(p.x).redInvm()); + var nx = c.redSqr().redISub(this.x).redISub(p.x); + var ny = c.redMul(this.x.redSub(nx)).redISub(this.y); + return this.curve.point(nx, ny); +}; + +Point.prototype.dbl = function dbl() { + if (this.inf) + return this; + + // 2P = O + var ys1 = this.y.redAdd(this.y); + if (ys1.cmpn(0) === 0) + return this.curve.point(null, null); + + var a = this.curve.a; + + var x2 = this.x.redSqr(); + var dyinv = ys1.redInvm(); + var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv); + + var nx = c.redSqr().redISub(this.x.redAdd(this.x)); + var ny = c.redMul(this.x.redSub(nx)).redISub(this.y); + return this.curve.point(nx, ny); +}; + +Point.prototype.getX = function getX() { + return this.x.fromRed(); +}; + +Point.prototype.getY = function getY() { + return this.y.fromRed(); +}; + +Point.prototype.mul = function mul(k) { + k = new BN(k, 16); + if (this.isInfinity()) + return this; + else if (this._hasDoubles(k)) + return this.curve._fixedNafMul(this, k); + else if (this.curve.endo) + return this.curve._endoWnafMulAdd([ this ], [ k ]); + else + return this.curve._wnafMul(this, k); +}; + +Point.prototype.mulAdd = function mulAdd(k1, p2, k2) { + var points = [ this, p2 ]; + var coeffs = [ k1, k2 ]; + if (this.curve.endo) + return this.curve._endoWnafMulAdd(points, coeffs); + else + return this.curve._wnafMulAdd(1, points, coeffs, 2); +}; + +Point.prototype.jmulAdd = function jmulAdd(k1, p2, k2) { + var points = [ this, p2 ]; + var coeffs = [ k1, k2 ]; + if (this.curve.endo) + return this.curve._endoWnafMulAdd(points, coeffs, true); + else + return this.curve._wnafMulAdd(1, points, coeffs, 2, true); +}; + +Point.prototype.eq = function eq(p) { + return this === p || + this.inf === p.inf && + (this.inf || this.x.cmp(p.x) === 0 && this.y.cmp(p.y) === 0); +}; + +Point.prototype.neg = function neg(_precompute) { + if (this.inf) + return this; + + var res = this.curve.point(this.x, this.y.redNeg()); + if (_precompute && this.precomputed) { + var pre = this.precomputed; + var negate = function(p) { + return p.neg(); + }; + res.precomputed = { + naf: pre.naf && { + wnd: pre.naf.wnd, + points: pre.naf.points.map(negate), + }, + doubles: pre.doubles && { + step: pre.doubles.step, + points: pre.doubles.points.map(negate), + }, + }; + } + return res; +}; + +Point.prototype.toJ = function toJ() { + if (this.inf) + return this.curve.jpoint(null, null, null); + + var res = this.curve.jpoint(this.x, this.y, this.curve.one); + return res; +}; + +function JPoint(curve, x, y, z) { + Base.BasePoint.call(this, curve, 'jacobian'); + if (x === null && y === null && z === null) { + this.x = this.curve.one; + this.y = this.curve.one; + this.z = new BN(0); + } else { + this.x = new BN(x, 16); + this.y = new BN(y, 16); + this.z = new BN(z, 16); + } + if (!this.x.red) + this.x = this.x.toRed(this.curve.red); + if (!this.y.red) + this.y = this.y.toRed(this.curve.red); + if (!this.z.red) + this.z = this.z.toRed(this.curve.red); + + this.zOne = this.z === this.curve.one; +} +inherits(JPoint, Base.BasePoint); + +ShortCurve.prototype.jpoint = function jpoint(x, y, z) { + return new JPoint(this, x, y, z); +}; + +JPoint.prototype.toP = function toP() { + if (this.isInfinity()) + return this.curve.point(null, null); + + var zinv = this.z.redInvm(); + var zinv2 = zinv.redSqr(); + var ax = this.x.redMul(zinv2); + var ay = this.y.redMul(zinv2).redMul(zinv); + + return this.curve.point(ax, ay); +}; + +JPoint.prototype.neg = function neg() { + return this.curve.jpoint(this.x, this.y.redNeg(), this.z); +}; + +JPoint.prototype.add = function add(p) { + // O + P = P + if (this.isInfinity()) + return p; + + // P + O = P + if (p.isInfinity()) + return this; + + // 12M + 4S + 7A + var pz2 = p.z.redSqr(); + var z2 = this.z.redSqr(); + var u1 = this.x.redMul(pz2); + var u2 = p.x.redMul(z2); + var s1 = this.y.redMul(pz2.redMul(p.z)); + var s2 = p.y.redMul(z2.redMul(this.z)); + + var h = u1.redSub(u2); + var r = s1.redSub(s2); + if (h.cmpn(0) === 0) { + if (r.cmpn(0) !== 0) + return this.curve.jpoint(null, null, null); + else + return this.dbl(); + } + + var h2 = h.redSqr(); + var h3 = h2.redMul(h); + var v = u1.redMul(h2); + + var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v); + var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3)); + var nz = this.z.redMul(p.z).redMul(h); + + return this.curve.jpoint(nx, ny, nz); +}; + +JPoint.prototype.mixedAdd = function mixedAdd(p) { + // O + P = P + if (this.isInfinity()) + return p.toJ(); + + // P + O = P + if (p.isInfinity()) + return this; + + // 8M + 3S + 7A + var z2 = this.z.redSqr(); + var u1 = this.x; + var u2 = p.x.redMul(z2); + var s1 = this.y; + var s2 = p.y.redMul(z2).redMul(this.z); + + var h = u1.redSub(u2); + var r = s1.redSub(s2); + if (h.cmpn(0) === 0) { + if (r.cmpn(0) !== 0) + return this.curve.jpoint(null, null, null); + else + return this.dbl(); + } + + var h2 = h.redSqr(); + var h3 = h2.redMul(h); + var v = u1.redMul(h2); + + var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v); + var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3)); + var nz = this.z.redMul(h); + + return this.curve.jpoint(nx, ny, nz); +}; + +JPoint.prototype.dblp = function dblp(pow) { + if (pow === 0) + return this; + if (this.isInfinity()) + return this; + if (!pow) + return this.dbl(); + + var i; + if (this.curve.zeroA || this.curve.threeA) { + var r = this; + for (i = 0; i < pow; i++) + r = r.dbl(); + return r; + } + + // 1M + 2S + 1A + N * (4S + 5M + 8A) + // N = 1 => 6M + 6S + 9A + var a = this.curve.a; + var tinv = this.curve.tinv; + + var jx = this.x; + var jy = this.y; + var jz = this.z; + var jz4 = jz.redSqr().redSqr(); + + // Reuse results + var jyd = jy.redAdd(jy); + for (i = 0; i < pow; i++) { + var jx2 = jx.redSqr(); + var jyd2 = jyd.redSqr(); + var jyd4 = jyd2.redSqr(); + var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4)); + + var t1 = jx.redMul(jyd2); + var nx = c.redSqr().redISub(t1.redAdd(t1)); + var t2 = t1.redISub(nx); + var dny = c.redMul(t2); + dny = dny.redIAdd(dny).redISub(jyd4); + var nz = jyd.redMul(jz); + if (i + 1 < pow) + jz4 = jz4.redMul(jyd4); + + jx = nx; + jz = nz; + jyd = dny; + } + + return this.curve.jpoint(jx, jyd.redMul(tinv), jz); +}; + +JPoint.prototype.dbl = function dbl() { + if (this.isInfinity()) + return this; + + if (this.curve.zeroA) + return this._zeroDbl(); + else if (this.curve.threeA) + return this._threeDbl(); + else + return this._dbl(); +}; + +JPoint.prototype._zeroDbl = function _zeroDbl() { + var nx; + var ny; + var nz; + // Z = 1 + if (this.zOne) { + // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html + // #doubling-mdbl-2007-bl + // 1M + 5S + 14A + + // XX = X1^2 + var xx = this.x.redSqr(); + // YY = Y1^2 + var yy = this.y.redSqr(); + // YYYY = YY^2 + var yyyy = yy.redSqr(); + // S = 2 * ((X1 + YY)^2 - XX - YYYY) + var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy); + s = s.redIAdd(s); + // M = 3 * XX + a; a = 0 + var m = xx.redAdd(xx).redIAdd(xx); + // T = M ^ 2 - 2*S + var t = m.redSqr().redISub(s).redISub(s); + + // 8 * YYYY + var yyyy8 = yyyy.redIAdd(yyyy); + yyyy8 = yyyy8.redIAdd(yyyy8); + yyyy8 = yyyy8.redIAdd(yyyy8); + + // X3 = T + nx = t; + // Y3 = M * (S - T) - 8 * YYYY + ny = m.redMul(s.redISub(t)).redISub(yyyy8); + // Z3 = 2*Y1 + nz = this.y.redAdd(this.y); + } else { + // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html + // #doubling-dbl-2009-l + // 2M + 5S + 13A + + // A = X1^2 + var a = this.x.redSqr(); + // B = Y1^2 + var b = this.y.redSqr(); + // C = B^2 + var c = b.redSqr(); + // D = 2 * ((X1 + B)^2 - A - C) + var d = this.x.redAdd(b).redSqr().redISub(a).redISub(c); + d = d.redIAdd(d); + // E = 3 * A + var e = a.redAdd(a).redIAdd(a); + // F = E^2 + var f = e.redSqr(); + + // 8 * C + var c8 = c.redIAdd(c); + c8 = c8.redIAdd(c8); + c8 = c8.redIAdd(c8); + + // X3 = F - 2 * D + nx = f.redISub(d).redISub(d); + // Y3 = E * (D - X3) - 8 * C + ny = e.redMul(d.redISub(nx)).redISub(c8); + // Z3 = 2 * Y1 * Z1 + nz = this.y.redMul(this.z); + nz = nz.redIAdd(nz); + } + + return this.curve.jpoint(nx, ny, nz); +}; + +JPoint.prototype._threeDbl = function _threeDbl() { + var nx; + var ny; + var nz; + // Z = 1 + if (this.zOne) { + // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html + // #doubling-mdbl-2007-bl + // 1M + 5S + 15A + + // XX = X1^2 + var xx = this.x.redSqr(); + // YY = Y1^2 + var yy = this.y.redSqr(); + // YYYY = YY^2 + var yyyy = yy.redSqr(); + // S = 2 * ((X1 + YY)^2 - XX - YYYY) + var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy); + s = s.redIAdd(s); + // M = 3 * XX + a + var m = xx.redAdd(xx).redIAdd(xx).redIAdd(this.curve.a); + // T = M^2 - 2 * S + var t = m.redSqr().redISub(s).redISub(s); + // X3 = T + nx = t; + // Y3 = M * (S - T) - 8 * YYYY + var yyyy8 = yyyy.redIAdd(yyyy); + yyyy8 = yyyy8.redIAdd(yyyy8); + yyyy8 = yyyy8.redIAdd(yyyy8); + ny = m.redMul(s.redISub(t)).redISub(yyyy8); + // Z3 = 2 * Y1 + nz = this.y.redAdd(this.y); + } else { + // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b + // 3M + 5S + + // delta = Z1^2 + var delta = this.z.redSqr(); + // gamma = Y1^2 + var gamma = this.y.redSqr(); + // beta = X1 * gamma + var beta = this.x.redMul(gamma); + // alpha = 3 * (X1 - delta) * (X1 + delta) + var alpha = this.x.redSub(delta).redMul(this.x.redAdd(delta)); + alpha = alpha.redAdd(alpha).redIAdd(alpha); + // X3 = alpha^2 - 8 * beta + var beta4 = beta.redIAdd(beta); + beta4 = beta4.redIAdd(beta4); + var beta8 = beta4.redAdd(beta4); + nx = alpha.redSqr().redISub(beta8); + // Z3 = (Y1 + Z1)^2 - gamma - delta + nz = this.y.redAdd(this.z).redSqr().redISub(gamma).redISub(delta); + // Y3 = alpha * (4 * beta - X3) - 8 * gamma^2 + var ggamma8 = gamma.redSqr(); + ggamma8 = ggamma8.redIAdd(ggamma8); + ggamma8 = ggamma8.redIAdd(ggamma8); + ggamma8 = ggamma8.redIAdd(ggamma8); + ny = alpha.redMul(beta4.redISub(nx)).redISub(ggamma8); + } + + return this.curve.jpoint(nx, ny, nz); +}; + +JPoint.prototype._dbl = function _dbl() { + var a = this.curve.a; + + // 4M + 6S + 10A + var jx = this.x; + var jy = this.y; + var jz = this.z; + var jz4 = jz.redSqr().redSqr(); + + var jx2 = jx.redSqr(); + var jy2 = jy.redSqr(); + + var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4)); + + var jxd4 = jx.redAdd(jx); + jxd4 = jxd4.redIAdd(jxd4); + var t1 = jxd4.redMul(jy2); + var nx = c.redSqr().redISub(t1.redAdd(t1)); + var t2 = t1.redISub(nx); + + var jyd8 = jy2.redSqr(); + jyd8 = jyd8.redIAdd(jyd8); + jyd8 = jyd8.redIAdd(jyd8); + jyd8 = jyd8.redIAdd(jyd8); + var ny = c.redMul(t2).redISub(jyd8); + var nz = jy.redAdd(jy).redMul(jz); + + return this.curve.jpoint(nx, ny, nz); +}; + +JPoint.prototype.trpl = function trpl() { + if (!this.curve.zeroA) + return this.dbl().add(this); + + // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#tripling-tpl-2007-bl + // 5M + 10S + ... + + // XX = X1^2 + var xx = this.x.redSqr(); + // YY = Y1^2 + var yy = this.y.redSqr(); + // ZZ = Z1^2 + var zz = this.z.redSqr(); + // YYYY = YY^2 + var yyyy = yy.redSqr(); + // M = 3 * XX + a * ZZ2; a = 0 + var m = xx.redAdd(xx).redIAdd(xx); + // MM = M^2 + var mm = m.redSqr(); + // E = 6 * ((X1 + YY)^2 - XX - YYYY) - MM + var e = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy); + e = e.redIAdd(e); + e = e.redAdd(e).redIAdd(e); + e = e.redISub(mm); + // EE = E^2 + var ee = e.redSqr(); + // T = 16*YYYY + var t = yyyy.redIAdd(yyyy); + t = t.redIAdd(t); + t = t.redIAdd(t); + t = t.redIAdd(t); + // U = (M + E)^2 - MM - EE - T + var u = m.redIAdd(e).redSqr().redISub(mm).redISub(ee).redISub(t); + // X3 = 4 * (X1 * EE - 4 * YY * U) + var yyu4 = yy.redMul(u); + yyu4 = yyu4.redIAdd(yyu4); + yyu4 = yyu4.redIAdd(yyu4); + var nx = this.x.redMul(ee).redISub(yyu4); + nx = nx.redIAdd(nx); + nx = nx.redIAdd(nx); + // Y3 = 8 * Y1 * (U * (T - U) - E * EE) + var ny = this.y.redMul(u.redMul(t.redISub(u)).redISub(e.redMul(ee))); + ny = ny.redIAdd(ny); + ny = ny.redIAdd(ny); + ny = ny.redIAdd(ny); + // Z3 = (Z1 + E)^2 - ZZ - EE + var nz = this.z.redAdd(e).redSqr().redISub(zz).redISub(ee); + + return this.curve.jpoint(nx, ny, nz); +}; + +JPoint.prototype.mul = function mul(k, kbase) { + k = new BN(k, kbase); + + return this.curve._wnafMul(this, k); +}; + +JPoint.prototype.eq = function eq(p) { + if (p.type === 'affine') + return this.eq(p.toJ()); + + if (this === p) + return true; + + // x1 * z2^2 == x2 * z1^2 + var z2 = this.z.redSqr(); + var pz2 = p.z.redSqr(); + if (this.x.redMul(pz2).redISub(p.x.redMul(z2)).cmpn(0) !== 0) + return false; + + // y1 * z2^3 == y2 * z1^3 + var z3 = z2.redMul(this.z); + var pz3 = pz2.redMul(p.z); + return this.y.redMul(pz3).redISub(p.y.redMul(z3)).cmpn(0) === 0; +}; + +JPoint.prototype.eqXToP = function eqXToP(x) { + var zs = this.z.redSqr(); + var rx = x.toRed(this.curve.red).redMul(zs); + if (this.x.cmp(rx) === 0) + return true; + + var xc = x.clone(); + var t = this.curve.redN.redMul(zs); + for (;;) { + xc.iadd(this.curve.n); + if (xc.cmp(this.curve.p) >= 0) + return false; + + rx.redIAdd(t); + if (this.x.cmp(rx) === 0) + return true; + } +}; + +JPoint.prototype.inspect = function inspect() { + if (this.isInfinity()) + return ''; + return ''; +}; + +JPoint.prototype.isInfinity = function isInfinity() { + // XXX This code assumes that zero is always zero in red + return this.z.cmpn(0) === 0; +}; + + +}, +88261(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; + + +var curves = exports; + +var hash = __webpack_require__(93842); +var curve = __webpack_require__(32765); +var utils = __webpack_require__(67156); + +var assert = utils.assert; + +function PresetCurve(options) { + if (options.type === 'short') + this.curve = new curve.short(options); + else if (options.type === 'edwards') + this.curve = new curve.edwards(options); + else + this.curve = new curve.mont(options); + this.g = this.curve.g; + this.n = this.curve.n; + this.hash = options.hash; + + assert(this.g.validate(), 'Invalid curve'); + assert(this.g.mul(this.n).isInfinity(), 'Invalid curve, G*N != O'); +} +curves.PresetCurve = PresetCurve; + +function defineCurve(name, options) { + Object.defineProperty(curves, name, { + configurable: true, + enumerable: true, + get: function() { + var curve = new PresetCurve(options); + Object.defineProperty(curves, name, { + configurable: true, + enumerable: true, + value: curve, + }); + return curve; + }, + }); +} + +defineCurve('p192', { + type: 'short', + prime: 'p192', + p: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff', + a: 'ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc', + b: '64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1', + n: 'ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831', + hash: hash.sha256, + gRed: false, + g: [ + '188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012', + '07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811', + ], +}); + +defineCurve('p224', { + type: 'short', + prime: 'p224', + p: 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001', + a: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe', + b: 'b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4', + n: 'ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d', + hash: hash.sha256, + gRed: false, + g: [ + 'b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21', + 'bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34', + ], +}); + +defineCurve('p256', { + type: 'short', + prime: null, + p: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff', + a: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc', + b: '5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b', + n: 'ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551', + hash: hash.sha256, + gRed: false, + g: [ + '6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296', + '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5', + ], +}); + +defineCurve('p384', { + type: 'short', + prime: null, + p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' + + 'fffffffe ffffffff 00000000 00000000 ffffffff', + a: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' + + 'fffffffe ffffffff 00000000 00000000 fffffffc', + b: 'b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f ' + + '5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef', + n: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 ' + + 'f4372ddf 581a0db2 48b0a77a ecec196a ccc52973', + hash: hash.sha384, + gRed: false, + g: [ + 'aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 ' + + '5502f25d bf55296c 3a545e38 72760ab7', + '3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 ' + + '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f', + ], +}); + +defineCurve('p521', { + type: 'short', + prime: null, + p: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' + + 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' + + 'ffffffff ffffffff ffffffff ffffffff ffffffff', + a: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' + + 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' + + 'ffffffff ffffffff ffffffff ffffffff fffffffc', + b: '00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b ' + + '99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd ' + + '3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00', + n: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' + + 'ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 ' + + 'f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409', + hash: hash.sha512, + gRed: false, + g: [ + '000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 ' + + '053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 ' + + 'a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66', + '00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 ' + + '579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 ' + + '3fad0761 353c7086 a272c240 88be9476 9fd16650', + ], +}); + +defineCurve('curve25519', { + type: 'mont', + prime: 'p25519', + p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed', + a: '76d06', + b: '1', + n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed', + hash: hash.sha256, + gRed: false, + g: [ + '9', + ], +}); + +defineCurve('ed25519', { + type: 'edwards', + prime: 'p25519', + p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed', + a: '-1', + c: '1', + // -121665 * (121666^(-1)) (mod P) + d: '52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3', + n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed', + hash: hash.sha256, + gRed: false, + g: [ + '216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a', + + // 4/5 + '6666666666666666666666666666666666666666666666666666666666666658', + ], +}); + +var pre; +try { + pre = __webpack_require__(74236); +} catch (e) { + pre = undefined; +} + +defineCurve('secp256k1', { + type: 'short', + prime: 'k256', + p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f', + a: '0', + b: '7', + n: 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141', + h: '1', + hash: hash.sha256, + + // Precomputed endomorphism + beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee', + lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72', + basis: [ + { + a: '3086d221a7d46bcde86c90e49284eb15', + b: '-e4437ed6010e88286f547fa90abfe4c3', + }, + { + a: '114ca50f7a8e2f3f657c1108d9d44cfd8', + b: '3086d221a7d46bcde86c90e49284eb15', + }, + ], + + gRed: false, + g: [ + '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798', + '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8', + pre, + ], +}); + + +}, +97646(module, __unused_webpack_exports, __webpack_require__) { +"use strict"; + + +var BN = __webpack_require__(91939); +var HmacDRBG = __webpack_require__(42588); +var utils = __webpack_require__(67156); +var curves = __webpack_require__(88261); +var rand = __webpack_require__(93705); +var assert = utils.assert; + +var KeyPair = __webpack_require__(31129); +var Signature = __webpack_require__(51392); + +function EC(options) { + if (!(this instanceof EC)) + return new EC(options); + + // Shortcut `elliptic.ec(curve-name)` + if (typeof options === 'string') { + assert(Object.prototype.hasOwnProperty.call(curves, options), + 'Unknown curve ' + options); + + options = curves[options]; + } + + // Shortcut for `elliptic.ec(elliptic.curves.curveName)` + if (options instanceof curves.PresetCurve) + options = { curve: options }; + + this.curve = options.curve.curve; + this.n = this.curve.n; + this.nh = this.n.ushrn(1); + this.g = this.curve.g; + + // Point on curve + this.g = options.curve.g; + this.g.precompute(options.curve.n.bitLength() + 1); + + // Hash for function for DRBG + this.hash = options.hash || options.curve.hash; +} +module.exports = EC; + +EC.prototype.keyPair = function keyPair(options) { + return new KeyPair(this, options); +}; + +EC.prototype.keyFromPrivate = function keyFromPrivate(priv, enc) { + return KeyPair.fromPrivate(this, priv, enc); +}; + +EC.prototype.keyFromPublic = function keyFromPublic(pub, enc) { + return KeyPair.fromPublic(this, pub, enc); +}; + +EC.prototype.genKeyPair = function genKeyPair(options) { + if (!options) + options = {}; + + // Instantiate Hmac_DRBG + var drbg = new HmacDRBG({ + hash: this.hash, + pers: options.pers, + persEnc: options.persEnc || 'utf8', + entropy: options.entropy || rand(this.hash.hmacStrength), + entropyEnc: options.entropy && options.entropyEnc || 'utf8', + nonce: this.n.toArray(), + }); + + var bytes = this.n.byteLength(); + var ns2 = this.n.sub(new BN(2)); + for (;;) { + var priv = new BN(drbg.generate(bytes)); + if (priv.cmp(ns2) > 0) + continue; + + priv.iaddn(1); + return this.keyFromPrivate(priv); + } +}; + +EC.prototype._truncateToN = function _truncateToN(msg, truncOnly, bitLength) { + var byteLength; + if (BN.isBN(msg) || typeof msg === 'number') { + msg = new BN(msg, 16); + byteLength = msg.byteLength(); + } else if (typeof msg === 'object') { + // BN assumes an array-like input and asserts length + byteLength = msg.length; + msg = new BN(msg, 16); + } else { + // BN converts the value to string + var str = msg.toString(); + // HEX encoding + byteLength = (str.length + 1) >>> 1; + msg = new BN(str, 16); + } + // Allow overriding + if (typeof bitLength !== 'number') { + bitLength = byteLength * 8; + } + var delta = bitLength - this.n.bitLength(); + if (delta > 0) + msg = msg.ushrn(delta); + if (!truncOnly && msg.cmp(this.n) >= 0) + return msg.sub(this.n); + else + return msg; +}; + +EC.prototype.sign = function sign(msg, key, enc, options) { + if (typeof enc === 'object') { + options = enc; + enc = null; + } + if (!options) + options = {}; + + if (typeof msg !== 'string' && typeof msg !== 'number' && !BN.isBN(msg)) { + assert(typeof msg === 'object' && msg && typeof msg.length === 'number', + 'Expected message to be an array-like, a hex string, or a BN instance'); + assert((msg.length >>> 0) === msg.length); // non-negative 32-bit integer + for (var i = 0; i < msg.length; i++) assert((msg[i] & 255) === msg[i]); + } + + key = this.keyFromPrivate(key, enc); + msg = this._truncateToN(msg, false, options.msgBitLength); + + // Would fail further checks, but let's make the error message clear + assert(!msg.isNeg(), 'Can not sign a negative message'); + + // Zero-extend key to provide enough entropy + var bytes = this.n.byteLength(); + var bkey = key.getPrivate().toArray('be', bytes); + + // Zero-extend nonce to have the same byte size as N + var nonce = msg.toArray('be', bytes); + + // Recheck nonce to be bijective to msg + assert((new BN(nonce)).eq(msg), 'Can not sign message'); + + // Instantiate Hmac_DRBG + var drbg = new HmacDRBG({ + hash: this.hash, + entropy: bkey, + nonce: nonce, + pers: options.pers, + persEnc: options.persEnc || 'utf8', + }); + + // Number of bytes to generate + var ns1 = this.n.sub(new BN(1)); + + for (var iter = 0; ; iter++) { + var k = options.k ? + options.k(iter) : + new BN(drbg.generate(this.n.byteLength())); + k = this._truncateToN(k, true); + if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0) + continue; + + var kp = this.g.mul(k); + if (kp.isInfinity()) + continue; + + var kpX = kp.getX(); + var r = kpX.umod(this.n); + if (r.cmpn(0) === 0) + continue; + + var s = k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg)); + s = s.umod(this.n); + if (s.cmpn(0) === 0) + continue; + + var recoveryParam = (kp.getY().isOdd() ? 1 : 0) | + (kpX.cmp(r) !== 0 ? 2 : 0); + + // Use complement of `s`, if it is > `n / 2` + if (options.canonical && s.cmp(this.nh) > 0) { + s = this.n.sub(s); + recoveryParam ^= 1; + } + + return new Signature({ r: r, s: s, recoveryParam: recoveryParam }); + } +}; + +EC.prototype.verify = function verify(msg, signature, key, enc, options) { + if (!options) + options = {}; + + msg = this._truncateToN(msg, false, options.msgBitLength); + key = this.keyFromPublic(key, enc); + signature = new Signature(signature, 'hex'); + + // Perform primitive values validation + var r = signature.r; + var s = signature.s; + if (r.cmpn(1) < 0 || r.cmp(this.n) >= 0) + return false; + if (s.cmpn(1) < 0 || s.cmp(this.n) >= 0) + return false; + + // Validate signature + var sinv = s.invm(this.n); + var u1 = sinv.mul(msg).umod(this.n); + var u2 = sinv.mul(r).umod(this.n); + var p; + + if (!this.curve._maxwellTrick) { + p = this.g.mulAdd(u1, key.getPublic(), u2); + if (p.isInfinity()) + return false; + + return p.getX().umod(this.n).cmp(r) === 0; + } + + // NOTE: Greg Maxwell's trick, inspired by: + // https://git.io/vad3K + + p = this.g.jmulAdd(u1, key.getPublic(), u2); + if (p.isInfinity()) + return false; + + // Compare `p.x` of Jacobian point with `r`, + // this will do `p.x == r * p.z^2` instead of multiplying `p.x` by the + // inverse of `p.z^2` + return p.eqXToP(r); +}; + +EC.prototype.recoverPubKey = function(msg, signature, j, enc) { + assert((3 & j) === j, 'The recovery param is more than two bits'); + signature = new Signature(signature, enc); + + var n = this.n; + var e = new BN(msg); + var r = signature.r; + var s = signature.s; + + // A set LSB signifies that the y-coordinate is odd + var isYOdd = j & 1; + var isSecondKey = j >> 1; + if (r.cmp(this.curve.p.umod(this.curve.n)) >= 0 && isSecondKey) + throw new Error('Unable to find sencond key candinate'); + + // 1.1. Let x = r + jn. + if (isSecondKey) + r = this.curve.pointFromX(r.add(this.curve.n), isYOdd); + else + r = this.curve.pointFromX(r, isYOdd); + + var rInv = signature.r.invm(n); + var s1 = n.sub(e).mul(rInv).umod(n); + var s2 = s.mul(rInv).umod(n); + + // 1.6.1 Compute Q = r^-1 (sR - eG) + // Q = r^-1 (sR + -eG) + return this.g.mulAdd(s1, r, s2); +}; + +EC.prototype.getKeyRecoveryParam = function(e, signature, Q, enc) { + signature = new Signature(signature, enc); + if (signature.recoveryParam !== null) + return signature.recoveryParam; + + for (var i = 0; i < 4; i++) { + var Qprime; + try { + Qprime = this.recoverPubKey(e, signature, i); + } catch (e) { + continue; + } + + if (Qprime.eq(Q)) + return i; + } + throw new Error('Unable to find valid recovery factor'); +}; + + +}, +31129(module, __unused_webpack_exports, __webpack_require__) { +"use strict"; + + +var BN = __webpack_require__(91939); +var utils = __webpack_require__(67156); +var assert = utils.assert; + +function KeyPair(ec, options) { + this.ec = ec; + this.priv = null; + this.pub = null; + + // KeyPair(ec, { priv: ..., pub: ... }) + if (options.priv) + this._importPrivate(options.priv, options.privEnc); + if (options.pub) + this._importPublic(options.pub, options.pubEnc); +} +module.exports = KeyPair; + +KeyPair.fromPublic = function fromPublic(ec, pub, enc) { + if (pub instanceof KeyPair) + return pub; + + return new KeyPair(ec, { + pub: pub, + pubEnc: enc, + }); +}; + +KeyPair.fromPrivate = function fromPrivate(ec, priv, enc) { + if (priv instanceof KeyPair) + return priv; + + return new KeyPair(ec, { + priv: priv, + privEnc: enc, + }); +}; + +KeyPair.prototype.validate = function validate() { + var pub = this.getPublic(); + + if (pub.isInfinity()) + return { result: false, reason: 'Invalid public key' }; + if (!pub.validate()) + return { result: false, reason: 'Public key is not a point' }; + if (!pub.mul(this.ec.curve.n).isInfinity()) + return { result: false, reason: 'Public key * N != O' }; + + return { result: true, reason: null }; +}; + +KeyPair.prototype.getPublic = function getPublic(compact, enc) { + // compact is optional argument + if (typeof compact === 'string') { + enc = compact; + compact = null; + } + + if (!this.pub) + this.pub = this.ec.g.mul(this.priv); + + if (!enc) + return this.pub; + + return this.pub.encode(enc, compact); +}; + +KeyPair.prototype.getPrivate = function getPrivate(enc) { + if (enc === 'hex') + return this.priv.toString(16, 2); + else + return this.priv; +}; + +KeyPair.prototype._importPrivate = function _importPrivate(key, enc) { + this.priv = new BN(key, enc || 16); + + // Ensure that the priv won't be bigger than n, otherwise we may fail + // in fixed multiplication method + this.priv = this.priv.umod(this.ec.curve.n); +}; + +KeyPair.prototype._importPublic = function _importPublic(key, enc) { + if (key.x || key.y) { + // Montgomery points only have an `x` coordinate. + // Weierstrass/Edwards points on the other hand have both `x` and + // `y` coordinates. + if (this.ec.curve.type === 'mont') { + assert(key.x, 'Need x coordinate'); + } else if (this.ec.curve.type === 'short' || + this.ec.curve.type === 'edwards') { + assert(key.x && key.y, 'Need both x and y coordinate'); + } + this.pub = this.ec.curve.point(key.x, key.y); + return; + } + this.pub = this.ec.curve.decodePoint(key, enc); +}; + +// ECDH +KeyPair.prototype.derive = function derive(pub) { + if(!pub.validate()) { + assert(pub.validate(), 'public point not validated'); + } + return pub.mul(this.priv).getX(); +}; + +// ECDSA +KeyPair.prototype.sign = function sign(msg, enc, options) { + return this.ec.sign(msg, this, enc, options); +}; + +KeyPair.prototype.verify = function verify(msg, signature, options) { + return this.ec.verify(msg, signature, this, undefined, options); +}; + +KeyPair.prototype.inspect = function inspect() { + return ''; +}; + + +}, +51392(module, __unused_webpack_exports, __webpack_require__) { +"use strict"; + + +var BN = __webpack_require__(91939); + +var utils = __webpack_require__(67156); +var assert = utils.assert; + +function Signature(options, enc) { + if (options instanceof Signature) + return options; + + if (this._importDER(options, enc)) + return; + + assert(options.r && options.s, 'Signature without r or s'); + this.r = new BN(options.r, 16); + this.s = new BN(options.s, 16); + if (options.recoveryParam === undefined) + this.recoveryParam = null; + else + this.recoveryParam = options.recoveryParam; +} +module.exports = Signature; + +function Position() { + this.place = 0; +} + +function getLength(buf, p) { + var initial = buf[p.place++]; + if (!(initial & 0x80)) { + return initial; + } + var octetLen = initial & 0xf; + + // Indefinite length or overflow + if (octetLen === 0 || octetLen > 4) { + return false; + } + + if(buf[p.place] === 0x00) { + return false; + } + + var val = 0; + for (var i = 0, off = p.place; i < octetLen; i++, off++) { + val <<= 8; + val |= buf[off]; + val >>>= 0; + } + + // Leading zeroes + if (val <= 0x7f) { + return false; + } + + p.place = off; + return val; +} + +function rmPadding(buf) { + var i = 0; + var len = buf.length - 1; + while (!buf[i] && !(buf[i + 1] & 0x80) && i < len) { + i++; + } + if (i === 0) { + return buf; + } + return buf.slice(i); +} + +Signature.prototype._importDER = function _importDER(data, enc) { + data = utils.toArray(data, enc); + var p = new Position(); + if (data[p.place++] !== 0x30) { + return false; + } + var len = getLength(data, p); + if (len === false) { + return false; + } + if ((len + p.place) !== data.length) { + return false; + } + if (data[p.place++] !== 0x02) { + return false; + } + var rlen = getLength(data, p); + if (rlen === false) { + return false; + } + if ((data[p.place] & 128) !== 0) { + return false; + } + var r = data.slice(p.place, rlen + p.place); + p.place += rlen; + if (data[p.place++] !== 0x02) { + return false; + } + var slen = getLength(data, p); + if (slen === false) { + return false; + } + if (data.length !== slen + p.place) { + return false; + } + if ((data[p.place] & 128) !== 0) { + return false; + } + var s = data.slice(p.place, slen + p.place); + if (r[0] === 0) { + if (r[1] & 0x80) { + r = r.slice(1); + } else { + // Leading zeroes + return false; + } + } + if (s[0] === 0) { + if (s[1] & 0x80) { + s = s.slice(1); + } else { + // Leading zeroes + return false; + } + } + + this.r = new BN(r); + this.s = new BN(s); + this.recoveryParam = null; + + return true; +}; + +function constructLength(arr, len) { + if (len < 0x80) { + arr.push(len); + return; + } + var octets = 1 + (Math.log(len) / Math.LN2 >>> 3); + arr.push(octets | 0x80); + while (--octets) { + arr.push((len >>> (octets << 3)) & 0xff); + } + arr.push(len); +} + +Signature.prototype.toDER = function toDER(enc) { + var r = this.r.toArray(); + var s = this.s.toArray(); + + // Pad values + if (r[0] & 0x80) + r = [ 0 ].concat(r); + // Pad values + if (s[0] & 0x80) + s = [ 0 ].concat(s); + + r = rmPadding(r); + s = rmPadding(s); + + while (!s[0] && !(s[1] & 0x80)) { + s = s.slice(1); + } + var arr = [ 0x02 ]; + constructLength(arr, r.length); + arr = arr.concat(r); + arr.push(0x02); + constructLength(arr, s.length); + var backHalf = arr.concat(s); + var res = [ 0x30 ]; + constructLength(res, backHalf.length); + res = res.concat(backHalf); + return utils.encode(res, enc); +}; + + +}, +73241(module, __unused_webpack_exports, __webpack_require__) { +"use strict"; + + +var hash = __webpack_require__(93842); +var curves = __webpack_require__(88261); +var utils = __webpack_require__(67156); +var assert = utils.assert; +var parseBytes = utils.parseBytes; +var KeyPair = __webpack_require__(97418); +var Signature = __webpack_require__(70591); + +function EDDSA(curve) { + assert(curve === 'ed25519', 'only tested with ed25519 so far'); + + if (!(this instanceof EDDSA)) + return new EDDSA(curve); + + curve = curves[curve].curve; + this.curve = curve; + this.g = curve.g; + this.g.precompute(curve.n.bitLength() + 1); + + this.pointClass = curve.point().constructor; + this.encodingLength = Math.ceil(curve.n.bitLength() / 8); + this.hash = hash.sha512; +} + +module.exports = EDDSA; + +/** +* @param {Array|String} message - message bytes +* @param {Array|String|KeyPair} secret - secret bytes or a keypair +* @returns {Signature} - signature +*/ +EDDSA.prototype.sign = function sign(message, secret) { + message = parseBytes(message); + var key = this.keyFromSecret(secret); + var r = this.hashInt(key.messagePrefix(), message); + var R = this.g.mul(r); + var Rencoded = this.encodePoint(R); + var s_ = this.hashInt(Rencoded, key.pubBytes(), message) + .mul(key.priv()); + var S = r.add(s_).umod(this.curve.n); + return this.makeSignature({ R: R, S: S, Rencoded: Rencoded }); +}; + +/** +* @param {Array} message - message bytes +* @param {Array|String|Signature} sig - sig bytes +* @param {Array|String|Point|KeyPair} pub - public key +* @returns {Boolean} - true if public key matches sig of message +*/ +EDDSA.prototype.verify = function verify(message, sig, pub) { + message = parseBytes(message); + sig = this.makeSignature(sig); + if (sig.S().gte(sig.eddsa.curve.n) || sig.S().isNeg()) { + return false; + } + var key = this.keyFromPublic(pub); + var h = this.hashInt(sig.Rencoded(), key.pubBytes(), message); + var SG = this.g.mul(sig.S()); + var RplusAh = sig.R().add(key.pub().mul(h)); + return RplusAh.eq(SG); +}; + +EDDSA.prototype.hashInt = function hashInt() { + var hash = this.hash(); + for (var i = 0; i < arguments.length; i++) + hash.update(arguments[i]); + return utils.intFromLE(hash.digest()).umod(this.curve.n); +}; + +EDDSA.prototype.keyFromPublic = function keyFromPublic(pub) { + return KeyPair.fromPublic(this, pub); +}; + +EDDSA.prototype.keyFromSecret = function keyFromSecret(secret) { + return KeyPair.fromSecret(this, secret); +}; + +EDDSA.prototype.makeSignature = function makeSignature(sig) { + if (sig instanceof Signature) + return sig; + return new Signature(this, sig); +}; + +/** +* * https://tools.ietf.org/html/draft-josefsson-eddsa-ed25519-03#section-5.2 +* +* EDDSA defines methods for encoding and decoding points and integers. These are +* helper convenience methods, that pass along to utility functions implied +* parameters. +* +*/ +EDDSA.prototype.encodePoint = function encodePoint(point) { + var enc = point.getY().toArray('le', this.encodingLength); + enc[this.encodingLength - 1] |= point.getX().isOdd() ? 0x80 : 0; + return enc; +}; + +EDDSA.prototype.decodePoint = function decodePoint(bytes) { + bytes = utils.parseBytes(bytes); + + var lastIx = bytes.length - 1; + var normed = bytes.slice(0, lastIx).concat(bytes[lastIx] & ~0x80); + var xIsOdd = (bytes[lastIx] & 0x80) !== 0; + + var y = utils.intFromLE(normed); + return this.curve.pointFromY(y, xIsOdd); +}; + +EDDSA.prototype.encodeInt = function encodeInt(num) { + return num.toArray('le', this.encodingLength); +}; + +EDDSA.prototype.decodeInt = function decodeInt(bytes) { + return utils.intFromLE(bytes); +}; + +EDDSA.prototype.isPoint = function isPoint(val) { + return val instanceof this.pointClass; +}; + + +}, +97418(module, __unused_webpack_exports, __webpack_require__) { +"use strict"; + + +var utils = __webpack_require__(67156); +var assert = utils.assert; +var parseBytes = utils.parseBytes; +var cachedProperty = utils.cachedProperty; + +/** +* @param {EDDSA} eddsa - instance +* @param {Object} params - public/private key parameters +* +* @param {Array} [params.secret] - secret seed bytes +* @param {Point} [params.pub] - public key point (aka `A` in eddsa terms) +* @param {Array} [params.pub] - public key point encoded as bytes +* +*/ +function KeyPair(eddsa, params) { + this.eddsa = eddsa; + this._secret = parseBytes(params.secret); + if (eddsa.isPoint(params.pub)) + this._pub = params.pub; + else + this._pubBytes = parseBytes(params.pub); +} + +KeyPair.fromPublic = function fromPublic(eddsa, pub) { + if (pub instanceof KeyPair) + return pub; + return new KeyPair(eddsa, { pub: pub }); +}; + +KeyPair.fromSecret = function fromSecret(eddsa, secret) { + if (secret instanceof KeyPair) + return secret; + return new KeyPair(eddsa, { secret: secret }); +}; + +KeyPair.prototype.secret = function secret() { + return this._secret; +}; + +cachedProperty(KeyPair, 'pubBytes', function pubBytes() { + return this.eddsa.encodePoint(this.pub()); +}); + +cachedProperty(KeyPair, 'pub', function pub() { + if (this._pubBytes) + return this.eddsa.decodePoint(this._pubBytes); + return this.eddsa.g.mul(this.priv()); +}); + +cachedProperty(KeyPair, 'privBytes', function privBytes() { + var eddsa = this.eddsa; + var hash = this.hash(); + var lastIx = eddsa.encodingLength - 1; + + var a = hash.slice(0, eddsa.encodingLength); + a[0] &= 248; + a[lastIx] &= 127; + a[lastIx] |= 64; + + return a; +}); + +cachedProperty(KeyPair, 'priv', function priv() { + return this.eddsa.decodeInt(this.privBytes()); +}); + +cachedProperty(KeyPair, 'hash', function hash() { + return this.eddsa.hash().update(this.secret()).digest(); +}); + +cachedProperty(KeyPair, 'messagePrefix', function messagePrefix() { + return this.hash().slice(this.eddsa.encodingLength); +}); + +KeyPair.prototype.sign = function sign(message) { + assert(this._secret, 'KeyPair can only verify'); + return this.eddsa.sign(message, this); +}; + +KeyPair.prototype.verify = function verify(message, sig) { + return this.eddsa.verify(message, sig, this); +}; + +KeyPair.prototype.getSecret = function getSecret(enc) { + assert(this._secret, 'KeyPair is public only'); + return utils.encode(this.secret(), enc); +}; + +KeyPair.prototype.getPublic = function getPublic(enc) { + return utils.encode(this.pubBytes(), enc); +}; + +module.exports = KeyPair; + + +}, +70591(module, __unused_webpack_exports, __webpack_require__) { +"use strict"; + + +var BN = __webpack_require__(91939); +var utils = __webpack_require__(67156); +var assert = utils.assert; +var cachedProperty = utils.cachedProperty; +var parseBytes = utils.parseBytes; + +/** +* @param {EDDSA} eddsa - eddsa instance +* @param {Array|Object} sig - +* @param {Array|Point} [sig.R] - R point as Point or bytes +* @param {Array|bn} [sig.S] - S scalar as bn or bytes +* @param {Array} [sig.Rencoded] - R point encoded +* @param {Array} [sig.Sencoded] - S scalar encoded +*/ +function Signature(eddsa, sig) { + this.eddsa = eddsa; + + if (typeof sig !== 'object') + sig = parseBytes(sig); + + if (Array.isArray(sig)) { + assert(sig.length === eddsa.encodingLength * 2, 'Signature has invalid size'); + sig = { + R: sig.slice(0, eddsa.encodingLength), + S: sig.slice(eddsa.encodingLength), + }; + } + + assert(sig.R && sig.S, 'Signature without R or S'); + + if (eddsa.isPoint(sig.R)) + this._R = sig.R; + if (sig.S instanceof BN) + this._S = sig.S; + + this._Rencoded = Array.isArray(sig.R) ? sig.R : sig.Rencoded; + this._Sencoded = Array.isArray(sig.S) ? sig.S : sig.Sencoded; +} + +cachedProperty(Signature, 'S', function S() { + return this.eddsa.decodeInt(this.Sencoded()); +}); + +cachedProperty(Signature, 'R', function R() { + return this.eddsa.decodePoint(this.Rencoded()); +}); + +cachedProperty(Signature, 'Rencoded', function Rencoded() { + return this.eddsa.encodePoint(this.R()); +}); + +cachedProperty(Signature, 'Sencoded', function Sencoded() { + return this.eddsa.encodeInt(this.S()); +}); + +Signature.prototype.toBytes = function toBytes() { + return this.Rencoded().concat(this.Sencoded()); +}; + +Signature.prototype.toHex = function toHex() { + return utils.encode(this.toBytes(), 'hex').toUpperCase(); +}; + +module.exports = Signature; + + +}, +74236(module) { +module.exports = { + doubles: { + step: 4, + points: [ + [ + 'e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a', + 'f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821', + ], + [ + '8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508', + '11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf', + ], + [ + '175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739', + 'd3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695', + ], + [ + '363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640', + '4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9', + ], + [ + '8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c', + '4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36', + ], + [ + '723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda', + '96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f', + ], + [ + 'eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa', + '5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999', + ], + [ + '100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0', + 'cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09', + ], + [ + 'e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d', + '9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d', + ], + [ + 'feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d', + 'e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088', + ], + [ + 'da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1', + '9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d', + ], + [ + '53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0', + '5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8', + ], + [ + '8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047', + '10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a', + ], + [ + '385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862', + '283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453', + ], + [ + '6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7', + '7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160', + ], + [ + '3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd', + '56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0', + ], + [ + '85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83', + '7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6', + ], + [ + '948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a', + '53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589', + ], + [ + '6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8', + 'bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17', + ], + [ + 'e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d', + '4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda', + ], + [ + 'e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725', + '7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd', + ], + [ + '213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754', + '4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2', + ], + [ + '4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c', + '17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6', + ], + [ + 'fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6', + '6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f', + ], + [ + '76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39', + 'c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01', + ], + [ + 'c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891', + '893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3', + ], + [ + 'd895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b', + 'febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f', + ], + [ + 'b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03', + '2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7', + ], + [ + 'e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d', + 'eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78', + ], + [ + 'a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070', + '7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1', + ], + [ + '90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4', + 'e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150', + ], + [ + '8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da', + '662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82', + ], + [ + 'e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11', + '1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc', + ], + [ + '8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e', + 'efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b', + ], + [ + 'e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41', + '2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51', + ], + [ + 'b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef', + '67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45', + ], + [ + 'd68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8', + 'db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120', + ], + [ + '324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d', + '648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84', + ], + [ + '4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96', + '35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d', + ], + [ + '9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd', + 'ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d', + ], + [ + '6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5', + '9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8', + ], + [ + 'a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266', + '40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8', + ], + [ + '7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71', + '34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac', + ], + [ + '928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac', + 'c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f', + ], + [ + '85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751', + '1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962', + ], + [ + 'ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e', + '493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907', + ], + [ + '827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241', + 'c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec', + ], + [ + 'eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3', + 'be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d', + ], + [ + 'e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f', + '4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414', + ], + [ + '1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19', + 'aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd', + ], + [ + '146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be', + 'b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0', + ], + [ + 'fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9', + '6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811', + ], + [ + 'da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2', + '8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1', + ], + [ + 'a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13', + '7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c', + ], + [ + '174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c', + 'ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73', + ], + [ + '959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba', + '2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd', + ], + [ + 'd2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151', + 'e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405', + ], + [ + '64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073', + 'd99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589', + ], + [ + '8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458', + '38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e', + ], + [ + '13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b', + '69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27', + ], + [ + 'bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366', + 'd3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1', + ], + [ + '8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa', + '40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482', + ], + [ + '8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0', + '620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945', + ], + [ + 'dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787', + '7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573', + ], + [ + 'f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e', + 'ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82', + ], + ], + }, + naf: { + wnd: 7, + points: [ + [ + 'f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9', + '388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672', + ], + [ + '2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4', + 'd8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6', + ], + [ + '5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc', + '6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da', + ], + [ + 'acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe', + 'cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37', + ], + [ + '774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb', + 'd984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b', + ], + [ + 'f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8', + 'ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81', + ], + [ + 'd7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e', + '581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58', + ], + [ + 'defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34', + '4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77', + ], + [ + '2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c', + '85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a', + ], + [ + '352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5', + '321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c', + ], + [ + '2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f', + '2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67', + ], + [ + '9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714', + '73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402', + ], + [ + 'daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729', + 'a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55', + ], + [ + 'c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db', + '2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482', + ], + [ + '6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4', + 'e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82', + ], + [ + '1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5', + 'b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396', + ], + [ + '605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479', + '2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49', + ], + [ + '62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d', + '80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf', + ], + [ + '80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f', + '1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a', + ], + [ + '7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb', + 'd0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7', + ], + [ + 'd528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9', + 'eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933', + ], + [ + '49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963', + '758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a', + ], + [ + '77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74', + '958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6', + ], + [ + 'f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530', + 'e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37', + ], + [ + '463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b', + '5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e', + ], + [ + 'f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247', + 'cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6', + ], + [ + 'caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1', + 'cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476', + ], + [ + '2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120', + '4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40', + ], + [ + '7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435', + '91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61', + ], + [ + '754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18', + '673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683', + ], + [ + 'e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8', + '59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5', + ], + [ + '186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb', + '3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b', + ], + [ + 'df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f', + '55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417', + ], + [ + '5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143', + 'efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868', + ], + [ + '290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba', + 'e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a', + ], + [ + 'af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45', + 'f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6', + ], + [ + '766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a', + '744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996', + ], + [ + '59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e', + 'c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e', + ], + [ + 'f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8', + 'e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d', + ], + [ + '7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c', + '30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2', + ], + [ + '948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519', + 'e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e', + ], + [ + '7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab', + '100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437', + ], + [ + '3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca', + 'ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311', + ], + [ + 'd3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf', + '8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4', + ], + [ + '1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610', + '68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575', + ], + [ + '733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4', + 'f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d', + ], + [ + '15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c', + 'd56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d', + ], + [ + 'a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940', + 'edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629', + ], + [ + 'e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980', + 'a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06', + ], + [ + '311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3', + '66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374', + ], + [ + '34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf', + '9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee', + ], + [ + 'f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63', + '4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1', + ], + [ + 'd7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448', + 'fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b', + ], + [ + '32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf', + '5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661', + ], + [ + '7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5', + '8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6', + ], + [ + 'ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6', + '8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e', + ], + [ + '16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5', + '5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d', + ], + [ + 'eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99', + 'f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc', + ], + [ + '78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51', + 'f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4', + ], + [ + '494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5', + '42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c', + ], + [ + 'a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5', + '204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b', + ], + [ + 'c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997', + '4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913', + ], + [ + '841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881', + '73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154', + ], + [ + '5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5', + '39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865', + ], + [ + '36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66', + 'd2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc', + ], + [ + '336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726', + 'ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224', + ], + [ + '8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede', + '6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e', + ], + [ + '1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94', + '60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6', + ], + [ + '85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31', + '3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511', + ], + [ + '29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51', + 'b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b', + ], + [ + 'a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252', + 'ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2', + ], + [ + '4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5', + 'cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c', + ], + [ + 'd24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b', + '6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3', + ], + [ + 'ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4', + '322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d', + ], + [ + 'af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f', + '6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700', + ], + [ + 'e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889', + '2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4', + ], + [ + '591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246', + 'b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196', + ], + [ + '11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984', + '998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4', + ], + [ + '3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a', + 'b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257', + ], + [ + 'cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030', + 'bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13', + ], + [ + 'c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197', + '6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096', + ], + [ + 'c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593', + 'c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38', + ], + [ + 'a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef', + '21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f', + ], + [ + '347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38', + '60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448', + ], + [ + 'da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a', + '49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a', + ], + [ + 'c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111', + '5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4', + ], + [ + '4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502', + '7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437', + ], + [ + '3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea', + 'be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7', + ], + [ + 'cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26', + '8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d', + ], + [ + 'b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986', + '39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a', + ], + [ + 'd4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e', + '62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54', + ], + [ + '48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4', + '25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77', + ], + [ + 'dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda', + 'ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517', + ], + [ + '6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859', + 'cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10', + ], + [ + 'e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f', + 'f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125', + ], + [ + 'eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c', + '6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e', + ], + [ + '13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942', + 'fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1', + ], + [ + 'ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a', + '1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2', + ], + [ + 'b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80', + '5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423', + ], + [ + 'ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d', + '438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8', + ], + [ + '8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1', + 'cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758', + ], + [ + '52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63', + 'c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375', + ], + [ + 'e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352', + '6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d', + ], + [ + '7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193', + 'ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec', + ], + [ + '5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00', + '9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0', + ], + [ + '32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58', + 'ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c', + ], + [ + 'e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7', + 'd3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4', + ], + [ + '8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8', + 'c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f', + ], + [ + '4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e', + '67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649', + ], + [ + '3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d', + 'cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826', + ], + [ + '674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b', + '299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5', + ], + [ + 'd32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f', + 'f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87', + ], + [ + '30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6', + '462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b', + ], + [ + 'be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297', + '62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc', + ], + [ + '93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a', + '7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c', + ], + [ + 'b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c', + 'ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f', + ], + [ + 'd5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52', + '4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a', + ], + [ + 'd3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb', + 'bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46', + ], + [ + '463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065', + 'bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f', + ], + [ + '7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917', + '603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03', + ], + [ + '74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9', + 'cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08', + ], + [ + '30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3', + '553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8', + ], + [ + '9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57', + '712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373', + ], + [ + '176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66', + 'ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3', + ], + [ + '75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8', + '9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8', + ], + [ + '809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721', + '9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1', + ], + [ + '1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180', + '4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9', + ], + ], + }, +}; + + +}, +67156(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; + + +var utils = exports; +var BN = __webpack_require__(91939); +var minAssert = __webpack_require__(77285); +var minUtils = __webpack_require__(6250); + +utils.assert = minAssert; +utils.toArray = minUtils.toArray; +utils.zero2 = minUtils.zero2; +utils.toHex = minUtils.toHex; +utils.encode = minUtils.encode; + +// Represent num in a w-NAF form +function getNAF(num, w, bits) { + var naf = new Array(Math.max(num.bitLength(), bits) + 1); + var i; + for (i = 0; i < naf.length; i += 1) { + naf[i] = 0; + } + + var ws = 1 << (w + 1); + var k = num.clone(); + + for (i = 0; i < naf.length; i++) { + var z; + var mod = k.andln(ws - 1); + if (k.isOdd()) { + if (mod > (ws >> 1) - 1) + z = (ws >> 1) - mod; + else + z = mod; + k.isubn(z); + } else { + z = 0; + } + + naf[i] = z; + k.iushrn(1); + } + + return naf; +} +utils.getNAF = getNAF; + +// Represent k1, k2 in a Joint Sparse Form +function getJSF(k1, k2) { + var jsf = [ + [], + [], + ]; + + k1 = k1.clone(); + k2 = k2.clone(); + var d1 = 0; + var d2 = 0; + var m8; + while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) { + // First phase + var m14 = (k1.andln(3) + d1) & 3; + var m24 = (k2.andln(3) + d2) & 3; + if (m14 === 3) + m14 = -1; + if (m24 === 3) + m24 = -1; + var u1; + if ((m14 & 1) === 0) { + u1 = 0; + } else { + m8 = (k1.andln(7) + d1) & 7; + if ((m8 === 3 || m8 === 5) && m24 === 2) + u1 = -m14; + else + u1 = m14; + } + jsf[0].push(u1); + + var u2; + if ((m24 & 1) === 0) { + u2 = 0; + } else { + m8 = (k2.andln(7) + d2) & 7; + if ((m8 === 3 || m8 === 5) && m14 === 2) + u2 = -m24; + else + u2 = m24; + } + jsf[1].push(u2); + + // Second phase + if (2 * d1 === u1 + 1) + d1 = 1 - d1; + if (2 * d2 === u2 + 1) + d2 = 1 - d2; + k1.iushrn(1); + k2.iushrn(1); + } + + return jsf; +} +utils.getJSF = getJSF; + +function cachedProperty(obj, name, computer) { + var key = '_' + name; + obj.prototype[name] = function cachedProperty() { + return this[key] !== undefined ? this[key] : + this[key] = computer.call(this); + }; +} +utils.cachedProperty = cachedProperty; + +function parseBytes(bytes) { + return typeof bytes === 'string' ? utils.toArray(bytes, 'hex') : + bytes; +} +utils.parseBytes = parseBytes; + +function intFromLE(bytes) { + return new BN(bytes, 'hex', 'le'); +} +utils.intFromLE = intFromLE; + + + +}, +32932(module) { +(function webpackUniversalModuleDefinition(root, factory) { +/* istanbul ignore next */ + if(true) + module.exports = factory(); + else {} +})(this, function() { +return /******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; + +/******/ // The require function +/******/ function __nested_webpack_require_583__(moduleId) { + +/******/ // Check if module is in cache +/* istanbul ignore if */ +/******/ if(installedModules[moduleId]) +/******/ return installedModules[moduleId].exports; + +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ exports: {}, +/******/ id: moduleId, +/******/ loaded: false +/******/ }; + +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __nested_webpack_require_583__); + +/******/ // Flag the module as loaded +/******/ module.loaded = true; + +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } + + +/******/ // expose the modules object (__webpack_modules__) +/******/ __nested_webpack_require_583__.m = modules; + +/******/ // expose the module cache +/******/ __nested_webpack_require_583__.c = installedModules; + +/******/ // __webpack_public_path__ +/******/ __nested_webpack_require_583__.p = ""; + +/******/ // Load entry module and return exports +/******/ return __nested_webpack_require_583__(0); +/******/ }) +/************************************************************************/ +/******/ ([ +/* 0 */ +/***/ function(module, exports, __nested_webpack_require_1808_1827__) { + + "use strict"; + /* + Copyright JS Foundation and other contributors, https://js.foundation/ + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY + DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + Object.defineProperty(exports, "__esModule", { value: true }); + var comment_handler_1 = __nested_webpack_require_1808_1827__(1); + var jsx_parser_1 = __nested_webpack_require_1808_1827__(3); + var parser_1 = __nested_webpack_require_1808_1827__(8); + var tokenizer_1 = __nested_webpack_require_1808_1827__(15); + function parse(code, options, delegate) { + var commentHandler = null; + var proxyDelegate = function (node, metadata) { + if (delegate) { + delegate(node, metadata); + } + if (commentHandler) { + commentHandler.visit(node, metadata); + } + }; + var parserDelegate = (typeof delegate === 'function') ? proxyDelegate : null; + var collectComment = false; + if (options) { + collectComment = (typeof options.comment === 'boolean' && options.comment); + var attachComment = (typeof options.attachComment === 'boolean' && options.attachComment); + if (collectComment || attachComment) { + commentHandler = new comment_handler_1.CommentHandler(); + commentHandler.attach = attachComment; + options.comment = true; + parserDelegate = proxyDelegate; + } + } + var isModule = false; + if (options && typeof options.sourceType === 'string') { + isModule = (options.sourceType === 'module'); + } + var parser; + if (options && typeof options.jsx === 'boolean' && options.jsx) { + parser = new jsx_parser_1.JSXParser(code, options, parserDelegate); + } + else { + parser = new parser_1.Parser(code, options, parserDelegate); + } + var program = isModule ? parser.parseModule() : parser.parseScript(); + var ast = program; + if (collectComment && commentHandler) { + ast.comments = commentHandler.comments; + } + if (parser.config.tokens) { + ast.tokens = parser.tokens; + } + if (parser.config.tolerant) { + ast.errors = parser.errorHandler.errors; + } + return ast; + } + exports.parse = parse; + function parseModule(code, options, delegate) { + var parsingOptions = options || {}; + parsingOptions.sourceType = 'module'; + return parse(code, parsingOptions, delegate); + } + exports.parseModule = parseModule; + function parseScript(code, options, delegate) { + var parsingOptions = options || {}; + parsingOptions.sourceType = 'script'; + return parse(code, parsingOptions, delegate); + } + exports.parseScript = parseScript; + function tokenize(code, options, delegate) { + var tokenizer = new tokenizer_1.Tokenizer(code, options); + var tokens; + tokens = []; + try { + while (true) { + var token = tokenizer.getNextToken(); + if (!token) { + break; + } + if (delegate) { + token = delegate(token); + } + tokens.push(token); + } + } + catch (e) { + tokenizer.errorHandler.tolerate(e); + } + if (tokenizer.errorHandler.tolerant) { + tokens.errors = tokenizer.errors(); + } + return tokens; + } + exports.tokenize = tokenize; + var syntax_1 = __nested_webpack_require_1808_1827__(2); + exports.Syntax = syntax_1.Syntax; + // Sync with *.json manifests. + exports.version = '4.0.1'; + + +/***/ }, +/* 1 */ +/***/ function(module, exports, __nested_webpack_require_6456_6475__) { + + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + var syntax_1 = __nested_webpack_require_6456_6475__(2); + var CommentHandler = (function () { + function CommentHandler() { + this.attach = false; + this.comments = []; + this.stack = []; + this.leading = []; + this.trailing = []; + } + CommentHandler.prototype.insertInnerComments = function (node, metadata) { + // innnerComments for properties empty block + // `function a() {/** comments **\/}` + if (node.type === syntax_1.Syntax.BlockStatement && node.body.length === 0) { + var innerComments = []; + for (var i = this.leading.length - 1; i >= 0; --i) { + var entry = this.leading[i]; + if (metadata.end.offset >= entry.start) { + innerComments.unshift(entry.comment); + this.leading.splice(i, 1); + this.trailing.splice(i, 1); + } + } + if (innerComments.length) { + node.innerComments = innerComments; + } + } + }; + CommentHandler.prototype.findTrailingComments = function (metadata) { + var trailingComments = []; + if (this.trailing.length > 0) { + for (var i = this.trailing.length - 1; i >= 0; --i) { + var entry_1 = this.trailing[i]; + if (entry_1.start >= metadata.end.offset) { + trailingComments.unshift(entry_1.comment); + } + } + this.trailing.length = 0; + return trailingComments; + } + var entry = this.stack[this.stack.length - 1]; + if (entry && entry.node.trailingComments) { + var firstComment = entry.node.trailingComments[0]; + if (firstComment && firstComment.range[0] >= metadata.end.offset) { + trailingComments = entry.node.trailingComments; + delete entry.node.trailingComments; + } + } + return trailingComments; + }; + CommentHandler.prototype.findLeadingComments = function (metadata) { + var leadingComments = []; + var target; + while (this.stack.length > 0) { + var entry = this.stack[this.stack.length - 1]; + if (entry && entry.start >= metadata.start.offset) { + target = entry.node; + this.stack.pop(); + } + else { + break; + } + } + if (target) { + var count = target.leadingComments ? target.leadingComments.length : 0; + for (var i = count - 1; i >= 0; --i) { + var comment = target.leadingComments[i]; + if (comment.range[1] <= metadata.start.offset) { + leadingComments.unshift(comment); + target.leadingComments.splice(i, 1); + } + } + if (target.leadingComments && target.leadingComments.length === 0) { + delete target.leadingComments; + } + return leadingComments; + } + for (var i = this.leading.length - 1; i >= 0; --i) { + var entry = this.leading[i]; + if (entry.start <= metadata.start.offset) { + leadingComments.unshift(entry.comment); + this.leading.splice(i, 1); + } + } + return leadingComments; + }; + CommentHandler.prototype.visitNode = function (node, metadata) { + if (node.type === syntax_1.Syntax.Program && node.body.length > 0) { + return; + } + this.insertInnerComments(node, metadata); + var trailingComments = this.findTrailingComments(metadata); + var leadingComments = this.findLeadingComments(metadata); + if (leadingComments.length > 0) { + node.leadingComments = leadingComments; + } + if (trailingComments.length > 0) { + node.trailingComments = trailingComments; + } + this.stack.push({ + node: node, + start: metadata.start.offset + }); + }; + CommentHandler.prototype.visitComment = function (node, metadata) { + var type = (node.type[0] === 'L') ? 'Line' : 'Block'; + var comment = { + type: type, + value: node.value + }; + if (node.range) { + comment.range = node.range; + } + if (node.loc) { + comment.loc = node.loc; + } + this.comments.push(comment); + if (this.attach) { + var entry = { + comment: { + type: type, + value: node.value, + range: [metadata.start.offset, metadata.end.offset] + }, + start: metadata.start.offset + }; + if (node.loc) { + entry.comment.loc = node.loc; + } + node.type = type; + this.leading.push(entry); + this.trailing.push(entry); + } + }; + CommentHandler.prototype.visit = function (node, metadata) { + if (node.type === 'LineComment') { + this.visitComment(node, metadata); + } + else if (node.type === 'BlockComment') { + this.visitComment(node, metadata); + } + else if (this.attach) { + this.visitNode(node, metadata); + } + }; + return CommentHandler; + }()); + exports.CommentHandler = CommentHandler; + + +/***/ }, +/* 2 */ +/***/ function(module, exports) { + + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.Syntax = { + AssignmentExpression: 'AssignmentExpression', + AssignmentPattern: 'AssignmentPattern', + ArrayExpression: 'ArrayExpression', + ArrayPattern: 'ArrayPattern', + ArrowFunctionExpression: 'ArrowFunctionExpression', + AwaitExpression: 'AwaitExpression', + BlockStatement: 'BlockStatement', + BinaryExpression: 'BinaryExpression', + BreakStatement: 'BreakStatement', + CallExpression: 'CallExpression', + CatchClause: 'CatchClause', + ClassBody: 'ClassBody', + ClassDeclaration: 'ClassDeclaration', + ClassExpression: 'ClassExpression', + ConditionalExpression: 'ConditionalExpression', + ContinueStatement: 'ContinueStatement', + DoWhileStatement: 'DoWhileStatement', + DebuggerStatement: 'DebuggerStatement', + EmptyStatement: 'EmptyStatement', + ExportAllDeclaration: 'ExportAllDeclaration', + ExportDefaultDeclaration: 'ExportDefaultDeclaration', + ExportNamedDeclaration: 'ExportNamedDeclaration', + ExportSpecifier: 'ExportSpecifier', + ExpressionStatement: 'ExpressionStatement', + ForStatement: 'ForStatement', + ForOfStatement: 'ForOfStatement', + ForInStatement: 'ForInStatement', + FunctionDeclaration: 'FunctionDeclaration', + FunctionExpression: 'FunctionExpression', + Identifier: 'Identifier', + IfStatement: 'IfStatement', + ImportDeclaration: 'ImportDeclaration', + ImportDefaultSpecifier: 'ImportDefaultSpecifier', + ImportNamespaceSpecifier: 'ImportNamespaceSpecifier', + ImportSpecifier: 'ImportSpecifier', + Literal: 'Literal', + LabeledStatement: 'LabeledStatement', + LogicalExpression: 'LogicalExpression', + MemberExpression: 'MemberExpression', + MetaProperty: 'MetaProperty', + MethodDefinition: 'MethodDefinition', + NewExpression: 'NewExpression', + ObjectExpression: 'ObjectExpression', + ObjectPattern: 'ObjectPattern', + Program: 'Program', + Property: 'Property', + RestElement: 'RestElement', + ReturnStatement: 'ReturnStatement', + SequenceExpression: 'SequenceExpression', + SpreadElement: 'SpreadElement', + Super: 'Super', + SwitchCase: 'SwitchCase', + SwitchStatement: 'SwitchStatement', + TaggedTemplateExpression: 'TaggedTemplateExpression', + TemplateElement: 'TemplateElement', + TemplateLiteral: 'TemplateLiteral', + ThisExpression: 'ThisExpression', + ThrowStatement: 'ThrowStatement', + TryStatement: 'TryStatement', + UnaryExpression: 'UnaryExpression', + UpdateExpression: 'UpdateExpression', + VariableDeclaration: 'VariableDeclaration', + VariableDeclarator: 'VariableDeclarator', + WhileStatement: 'WhileStatement', + WithStatement: 'WithStatement', + YieldExpression: 'YieldExpression' + }; + + +/***/ }, +/* 3 */ +/***/ function(module, exports, __nested_webpack_require_15019_15038__) { + + "use strict"; +/* istanbul ignore next */ + var __extends = (this && this.__extends) || (function () { + var extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; + })(); + Object.defineProperty(exports, "__esModule", { value: true }); + var character_1 = __nested_webpack_require_15019_15038__(4); + var JSXNode = __nested_webpack_require_15019_15038__(5); + var jsx_syntax_1 = __nested_webpack_require_15019_15038__(6); + var Node = __nested_webpack_require_15019_15038__(7); + var parser_1 = __nested_webpack_require_15019_15038__(8); + var token_1 = __nested_webpack_require_15019_15038__(13); + var xhtml_entities_1 = __nested_webpack_require_15019_15038__(14); + token_1.TokenName[100 /* Identifier */] = 'JSXIdentifier'; + token_1.TokenName[101 /* Text */] = 'JSXText'; + // Fully qualified element name, e.g. returns "svg:path" + function getQualifiedElementName(elementName) { + var qualifiedName; + switch (elementName.type) { + case jsx_syntax_1.JSXSyntax.JSXIdentifier: + var id = elementName; + qualifiedName = id.name; + break; + case jsx_syntax_1.JSXSyntax.JSXNamespacedName: + var ns = elementName; + qualifiedName = getQualifiedElementName(ns.namespace) + ':' + + getQualifiedElementName(ns.name); + break; + case jsx_syntax_1.JSXSyntax.JSXMemberExpression: + var expr = elementName; + qualifiedName = getQualifiedElementName(expr.object) + '.' + + getQualifiedElementName(expr.property); + break; + /* istanbul ignore next */ + default: + break; + } + return qualifiedName; + } + var JSXParser = (function (_super) { + __extends(JSXParser, _super); + function JSXParser(code, options, delegate) { + return _super.call(this, code, options, delegate) || this; + } + JSXParser.prototype.parsePrimaryExpression = function () { + return this.match('<') ? this.parseJSXRoot() : _super.prototype.parsePrimaryExpression.call(this); + }; + JSXParser.prototype.startJSX = function () { + // Unwind the scanner before the lookahead token. + this.scanner.index = this.startMarker.index; + this.scanner.lineNumber = this.startMarker.line; + this.scanner.lineStart = this.startMarker.index - this.startMarker.column; + }; + JSXParser.prototype.finishJSX = function () { + // Prime the next lookahead. + this.nextToken(); + }; + JSXParser.prototype.reenterJSX = function () { + this.startJSX(); + this.expectJSX('}'); + // Pop the closing '}' added from the lookahead. + if (this.config.tokens) { + this.tokens.pop(); + } + }; + JSXParser.prototype.createJSXNode = function () { + this.collectComments(); + return { + index: this.scanner.index, + line: this.scanner.lineNumber, + column: this.scanner.index - this.scanner.lineStart + }; + }; + JSXParser.prototype.createJSXChildNode = function () { + return { + index: this.scanner.index, + line: this.scanner.lineNumber, + column: this.scanner.index - this.scanner.lineStart + }; + }; + JSXParser.prototype.scanXHTMLEntity = function (quote) { + var result = '&'; + var valid = true; + var terminated = false; + var numeric = false; + var hex = false; + while (!this.scanner.eof() && valid && !terminated) { + var ch = this.scanner.source[this.scanner.index]; + if (ch === quote) { + break; + } + terminated = (ch === ';'); + result += ch; + ++this.scanner.index; + if (!terminated) { + switch (result.length) { + case 2: + // e.g. '{' + numeric = (ch === '#'); + break; + case 3: + if (numeric) { + // e.g. 'A' + hex = (ch === 'x'); + valid = hex || character_1.Character.isDecimalDigit(ch.charCodeAt(0)); + numeric = numeric && !hex; + } + break; + default: + valid = valid && !(numeric && !character_1.Character.isDecimalDigit(ch.charCodeAt(0))); + valid = valid && !(hex && !character_1.Character.isHexDigit(ch.charCodeAt(0))); + break; + } + } + } + if (valid && terminated && result.length > 2) { + // e.g. 'A' becomes just '#x41' + var str = result.substr(1, result.length - 2); + if (numeric && str.length > 1) { + result = String.fromCharCode(parseInt(str.substr(1), 10)); + } + else if (hex && str.length > 2) { + result = String.fromCharCode(parseInt('0' + str.substr(1), 16)); + } + else if (!numeric && !hex && xhtml_entities_1.XHTMLEntities[str]) { + result = xhtml_entities_1.XHTMLEntities[str]; + } + } + return result; + }; + // Scan the next JSX token. This replaces Scanner#lex when in JSX mode. + JSXParser.prototype.lexJSX = function () { + var cp = this.scanner.source.charCodeAt(this.scanner.index); + // < > / : = { } + if (cp === 60 || cp === 62 || cp === 47 || cp === 58 || cp === 61 || cp === 123 || cp === 125) { + var value = this.scanner.source[this.scanner.index++]; + return { + type: 7 /* Punctuator */, + value: value, + lineNumber: this.scanner.lineNumber, + lineStart: this.scanner.lineStart, + start: this.scanner.index - 1, + end: this.scanner.index + }; + } + // " ' + if (cp === 34 || cp === 39) { + var start = this.scanner.index; + var quote = this.scanner.source[this.scanner.index++]; + var str = ''; + while (!this.scanner.eof()) { + var ch = this.scanner.source[this.scanner.index++]; + if (ch === quote) { + break; + } + else if (ch === '&') { + str += this.scanXHTMLEntity(quote); + } + else { + str += ch; + } + } + return { + type: 8 /* StringLiteral */, + value: str, + lineNumber: this.scanner.lineNumber, + lineStart: this.scanner.lineStart, + start: start, + end: this.scanner.index + }; + } + // ... or . + if (cp === 46) { + var n1 = this.scanner.source.charCodeAt(this.scanner.index + 1); + var n2 = this.scanner.source.charCodeAt(this.scanner.index + 2); + var value = (n1 === 46 && n2 === 46) ? '...' : '.'; + var start = this.scanner.index; + this.scanner.index += value.length; + return { + type: 7 /* Punctuator */, + value: value, + lineNumber: this.scanner.lineNumber, + lineStart: this.scanner.lineStart, + start: start, + end: this.scanner.index + }; + } + // ` + if (cp === 96) { + // Only placeholder, since it will be rescanned as a real assignment expression. + return { + type: 10 /* Template */, + value: '', + lineNumber: this.scanner.lineNumber, + lineStart: this.scanner.lineStart, + start: this.scanner.index, + end: this.scanner.index + }; + } + // Identifer can not contain backslash (char code 92). + if (character_1.Character.isIdentifierStart(cp) && (cp !== 92)) { + var start = this.scanner.index; + ++this.scanner.index; + while (!this.scanner.eof()) { + var ch = this.scanner.source.charCodeAt(this.scanner.index); + if (character_1.Character.isIdentifierPart(ch) && (ch !== 92)) { + ++this.scanner.index; + } + else if (ch === 45) { + // Hyphen (char code 45) can be part of an identifier. + ++this.scanner.index; + } + else { + break; + } + } + var id = this.scanner.source.slice(start, this.scanner.index); + return { + type: 100 /* Identifier */, + value: id, + lineNumber: this.scanner.lineNumber, + lineStart: this.scanner.lineStart, + start: start, + end: this.scanner.index + }; + } + return this.scanner.lex(); + }; + JSXParser.prototype.nextJSXToken = function () { + this.collectComments(); + this.startMarker.index = this.scanner.index; + this.startMarker.line = this.scanner.lineNumber; + this.startMarker.column = this.scanner.index - this.scanner.lineStart; + var token = this.lexJSX(); + this.lastMarker.index = this.scanner.index; + this.lastMarker.line = this.scanner.lineNumber; + this.lastMarker.column = this.scanner.index - this.scanner.lineStart; + if (this.config.tokens) { + this.tokens.push(this.convertToken(token)); + } + return token; + }; + JSXParser.prototype.nextJSXText = function () { + this.startMarker.index = this.scanner.index; + this.startMarker.line = this.scanner.lineNumber; + this.startMarker.column = this.scanner.index - this.scanner.lineStart; + var start = this.scanner.index; + var text = ''; + while (!this.scanner.eof()) { + var ch = this.scanner.source[this.scanner.index]; + if (ch === '{' || ch === '<') { + break; + } + ++this.scanner.index; + text += ch; + if (character_1.Character.isLineTerminator(ch.charCodeAt(0))) { + ++this.scanner.lineNumber; + if (ch === '\r' && this.scanner.source[this.scanner.index] === '\n') { + ++this.scanner.index; + } + this.scanner.lineStart = this.scanner.index; + } + } + this.lastMarker.index = this.scanner.index; + this.lastMarker.line = this.scanner.lineNumber; + this.lastMarker.column = this.scanner.index - this.scanner.lineStart; + var token = { + type: 101 /* Text */, + value: text, + lineNumber: this.scanner.lineNumber, + lineStart: this.scanner.lineStart, + start: start, + end: this.scanner.index + }; + if ((text.length > 0) && this.config.tokens) { + this.tokens.push(this.convertToken(token)); + } + return token; + }; + JSXParser.prototype.peekJSXToken = function () { + var state = this.scanner.saveState(); + this.scanner.scanComments(); + var next = this.lexJSX(); + this.scanner.restoreState(state); + return next; + }; + // Expect the next JSX token to match the specified punctuator. + // If not, an exception will be thrown. + JSXParser.prototype.expectJSX = function (value) { + var token = this.nextJSXToken(); + if (token.type !== 7 /* Punctuator */ || token.value !== value) { + this.throwUnexpectedToken(token); + } + }; + // Return true if the next JSX token matches the specified punctuator. + JSXParser.prototype.matchJSX = function (value) { + var next = this.peekJSXToken(); + return next.type === 7 /* Punctuator */ && next.value === value; + }; + JSXParser.prototype.parseJSXIdentifier = function () { + var node = this.createJSXNode(); + var token = this.nextJSXToken(); + if (token.type !== 100 /* Identifier */) { + this.throwUnexpectedToken(token); + } + return this.finalize(node, new JSXNode.JSXIdentifier(token.value)); + }; + JSXParser.prototype.parseJSXElementName = function () { + var node = this.createJSXNode(); + var elementName = this.parseJSXIdentifier(); + if (this.matchJSX(':')) { + var namespace = elementName; + this.expectJSX(':'); + var name_1 = this.parseJSXIdentifier(); + elementName = this.finalize(node, new JSXNode.JSXNamespacedName(namespace, name_1)); + } + else if (this.matchJSX('.')) { + while (this.matchJSX('.')) { + var object = elementName; + this.expectJSX('.'); + var property = this.parseJSXIdentifier(); + elementName = this.finalize(node, new JSXNode.JSXMemberExpression(object, property)); + } + } + return elementName; + }; + JSXParser.prototype.parseJSXAttributeName = function () { + var node = this.createJSXNode(); + var attributeName; + var identifier = this.parseJSXIdentifier(); + if (this.matchJSX(':')) { + var namespace = identifier; + this.expectJSX(':'); + var name_2 = this.parseJSXIdentifier(); + attributeName = this.finalize(node, new JSXNode.JSXNamespacedName(namespace, name_2)); + } + else { + attributeName = identifier; + } + return attributeName; + }; + JSXParser.prototype.parseJSXStringLiteralAttribute = function () { + var node = this.createJSXNode(); + var token = this.nextJSXToken(); + if (token.type !== 8 /* StringLiteral */) { + this.throwUnexpectedToken(token); + } + var raw = this.getTokenRaw(token); + return this.finalize(node, new Node.Literal(token.value, raw)); + }; + JSXParser.prototype.parseJSXExpressionAttribute = function () { + var node = this.createJSXNode(); + this.expectJSX('{'); + this.finishJSX(); + if (this.match('}')) { + this.tolerateError('JSX attributes must only be assigned a non-empty expression'); + } + var expression = this.parseAssignmentExpression(); + this.reenterJSX(); + return this.finalize(node, new JSXNode.JSXExpressionContainer(expression)); + }; + JSXParser.prototype.parseJSXAttributeValue = function () { + return this.matchJSX('{') ? this.parseJSXExpressionAttribute() : + this.matchJSX('<') ? this.parseJSXElement() : this.parseJSXStringLiteralAttribute(); + }; + JSXParser.prototype.parseJSXNameValueAttribute = function () { + var node = this.createJSXNode(); + var name = this.parseJSXAttributeName(); + var value = null; + if (this.matchJSX('=')) { + this.expectJSX('='); + value = this.parseJSXAttributeValue(); + } + return this.finalize(node, new JSXNode.JSXAttribute(name, value)); + }; + JSXParser.prototype.parseJSXSpreadAttribute = function () { + var node = this.createJSXNode(); + this.expectJSX('{'); + this.expectJSX('...'); + this.finishJSX(); + var argument = this.parseAssignmentExpression(); + this.reenterJSX(); + return this.finalize(node, new JSXNode.JSXSpreadAttribute(argument)); + }; + JSXParser.prototype.parseJSXAttributes = function () { + var attributes = []; + while (!this.matchJSX('/') && !this.matchJSX('>')) { + var attribute = this.matchJSX('{') ? this.parseJSXSpreadAttribute() : + this.parseJSXNameValueAttribute(); + attributes.push(attribute); + } + return attributes; + }; + JSXParser.prototype.parseJSXOpeningElement = function () { + var node = this.createJSXNode(); + this.expectJSX('<'); + var name = this.parseJSXElementName(); + var attributes = this.parseJSXAttributes(); + var selfClosing = this.matchJSX('/'); + if (selfClosing) { + this.expectJSX('/'); + } + this.expectJSX('>'); + return this.finalize(node, new JSXNode.JSXOpeningElement(name, selfClosing, attributes)); + }; + JSXParser.prototype.parseJSXBoundaryElement = function () { + var node = this.createJSXNode(); + this.expectJSX('<'); + if (this.matchJSX('/')) { + this.expectJSX('/'); + var name_3 = this.parseJSXElementName(); + this.expectJSX('>'); + return this.finalize(node, new JSXNode.JSXClosingElement(name_3)); + } + var name = this.parseJSXElementName(); + var attributes = this.parseJSXAttributes(); + var selfClosing = this.matchJSX('/'); + if (selfClosing) { + this.expectJSX('/'); + } + this.expectJSX('>'); + return this.finalize(node, new JSXNode.JSXOpeningElement(name, selfClosing, attributes)); + }; + JSXParser.prototype.parseJSXEmptyExpression = function () { + var node = this.createJSXChildNode(); + this.collectComments(); + this.lastMarker.index = this.scanner.index; + this.lastMarker.line = this.scanner.lineNumber; + this.lastMarker.column = this.scanner.index - this.scanner.lineStart; + return this.finalize(node, new JSXNode.JSXEmptyExpression()); + }; + JSXParser.prototype.parseJSXExpressionContainer = function () { + var node = this.createJSXNode(); + this.expectJSX('{'); + var expression; + if (this.matchJSX('}')) { + expression = this.parseJSXEmptyExpression(); + this.expectJSX('}'); + } + else { + this.finishJSX(); + expression = this.parseAssignmentExpression(); + this.reenterJSX(); + } + return this.finalize(node, new JSXNode.JSXExpressionContainer(expression)); + }; + JSXParser.prototype.parseJSXChildren = function () { + var children = []; + while (!this.scanner.eof()) { + var node = this.createJSXChildNode(); + var token = this.nextJSXText(); + if (token.start < token.end) { + var raw = this.getTokenRaw(token); + var child = this.finalize(node, new JSXNode.JSXText(token.value, raw)); + children.push(child); + } + if (this.scanner.source[this.scanner.index] === '{') { + var container = this.parseJSXExpressionContainer(); + children.push(container); + } + else { + break; + } + } + return children; + }; + JSXParser.prototype.parseComplexJSXElement = function (el) { + var stack = []; + while (!this.scanner.eof()) { + el.children = el.children.concat(this.parseJSXChildren()); + var node = this.createJSXChildNode(); + var element = this.parseJSXBoundaryElement(); + if (element.type === jsx_syntax_1.JSXSyntax.JSXOpeningElement) { + var opening = element; + if (opening.selfClosing) { + var child = this.finalize(node, new JSXNode.JSXElement(opening, [], null)); + el.children.push(child); + } + else { + stack.push(el); + el = { node: node, opening: opening, closing: null, children: [] }; + } + } + if (element.type === jsx_syntax_1.JSXSyntax.JSXClosingElement) { + el.closing = element; + var open_1 = getQualifiedElementName(el.opening.name); + var close_1 = getQualifiedElementName(el.closing.name); + if (open_1 !== close_1) { + this.tolerateError('Expected corresponding JSX closing tag for %0', open_1); + } + if (stack.length > 0) { + var child = this.finalize(el.node, new JSXNode.JSXElement(el.opening, el.children, el.closing)); + el = stack[stack.length - 1]; + el.children.push(child); + stack.pop(); + } + else { + break; + } + } + } + return el; + }; + JSXParser.prototype.parseJSXElement = function () { + var node = this.createJSXNode(); + var opening = this.parseJSXOpeningElement(); + var children = []; + var closing = null; + if (!opening.selfClosing) { + var el = this.parseComplexJSXElement({ node: node, opening: opening, closing: closing, children: children }); + children = el.children; + closing = el.closing; + } + return this.finalize(node, new JSXNode.JSXElement(opening, children, closing)); + }; + JSXParser.prototype.parseJSXRoot = function () { + // Pop the opening '<' added from the lookahead. + if (this.config.tokens) { + this.tokens.pop(); + } + this.startJSX(); + var element = this.parseJSXElement(); + this.finishJSX(); + return element; + }; + JSXParser.prototype.isStartOfExpression = function () { + return _super.prototype.isStartOfExpression.call(this) || this.match('<'); + }; + return JSXParser; + }(parser_1.Parser)); + exports.JSXParser = JSXParser; + + +/***/ }, +/* 4 */ +/***/ function(module, exports) { + + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + // See also tools/generate-unicode-regex.js. + var Regex = { + // Unicode v8.0.0 NonAsciiIdentifierStart: + NonAsciiIdentifierStart: /[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0-\u08B4\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2118-\u211D\u2124\u2126\u2128\u212A-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309B-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FD5\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AD\uA7B0-\uA7B7\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF30-\uDF4A\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC03-\uDC37\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDF00-\uDF19]|\uD806[\uDCA0-\uDCDF\uDCFF\uDEC0-\uDEF8]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50\uDF93-\uDF9F]|\uD82C[\uDC00\uDC01]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD83A[\uDC00-\uDCC4]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1]|\uD87E[\uDC00-\uDE1D]/, + // Unicode v8.0.0 NonAsciiIdentifierPart: + NonAsciiIdentifierPart: /[\xAA\xB5\xB7\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05F0-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u0800-\u082D\u0840-\u085B\u08A0-\u08B4\u08E3-\u0963\u0966-\u096F\u0971-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09F1\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0AF9\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BEF\u0C00-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58-\u0C5A\u0C60-\u0C63\u0C66-\u0C6F\u0C81-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2\u0D01-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D57\u0D5F-\u0D63\u0D66-\u0D6F\u0D7A-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u135F\u1369-\u1371\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u1820-\u1877\u1880-\u18AA\u18B0-\u18F5\u1900-\u191E\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19DA\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1AB0-\u1ABD\u1B00-\u1B4B\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1CD0-\u1CD2\u1CD4-\u1CF6\u1CF8\u1CF9\u1D00-\u1DF5\u1DFC-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u200C\u200D\u203F\u2040\u2054\u2071\u207F\u2090-\u209C\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2118-\u211D\u2124\u2126\u2128\u212A-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FD5\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66F\uA674-\uA67D\uA67F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AD\uA7B0-\uA7B7\uA7F7-\uA827\uA840-\uA873\uA880-\uA8C4\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA8FD\uA900-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uA9E0-\uA9FE\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABEA\uABEC\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE00-\uFE0F\uFE20-\uFE2F\uFE33\uFE34\uFE4D-\uFE4F\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDDFD\uDE80-\uDE9C\uDEA0-\uDED0\uDEE0\uDF00-\uDF1F\uDF30-\uDF4A\uDF50-\uDF7A\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCA0-\uDCA9\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00-\uDE03\uDE05\uDE06\uDE0C-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE38-\uDE3A\uDE3F\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE6\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC00-\uDC46\uDC66-\uDC6F\uDC7F-\uDCBA\uDCD0-\uDCE8\uDCF0-\uDCF9\uDD00-\uDD34\uDD36-\uDD3F\uDD50-\uDD73\uDD76\uDD80-\uDDC4\uDDCA-\uDDCC\uDDD0-\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE37\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEEA\uDEF0-\uDEF9\uDF00-\uDF03\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3C-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF50\uDF57\uDF5D-\uDF63\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDC80-\uDCC5\uDCC7\uDCD0-\uDCD9\uDD80-\uDDB5\uDDB8-\uDDC0\uDDD8-\uDDDD\uDE00-\uDE40\uDE44\uDE50-\uDE59\uDE80-\uDEB7\uDEC0-\uDEC9\uDF00-\uDF19\uDF1D-\uDF2B\uDF30-\uDF39]|\uD806[\uDCA0-\uDCE9\uDCFF\uDEC0-\uDEF8]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE60-\uDE69\uDED0-\uDEED\uDEF0-\uDEF4\uDF00-\uDF36\uDF40-\uDF43\uDF50-\uDF59\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50-\uDF7E\uDF8F-\uDF9F]|\uD82C[\uDC00\uDC01]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99\uDC9D\uDC9E]|\uD834[\uDD65-\uDD69\uDD6D-\uDD72\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB\uDFCE-\uDFFF]|\uD836[\uDE00-\uDE36\uDE3B-\uDE6C\uDE75\uDE84\uDE9B-\uDE9F\uDEA1-\uDEAF]|\uD83A[\uDC00-\uDCC4\uDCD0-\uDCD6]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1]|\uD87E[\uDC00-\uDE1D]|\uDB40[\uDD00-\uDDEF]/ + }; + exports.Character = { + /* tslint:disable:no-bitwise */ + fromCodePoint: function (cp) { + return (cp < 0x10000) ? String.fromCharCode(cp) : + String.fromCharCode(0xD800 + ((cp - 0x10000) >> 10)) + + String.fromCharCode(0xDC00 + ((cp - 0x10000) & 1023)); + }, + // https://tc39.github.io/ecma262/#sec-white-space + isWhiteSpace: function (cp) { + return (cp === 0x20) || (cp === 0x09) || (cp === 0x0B) || (cp === 0x0C) || (cp === 0xA0) || + (cp >= 0x1680 && [0x1680, 0x2000, 0x2001, 0x2002, 0x2003, 0x2004, 0x2005, 0x2006, 0x2007, 0x2008, 0x2009, 0x200A, 0x202F, 0x205F, 0x3000, 0xFEFF].indexOf(cp) >= 0); + }, + // https://tc39.github.io/ecma262/#sec-line-terminators + isLineTerminator: function (cp) { + return (cp === 0x0A) || (cp === 0x0D) || (cp === 0x2028) || (cp === 0x2029); + }, + // https://tc39.github.io/ecma262/#sec-names-and-keywords + isIdentifierStart: function (cp) { + return (cp === 0x24) || (cp === 0x5F) || + (cp >= 0x41 && cp <= 0x5A) || + (cp >= 0x61 && cp <= 0x7A) || + (cp === 0x5C) || + ((cp >= 0x80) && Regex.NonAsciiIdentifierStart.test(exports.Character.fromCodePoint(cp))); + }, + isIdentifierPart: function (cp) { + return (cp === 0x24) || (cp === 0x5F) || + (cp >= 0x41 && cp <= 0x5A) || + (cp >= 0x61 && cp <= 0x7A) || + (cp >= 0x30 && cp <= 0x39) || + (cp === 0x5C) || + ((cp >= 0x80) && Regex.NonAsciiIdentifierPart.test(exports.Character.fromCodePoint(cp))); + }, + // https://tc39.github.io/ecma262/#sec-literals-numeric-literals + isDecimalDigit: function (cp) { + return (cp >= 0x30 && cp <= 0x39); // 0..9 + }, + isHexDigit: function (cp) { + return (cp >= 0x30 && cp <= 0x39) || + (cp >= 0x41 && cp <= 0x46) || + (cp >= 0x61 && cp <= 0x66); // a..f + }, + isOctalDigit: function (cp) { + return (cp >= 0x30 && cp <= 0x37); // 0..7 + } + }; + + +/***/ }, +/* 5 */ +/***/ function(module, exports, __nested_webpack_require_54354_54373__) { + + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + var jsx_syntax_1 = __nested_webpack_require_54354_54373__(6); + /* tslint:disable:max-classes-per-file */ + var JSXClosingElement = (function () { + function JSXClosingElement(name) { + this.type = jsx_syntax_1.JSXSyntax.JSXClosingElement; + this.name = name; + } + return JSXClosingElement; + }()); + exports.JSXClosingElement = JSXClosingElement; + var JSXElement = (function () { + function JSXElement(openingElement, children, closingElement) { + this.type = jsx_syntax_1.JSXSyntax.JSXElement; + this.openingElement = openingElement; + this.children = children; + this.closingElement = closingElement; + } + return JSXElement; + }()); + exports.JSXElement = JSXElement; + var JSXEmptyExpression = (function () { + function JSXEmptyExpression() { + this.type = jsx_syntax_1.JSXSyntax.JSXEmptyExpression; + } + return JSXEmptyExpression; + }()); + exports.JSXEmptyExpression = JSXEmptyExpression; + var JSXExpressionContainer = (function () { + function JSXExpressionContainer(expression) { + this.type = jsx_syntax_1.JSXSyntax.JSXExpressionContainer; + this.expression = expression; + } + return JSXExpressionContainer; + }()); + exports.JSXExpressionContainer = JSXExpressionContainer; + var JSXIdentifier = (function () { + function JSXIdentifier(name) { + this.type = jsx_syntax_1.JSXSyntax.JSXIdentifier; + this.name = name; + } + return JSXIdentifier; + }()); + exports.JSXIdentifier = JSXIdentifier; + var JSXMemberExpression = (function () { + function JSXMemberExpression(object, property) { + this.type = jsx_syntax_1.JSXSyntax.JSXMemberExpression; + this.object = object; + this.property = property; + } + return JSXMemberExpression; + }()); + exports.JSXMemberExpression = JSXMemberExpression; + var JSXAttribute = (function () { + function JSXAttribute(name, value) { + this.type = jsx_syntax_1.JSXSyntax.JSXAttribute; + this.name = name; + this.value = value; + } + return JSXAttribute; + }()); + exports.JSXAttribute = JSXAttribute; + var JSXNamespacedName = (function () { + function JSXNamespacedName(namespace, name) { + this.type = jsx_syntax_1.JSXSyntax.JSXNamespacedName; + this.namespace = namespace; + this.name = name; + } + return JSXNamespacedName; + }()); + exports.JSXNamespacedName = JSXNamespacedName; + var JSXOpeningElement = (function () { + function JSXOpeningElement(name, selfClosing, attributes) { + this.type = jsx_syntax_1.JSXSyntax.JSXOpeningElement; + this.name = name; + this.selfClosing = selfClosing; + this.attributes = attributes; + } + return JSXOpeningElement; + }()); + exports.JSXOpeningElement = JSXOpeningElement; + var JSXSpreadAttribute = (function () { + function JSXSpreadAttribute(argument) { + this.type = jsx_syntax_1.JSXSyntax.JSXSpreadAttribute; + this.argument = argument; + } + return JSXSpreadAttribute; + }()); + exports.JSXSpreadAttribute = JSXSpreadAttribute; + var JSXText = (function () { + function JSXText(value, raw) { + this.type = jsx_syntax_1.JSXSyntax.JSXText; + this.value = value; + this.raw = raw; + } + return JSXText; + }()); + exports.JSXText = JSXText; + + +/***/ }, +/* 6 */ +/***/ function(module, exports) { + + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.JSXSyntax = { + JSXAttribute: 'JSXAttribute', + JSXClosingElement: 'JSXClosingElement', + JSXElement: 'JSXElement', + JSXEmptyExpression: 'JSXEmptyExpression', + JSXExpressionContainer: 'JSXExpressionContainer', + JSXIdentifier: 'JSXIdentifier', + JSXMemberExpression: 'JSXMemberExpression', + JSXNamespacedName: 'JSXNamespacedName', + JSXOpeningElement: 'JSXOpeningElement', + JSXSpreadAttribute: 'JSXSpreadAttribute', + JSXText: 'JSXText' + }; + + +/***/ }, +/* 7 */ +/***/ function(module, exports, __nested_webpack_require_58416_58435__) { + + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + var syntax_1 = __nested_webpack_require_58416_58435__(2); + /* tslint:disable:max-classes-per-file */ + var ArrayExpression = (function () { + function ArrayExpression(elements) { + this.type = syntax_1.Syntax.ArrayExpression; + this.elements = elements; + } + return ArrayExpression; + }()); + exports.ArrayExpression = ArrayExpression; + var ArrayPattern = (function () { + function ArrayPattern(elements) { + this.type = syntax_1.Syntax.ArrayPattern; + this.elements = elements; + } + return ArrayPattern; + }()); + exports.ArrayPattern = ArrayPattern; + var ArrowFunctionExpression = (function () { + function ArrowFunctionExpression(params, body, expression) { + this.type = syntax_1.Syntax.ArrowFunctionExpression; + this.id = null; + this.params = params; + this.body = body; + this.generator = false; + this.expression = expression; + this.async = false; + } + return ArrowFunctionExpression; + }()); + exports.ArrowFunctionExpression = ArrowFunctionExpression; + var AssignmentExpression = (function () { + function AssignmentExpression(operator, left, right) { + this.type = syntax_1.Syntax.AssignmentExpression; + this.operator = operator; + this.left = left; + this.right = right; + } + return AssignmentExpression; + }()); + exports.AssignmentExpression = AssignmentExpression; + var AssignmentPattern = (function () { + function AssignmentPattern(left, right) { + this.type = syntax_1.Syntax.AssignmentPattern; + this.left = left; + this.right = right; + } + return AssignmentPattern; + }()); + exports.AssignmentPattern = AssignmentPattern; + var AsyncArrowFunctionExpression = (function () { + function AsyncArrowFunctionExpression(params, body, expression) { + this.type = syntax_1.Syntax.ArrowFunctionExpression; + this.id = null; + this.params = params; + this.body = body; + this.generator = false; + this.expression = expression; + this.async = true; + } + return AsyncArrowFunctionExpression; + }()); + exports.AsyncArrowFunctionExpression = AsyncArrowFunctionExpression; + var AsyncFunctionDeclaration = (function () { + function AsyncFunctionDeclaration(id, params, body) { + this.type = syntax_1.Syntax.FunctionDeclaration; + this.id = id; + this.params = params; + this.body = body; + this.generator = false; + this.expression = false; + this.async = true; + } + return AsyncFunctionDeclaration; + }()); + exports.AsyncFunctionDeclaration = AsyncFunctionDeclaration; + var AsyncFunctionExpression = (function () { + function AsyncFunctionExpression(id, params, body) { + this.type = syntax_1.Syntax.FunctionExpression; + this.id = id; + this.params = params; + this.body = body; + this.generator = false; + this.expression = false; + this.async = true; + } + return AsyncFunctionExpression; + }()); + exports.AsyncFunctionExpression = AsyncFunctionExpression; + var AwaitExpression = (function () { + function AwaitExpression(argument) { + this.type = syntax_1.Syntax.AwaitExpression; + this.argument = argument; + } + return AwaitExpression; + }()); + exports.AwaitExpression = AwaitExpression; + var BinaryExpression = (function () { + function BinaryExpression(operator, left, right) { + var logical = (operator === '||' || operator === '&&'); + this.type = logical ? syntax_1.Syntax.LogicalExpression : syntax_1.Syntax.BinaryExpression; + this.operator = operator; + this.left = left; + this.right = right; + } + return BinaryExpression; + }()); + exports.BinaryExpression = BinaryExpression; + var BlockStatement = (function () { + function BlockStatement(body) { + this.type = syntax_1.Syntax.BlockStatement; + this.body = body; + } + return BlockStatement; + }()); + exports.BlockStatement = BlockStatement; + var BreakStatement = (function () { + function BreakStatement(label) { + this.type = syntax_1.Syntax.BreakStatement; + this.label = label; + } + return BreakStatement; + }()); + exports.BreakStatement = BreakStatement; + var CallExpression = (function () { + function CallExpression(callee, args) { + this.type = syntax_1.Syntax.CallExpression; + this.callee = callee; + this.arguments = args; + } + return CallExpression; + }()); + exports.CallExpression = CallExpression; + var CatchClause = (function () { + function CatchClause(param, body) { + this.type = syntax_1.Syntax.CatchClause; + this.param = param; + this.body = body; + } + return CatchClause; + }()); + exports.CatchClause = CatchClause; + var ClassBody = (function () { + function ClassBody(body) { + this.type = syntax_1.Syntax.ClassBody; + this.body = body; + } + return ClassBody; + }()); + exports.ClassBody = ClassBody; + var ClassDeclaration = (function () { + function ClassDeclaration(id, superClass, body) { + this.type = syntax_1.Syntax.ClassDeclaration; + this.id = id; + this.superClass = superClass; + this.body = body; + } + return ClassDeclaration; + }()); + exports.ClassDeclaration = ClassDeclaration; + var ClassExpression = (function () { + function ClassExpression(id, superClass, body) { + this.type = syntax_1.Syntax.ClassExpression; + this.id = id; + this.superClass = superClass; + this.body = body; + } + return ClassExpression; + }()); + exports.ClassExpression = ClassExpression; + var ComputedMemberExpression = (function () { + function ComputedMemberExpression(object, property) { + this.type = syntax_1.Syntax.MemberExpression; + this.computed = true; + this.object = object; + this.property = property; + } + return ComputedMemberExpression; + }()); + exports.ComputedMemberExpression = ComputedMemberExpression; + var ConditionalExpression = (function () { + function ConditionalExpression(test, consequent, alternate) { + this.type = syntax_1.Syntax.ConditionalExpression; + this.test = test; + this.consequent = consequent; + this.alternate = alternate; + } + return ConditionalExpression; + }()); + exports.ConditionalExpression = ConditionalExpression; + var ContinueStatement = (function () { + function ContinueStatement(label) { + this.type = syntax_1.Syntax.ContinueStatement; + this.label = label; + } + return ContinueStatement; + }()); + exports.ContinueStatement = ContinueStatement; + var DebuggerStatement = (function () { + function DebuggerStatement() { + this.type = syntax_1.Syntax.DebuggerStatement; + } + return DebuggerStatement; + }()); + exports.DebuggerStatement = DebuggerStatement; + var Directive = (function () { + function Directive(expression, directive) { + this.type = syntax_1.Syntax.ExpressionStatement; + this.expression = expression; + this.directive = directive; + } + return Directive; + }()); + exports.Directive = Directive; + var DoWhileStatement = (function () { + function DoWhileStatement(body, test) { + this.type = syntax_1.Syntax.DoWhileStatement; + this.body = body; + this.test = test; + } + return DoWhileStatement; + }()); + exports.DoWhileStatement = DoWhileStatement; + var EmptyStatement = (function () { + function EmptyStatement() { + this.type = syntax_1.Syntax.EmptyStatement; + } + return EmptyStatement; + }()); + exports.EmptyStatement = EmptyStatement; + var ExportAllDeclaration = (function () { + function ExportAllDeclaration(source) { + this.type = syntax_1.Syntax.ExportAllDeclaration; + this.source = source; + } + return ExportAllDeclaration; + }()); + exports.ExportAllDeclaration = ExportAllDeclaration; + var ExportDefaultDeclaration = (function () { + function ExportDefaultDeclaration(declaration) { + this.type = syntax_1.Syntax.ExportDefaultDeclaration; + this.declaration = declaration; + } + return ExportDefaultDeclaration; + }()); + exports.ExportDefaultDeclaration = ExportDefaultDeclaration; + var ExportNamedDeclaration = (function () { + function ExportNamedDeclaration(declaration, specifiers, source) { + this.type = syntax_1.Syntax.ExportNamedDeclaration; + this.declaration = declaration; + this.specifiers = specifiers; + this.source = source; + } + return ExportNamedDeclaration; + }()); + exports.ExportNamedDeclaration = ExportNamedDeclaration; + var ExportSpecifier = (function () { + function ExportSpecifier(local, exported) { + this.type = syntax_1.Syntax.ExportSpecifier; + this.exported = exported; + this.local = local; + } + return ExportSpecifier; + }()); + exports.ExportSpecifier = ExportSpecifier; + var ExpressionStatement = (function () { + function ExpressionStatement(expression) { + this.type = syntax_1.Syntax.ExpressionStatement; + this.expression = expression; + } + return ExpressionStatement; + }()); + exports.ExpressionStatement = ExpressionStatement; + var ForInStatement = (function () { + function ForInStatement(left, right, body) { + this.type = syntax_1.Syntax.ForInStatement; + this.left = left; + this.right = right; + this.body = body; + this.each = false; + } + return ForInStatement; + }()); + exports.ForInStatement = ForInStatement; + var ForOfStatement = (function () { + function ForOfStatement(left, right, body) { + this.type = syntax_1.Syntax.ForOfStatement; + this.left = left; + this.right = right; + this.body = body; + } + return ForOfStatement; + }()); + exports.ForOfStatement = ForOfStatement; + var ForStatement = (function () { + function ForStatement(init, test, update, body) { + this.type = syntax_1.Syntax.ForStatement; + this.init = init; + this.test = test; + this.update = update; + this.body = body; + } + return ForStatement; + }()); + exports.ForStatement = ForStatement; + var FunctionDeclaration = (function () { + function FunctionDeclaration(id, params, body, generator) { + this.type = syntax_1.Syntax.FunctionDeclaration; + this.id = id; + this.params = params; + this.body = body; + this.generator = generator; + this.expression = false; + this.async = false; + } + return FunctionDeclaration; + }()); + exports.FunctionDeclaration = FunctionDeclaration; + var FunctionExpression = (function () { + function FunctionExpression(id, params, body, generator) { + this.type = syntax_1.Syntax.FunctionExpression; + this.id = id; + this.params = params; + this.body = body; + this.generator = generator; + this.expression = false; + this.async = false; + } + return FunctionExpression; + }()); + exports.FunctionExpression = FunctionExpression; + var Identifier = (function () { + function Identifier(name) { + this.type = syntax_1.Syntax.Identifier; + this.name = name; + } + return Identifier; + }()); + exports.Identifier = Identifier; + var IfStatement = (function () { + function IfStatement(test, consequent, alternate) { + this.type = syntax_1.Syntax.IfStatement; + this.test = test; + this.consequent = consequent; + this.alternate = alternate; + } + return IfStatement; + }()); + exports.IfStatement = IfStatement; + var ImportDeclaration = (function () { + function ImportDeclaration(specifiers, source) { + this.type = syntax_1.Syntax.ImportDeclaration; + this.specifiers = specifiers; + this.source = source; + } + return ImportDeclaration; + }()); + exports.ImportDeclaration = ImportDeclaration; + var ImportDefaultSpecifier = (function () { + function ImportDefaultSpecifier(local) { + this.type = syntax_1.Syntax.ImportDefaultSpecifier; + this.local = local; + } + return ImportDefaultSpecifier; + }()); + exports.ImportDefaultSpecifier = ImportDefaultSpecifier; + var ImportNamespaceSpecifier = (function () { + function ImportNamespaceSpecifier(local) { + this.type = syntax_1.Syntax.ImportNamespaceSpecifier; + this.local = local; + } + return ImportNamespaceSpecifier; + }()); + exports.ImportNamespaceSpecifier = ImportNamespaceSpecifier; + var ImportSpecifier = (function () { + function ImportSpecifier(local, imported) { + this.type = syntax_1.Syntax.ImportSpecifier; + this.local = local; + this.imported = imported; + } + return ImportSpecifier; + }()); + exports.ImportSpecifier = ImportSpecifier; + var LabeledStatement = (function () { + function LabeledStatement(label, body) { + this.type = syntax_1.Syntax.LabeledStatement; + this.label = label; + this.body = body; + } + return LabeledStatement; + }()); + exports.LabeledStatement = LabeledStatement; + var Literal = (function () { + function Literal(value, raw) { + this.type = syntax_1.Syntax.Literal; + this.value = value; + this.raw = raw; + } + return Literal; + }()); + exports.Literal = Literal; + var MetaProperty = (function () { + function MetaProperty(meta, property) { + this.type = syntax_1.Syntax.MetaProperty; + this.meta = meta; + this.property = property; + } + return MetaProperty; + }()); + exports.MetaProperty = MetaProperty; + var MethodDefinition = (function () { + function MethodDefinition(key, computed, value, kind, isStatic) { + this.type = syntax_1.Syntax.MethodDefinition; + this.key = key; + this.computed = computed; + this.value = value; + this.kind = kind; + this.static = isStatic; + } + return MethodDefinition; + }()); + exports.MethodDefinition = MethodDefinition; + var Module = (function () { + function Module(body) { + this.type = syntax_1.Syntax.Program; + this.body = body; + this.sourceType = 'module'; + } + return Module; + }()); + exports.Module = Module; + var NewExpression = (function () { + function NewExpression(callee, args) { + this.type = syntax_1.Syntax.NewExpression; + this.callee = callee; + this.arguments = args; + } + return NewExpression; + }()); + exports.NewExpression = NewExpression; + var ObjectExpression = (function () { + function ObjectExpression(properties) { + this.type = syntax_1.Syntax.ObjectExpression; + this.properties = properties; + } + return ObjectExpression; + }()); + exports.ObjectExpression = ObjectExpression; + var ObjectPattern = (function () { + function ObjectPattern(properties) { + this.type = syntax_1.Syntax.ObjectPattern; + this.properties = properties; + } + return ObjectPattern; + }()); + exports.ObjectPattern = ObjectPattern; + var Property = (function () { + function Property(kind, key, computed, value, method, shorthand) { + this.type = syntax_1.Syntax.Property; + this.key = key; + this.computed = computed; + this.value = value; + this.kind = kind; + this.method = method; + this.shorthand = shorthand; + } + return Property; + }()); + exports.Property = Property; + var RegexLiteral = (function () { + function RegexLiteral(value, raw, pattern, flags) { + this.type = syntax_1.Syntax.Literal; + this.value = value; + this.raw = raw; + this.regex = { pattern: pattern, flags: flags }; + } + return RegexLiteral; + }()); + exports.RegexLiteral = RegexLiteral; + var RestElement = (function () { + function RestElement(argument) { + this.type = syntax_1.Syntax.RestElement; + this.argument = argument; + } + return RestElement; + }()); + exports.RestElement = RestElement; + var ReturnStatement = (function () { + function ReturnStatement(argument) { + this.type = syntax_1.Syntax.ReturnStatement; + this.argument = argument; + } + return ReturnStatement; + }()); + exports.ReturnStatement = ReturnStatement; + var Script = (function () { + function Script(body) { + this.type = syntax_1.Syntax.Program; + this.body = body; + this.sourceType = 'script'; + } + return Script; + }()); + exports.Script = Script; + var SequenceExpression = (function () { + function SequenceExpression(expressions) { + this.type = syntax_1.Syntax.SequenceExpression; + this.expressions = expressions; + } + return SequenceExpression; + }()); + exports.SequenceExpression = SequenceExpression; + var SpreadElement = (function () { + function SpreadElement(argument) { + this.type = syntax_1.Syntax.SpreadElement; + this.argument = argument; + } + return SpreadElement; + }()); + exports.SpreadElement = SpreadElement; + var StaticMemberExpression = (function () { + function StaticMemberExpression(object, property) { + this.type = syntax_1.Syntax.MemberExpression; + this.computed = false; + this.object = object; + this.property = property; + } + return StaticMemberExpression; + }()); + exports.StaticMemberExpression = StaticMemberExpression; + var Super = (function () { + function Super() { + this.type = syntax_1.Syntax.Super; + } + return Super; + }()); + exports.Super = Super; + var SwitchCase = (function () { + function SwitchCase(test, consequent) { + this.type = syntax_1.Syntax.SwitchCase; + this.test = test; + this.consequent = consequent; + } + return SwitchCase; + }()); + exports.SwitchCase = SwitchCase; + var SwitchStatement = (function () { + function SwitchStatement(discriminant, cases) { + this.type = syntax_1.Syntax.SwitchStatement; + this.discriminant = discriminant; + this.cases = cases; + } + return SwitchStatement; + }()); + exports.SwitchStatement = SwitchStatement; + var TaggedTemplateExpression = (function () { + function TaggedTemplateExpression(tag, quasi) { + this.type = syntax_1.Syntax.TaggedTemplateExpression; + this.tag = tag; + this.quasi = quasi; + } + return TaggedTemplateExpression; + }()); + exports.TaggedTemplateExpression = TaggedTemplateExpression; + var TemplateElement = (function () { + function TemplateElement(value, tail) { + this.type = syntax_1.Syntax.TemplateElement; + this.value = value; + this.tail = tail; + } + return TemplateElement; + }()); + exports.TemplateElement = TemplateElement; + var TemplateLiteral = (function () { + function TemplateLiteral(quasis, expressions) { + this.type = syntax_1.Syntax.TemplateLiteral; + this.quasis = quasis; + this.expressions = expressions; + } + return TemplateLiteral; + }()); + exports.TemplateLiteral = TemplateLiteral; + var ThisExpression = (function () { + function ThisExpression() { + this.type = syntax_1.Syntax.ThisExpression; + } + return ThisExpression; + }()); + exports.ThisExpression = ThisExpression; + var ThrowStatement = (function () { + function ThrowStatement(argument) { + this.type = syntax_1.Syntax.ThrowStatement; + this.argument = argument; + } + return ThrowStatement; + }()); + exports.ThrowStatement = ThrowStatement; + var TryStatement = (function () { + function TryStatement(block, handler, finalizer) { + this.type = syntax_1.Syntax.TryStatement; + this.block = block; + this.handler = handler; + this.finalizer = finalizer; + } + return TryStatement; + }()); + exports.TryStatement = TryStatement; + var UnaryExpression = (function () { + function UnaryExpression(operator, argument) { + this.type = syntax_1.Syntax.UnaryExpression; + this.operator = operator; + this.argument = argument; + this.prefix = true; + } + return UnaryExpression; + }()); + exports.UnaryExpression = UnaryExpression; + var UpdateExpression = (function () { + function UpdateExpression(operator, argument, prefix) { + this.type = syntax_1.Syntax.UpdateExpression; + this.operator = operator; + this.argument = argument; + this.prefix = prefix; + } + return UpdateExpression; + }()); + exports.UpdateExpression = UpdateExpression; + var VariableDeclaration = (function () { + function VariableDeclaration(declarations, kind) { + this.type = syntax_1.Syntax.VariableDeclaration; + this.declarations = declarations; + this.kind = kind; + } + return VariableDeclaration; + }()); + exports.VariableDeclaration = VariableDeclaration; + var VariableDeclarator = (function () { + function VariableDeclarator(id, init) { + this.type = syntax_1.Syntax.VariableDeclarator; + this.id = id; + this.init = init; + } + return VariableDeclarator; + }()); + exports.VariableDeclarator = VariableDeclarator; + var WhileStatement = (function () { + function WhileStatement(test, body) { + this.type = syntax_1.Syntax.WhileStatement; + this.test = test; + this.body = body; + } + return WhileStatement; + }()); + exports.WhileStatement = WhileStatement; + var WithStatement = (function () { + function WithStatement(object, body) { + this.type = syntax_1.Syntax.WithStatement; + this.object = object; + this.body = body; + } + return WithStatement; + }()); + exports.WithStatement = WithStatement; + var YieldExpression = (function () { + function YieldExpression(argument, delegate) { + this.type = syntax_1.Syntax.YieldExpression; + this.argument = argument; + this.delegate = delegate; + } + return YieldExpression; + }()); + exports.YieldExpression = YieldExpression; + + +/***/ }, +/* 8 */ +/***/ function(module, exports, __nested_webpack_require_80491_80510__) { + + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + var assert_1 = __nested_webpack_require_80491_80510__(9); + var error_handler_1 = __nested_webpack_require_80491_80510__(10); + var messages_1 = __nested_webpack_require_80491_80510__(11); + var Node = __nested_webpack_require_80491_80510__(7); + var scanner_1 = __nested_webpack_require_80491_80510__(12); + var syntax_1 = __nested_webpack_require_80491_80510__(2); + var token_1 = __nested_webpack_require_80491_80510__(13); + var ArrowParameterPlaceHolder = 'ArrowParameterPlaceHolder'; + var Parser = (function () { + function Parser(code, options, delegate) { + if (options === void 0) { options = {}; } + this.config = { + range: (typeof options.range === 'boolean') && options.range, + loc: (typeof options.loc === 'boolean') && options.loc, + source: null, + tokens: (typeof options.tokens === 'boolean') && options.tokens, + comment: (typeof options.comment === 'boolean') && options.comment, + tolerant: (typeof options.tolerant === 'boolean') && options.tolerant + }; + if (this.config.loc && options.source && options.source !== null) { + this.config.source = String(options.source); + } + this.delegate = delegate; + this.errorHandler = new error_handler_1.ErrorHandler(); + this.errorHandler.tolerant = this.config.tolerant; + this.scanner = new scanner_1.Scanner(code, this.errorHandler); + this.scanner.trackComment = this.config.comment; + this.operatorPrecedence = { + ')': 0, + ';': 0, + ',': 0, + '=': 0, + ']': 0, + '||': 1, + '&&': 2, + '|': 3, + '^': 4, + '&': 5, + '==': 6, + '!=': 6, + '===': 6, + '!==': 6, + '<': 7, + '>': 7, + '<=': 7, + '>=': 7, + '<<': 8, + '>>': 8, + '>>>': 8, + '+': 9, + '-': 9, + '*': 11, + '/': 11, + '%': 11 + }; + this.lookahead = { + type: 2 /* EOF */, + value: '', + lineNumber: this.scanner.lineNumber, + lineStart: 0, + start: 0, + end: 0 + }; + this.hasLineTerminator = false; + this.context = { + isModule: false, + await: false, + allowIn: true, + allowStrictDirective: true, + allowYield: true, + firstCoverInitializedNameError: null, + isAssignmentTarget: false, + isBindingElement: false, + inFunctionBody: false, + inIteration: false, + inSwitch: false, + labelSet: {}, + strict: false + }; + this.tokens = []; + this.startMarker = { + index: 0, + line: this.scanner.lineNumber, + column: 0 + }; + this.lastMarker = { + index: 0, + line: this.scanner.lineNumber, + column: 0 + }; + this.nextToken(); + this.lastMarker = { + index: this.scanner.index, + line: this.scanner.lineNumber, + column: this.scanner.index - this.scanner.lineStart + }; + } + Parser.prototype.throwError = function (messageFormat) { + var values = []; + for (var _i = 1; _i < arguments.length; _i++) { + values[_i - 1] = arguments[_i]; + } + var args = Array.prototype.slice.call(arguments, 1); + var msg = messageFormat.replace(/%(\d)/g, function (whole, idx) { + assert_1.assert(idx < args.length, 'Message reference must be in range'); + return args[idx]; + }); + var index = this.lastMarker.index; + var line = this.lastMarker.line; + var column = this.lastMarker.column + 1; + throw this.errorHandler.createError(index, line, column, msg); + }; + Parser.prototype.tolerateError = function (messageFormat) { + var values = []; + for (var _i = 1; _i < arguments.length; _i++) { + values[_i - 1] = arguments[_i]; + } + var args = Array.prototype.slice.call(arguments, 1); + var msg = messageFormat.replace(/%(\d)/g, function (whole, idx) { + assert_1.assert(idx < args.length, 'Message reference must be in range'); + return args[idx]; + }); + var index = this.lastMarker.index; + var line = this.scanner.lineNumber; + var column = this.lastMarker.column + 1; + this.errorHandler.tolerateError(index, line, column, msg); + }; + // Throw an exception because of the token. + Parser.prototype.unexpectedTokenError = function (token, message) { + var msg = message || messages_1.Messages.UnexpectedToken; + var value; + if (token) { + if (!message) { + msg = (token.type === 2 /* EOF */) ? messages_1.Messages.UnexpectedEOS : + (token.type === 3 /* Identifier */) ? messages_1.Messages.UnexpectedIdentifier : + (token.type === 6 /* NumericLiteral */) ? messages_1.Messages.UnexpectedNumber : + (token.type === 8 /* StringLiteral */) ? messages_1.Messages.UnexpectedString : + (token.type === 10 /* Template */) ? messages_1.Messages.UnexpectedTemplate : + messages_1.Messages.UnexpectedToken; + if (token.type === 4 /* Keyword */) { + if (this.scanner.isFutureReservedWord(token.value)) { + msg = messages_1.Messages.UnexpectedReserved; + } + else if (this.context.strict && this.scanner.isStrictModeReservedWord(token.value)) { + msg = messages_1.Messages.StrictReservedWord; + } + } + } + value = token.value; + } + else { + value = 'ILLEGAL'; + } + msg = msg.replace('%0', value); + if (token && typeof token.lineNumber === 'number') { + var index = token.start; + var line = token.lineNumber; + var lastMarkerLineStart = this.lastMarker.index - this.lastMarker.column; + var column = token.start - lastMarkerLineStart + 1; + return this.errorHandler.createError(index, line, column, msg); + } + else { + var index = this.lastMarker.index; + var line = this.lastMarker.line; + var column = this.lastMarker.column + 1; + return this.errorHandler.createError(index, line, column, msg); + } + }; + Parser.prototype.throwUnexpectedToken = function (token, message) { + throw this.unexpectedTokenError(token, message); + }; + Parser.prototype.tolerateUnexpectedToken = function (token, message) { + this.errorHandler.tolerate(this.unexpectedTokenError(token, message)); + }; + Parser.prototype.collectComments = function () { + if (!this.config.comment) { + this.scanner.scanComments(); + } + else { + var comments = this.scanner.scanComments(); + if (comments.length > 0 && this.delegate) { + for (var i = 0; i < comments.length; ++i) { + var e = comments[i]; + var node = void 0; + node = { + type: e.multiLine ? 'BlockComment' : 'LineComment', + value: this.scanner.source.slice(e.slice[0], e.slice[1]) + }; + if (this.config.range) { + node.range = e.range; + } + if (this.config.loc) { + node.loc = e.loc; + } + var metadata = { + start: { + line: e.loc.start.line, + column: e.loc.start.column, + offset: e.range[0] + }, + end: { + line: e.loc.end.line, + column: e.loc.end.column, + offset: e.range[1] + } + }; + this.delegate(node, metadata); + } + } + } + }; + // From internal representation to an external structure + Parser.prototype.getTokenRaw = function (token) { + return this.scanner.source.slice(token.start, token.end); + }; + Parser.prototype.convertToken = function (token) { + var t = { + type: token_1.TokenName[token.type], + value: this.getTokenRaw(token) + }; + if (this.config.range) { + t.range = [token.start, token.end]; + } + if (this.config.loc) { + t.loc = { + start: { + line: this.startMarker.line, + column: this.startMarker.column + }, + end: { + line: this.scanner.lineNumber, + column: this.scanner.index - this.scanner.lineStart + } + }; + } + if (token.type === 9 /* RegularExpression */) { + var pattern = token.pattern; + var flags = token.flags; + t.regex = { pattern: pattern, flags: flags }; + } + return t; + }; + Parser.prototype.nextToken = function () { + var token = this.lookahead; + this.lastMarker.index = this.scanner.index; + this.lastMarker.line = this.scanner.lineNumber; + this.lastMarker.column = this.scanner.index - this.scanner.lineStart; + this.collectComments(); + if (this.scanner.index !== this.startMarker.index) { + this.startMarker.index = this.scanner.index; + this.startMarker.line = this.scanner.lineNumber; + this.startMarker.column = this.scanner.index - this.scanner.lineStart; + } + var next = this.scanner.lex(); + this.hasLineTerminator = (token.lineNumber !== next.lineNumber); + if (next && this.context.strict && next.type === 3 /* Identifier */) { + if (this.scanner.isStrictModeReservedWord(next.value)) { + next.type = 4 /* Keyword */; + } + } + this.lookahead = next; + if (this.config.tokens && next.type !== 2 /* EOF */) { + this.tokens.push(this.convertToken(next)); + } + return token; + }; + Parser.prototype.nextRegexToken = function () { + this.collectComments(); + var token = this.scanner.scanRegExp(); + if (this.config.tokens) { + // Pop the previous token, '/' or '/=' + // This is added from the lookahead token. + this.tokens.pop(); + this.tokens.push(this.convertToken(token)); + } + // Prime the next lookahead. + this.lookahead = token; + this.nextToken(); + return token; + }; + Parser.prototype.createNode = function () { + return { + index: this.startMarker.index, + line: this.startMarker.line, + column: this.startMarker.column + }; + }; + Parser.prototype.startNode = function (token, lastLineStart) { + if (lastLineStart === void 0) { lastLineStart = 0; } + var column = token.start - token.lineStart; + var line = token.lineNumber; + if (column < 0) { + column += lastLineStart; + line--; + } + return { + index: token.start, + line: line, + column: column + }; + }; + Parser.prototype.finalize = function (marker, node) { + if (this.config.range) { + node.range = [marker.index, this.lastMarker.index]; + } + if (this.config.loc) { + node.loc = { + start: { + line: marker.line, + column: marker.column, + }, + end: { + line: this.lastMarker.line, + column: this.lastMarker.column + } + }; + if (this.config.source) { + node.loc.source = this.config.source; + } + } + if (this.delegate) { + var metadata = { + start: { + line: marker.line, + column: marker.column, + offset: marker.index + }, + end: { + line: this.lastMarker.line, + column: this.lastMarker.column, + offset: this.lastMarker.index + } + }; + this.delegate(node, metadata); + } + return node; + }; + // Expect the next token to match the specified punctuator. + // If not, an exception will be thrown. + Parser.prototype.expect = function (value) { + var token = this.nextToken(); + if (token.type !== 7 /* Punctuator */ || token.value !== value) { + this.throwUnexpectedToken(token); + } + }; + // Quietly expect a comma when in tolerant mode, otherwise delegates to expect(). + Parser.prototype.expectCommaSeparator = function () { + if (this.config.tolerant) { + var token = this.lookahead; + if (token.type === 7 /* Punctuator */ && token.value === ',') { + this.nextToken(); + } + else if (token.type === 7 /* Punctuator */ && token.value === ';') { + this.nextToken(); + this.tolerateUnexpectedToken(token); + } + else { + this.tolerateUnexpectedToken(token, messages_1.Messages.UnexpectedToken); + } + } + else { + this.expect(','); + } + }; + // Expect the next token to match the specified keyword. + // If not, an exception will be thrown. + Parser.prototype.expectKeyword = function (keyword) { + var token = this.nextToken(); + if (token.type !== 4 /* Keyword */ || token.value !== keyword) { + this.throwUnexpectedToken(token); + } + }; + // Return true if the next token matches the specified punctuator. + Parser.prototype.match = function (value) { + return this.lookahead.type === 7 /* Punctuator */ && this.lookahead.value === value; + }; + // Return true if the next token matches the specified keyword + Parser.prototype.matchKeyword = function (keyword) { + return this.lookahead.type === 4 /* Keyword */ && this.lookahead.value === keyword; + }; + // Return true if the next token matches the specified contextual keyword + // (where an identifier is sometimes a keyword depending on the context) + Parser.prototype.matchContextualKeyword = function (keyword) { + return this.lookahead.type === 3 /* Identifier */ && this.lookahead.value === keyword; + }; + // Return true if the next token is an assignment operator + Parser.prototype.matchAssign = function () { + if (this.lookahead.type !== 7 /* Punctuator */) { + return false; + } + var op = this.lookahead.value; + return op === '=' || + op === '*=' || + op === '**=' || + op === '/=' || + op === '%=' || + op === '+=' || + op === '-=' || + op === '<<=' || + op === '>>=' || + op === '>>>=' || + op === '&=' || + op === '^=' || + op === '|='; + }; + // Cover grammar support. + // + // When an assignment expression position starts with an left parenthesis, the determination of the type + // of the syntax is to be deferred arbitrarily long until the end of the parentheses pair (plus a lookahead) + // or the first comma. This situation also defers the determination of all the expressions nested in the pair. + // + // There are three productions that can be parsed in a parentheses pair that needs to be determined + // after the outermost pair is closed. They are: + // + // 1. AssignmentExpression + // 2. BindingElements + // 3. AssignmentTargets + // + // In order to avoid exponential backtracking, we use two flags to denote if the production can be + // binding element or assignment target. + // + // The three productions have the relationship: + // + // BindingElements ⊆ AssignmentTargets ⊆ AssignmentExpression + // + // with a single exception that CoverInitializedName when used directly in an Expression, generates + // an early error. Therefore, we need the third state, firstCoverInitializedNameError, to track the + // first usage of CoverInitializedName and report it when we reached the end of the parentheses pair. + // + // isolateCoverGrammar function runs the given parser function with a new cover grammar context, and it does not + // effect the current flags. This means the production the parser parses is only used as an expression. Therefore + // the CoverInitializedName check is conducted. + // + // inheritCoverGrammar function runs the given parse function with a new cover grammar context, and it propagates + // the flags outside of the parser. This means the production the parser parses is used as a part of a potential + // pattern. The CoverInitializedName check is deferred. + Parser.prototype.isolateCoverGrammar = function (parseFunction) { + var previousIsBindingElement = this.context.isBindingElement; + var previousIsAssignmentTarget = this.context.isAssignmentTarget; + var previousFirstCoverInitializedNameError = this.context.firstCoverInitializedNameError; + this.context.isBindingElement = true; + this.context.isAssignmentTarget = true; + this.context.firstCoverInitializedNameError = null; + var result = parseFunction.call(this); + if (this.context.firstCoverInitializedNameError !== null) { + this.throwUnexpectedToken(this.context.firstCoverInitializedNameError); + } + this.context.isBindingElement = previousIsBindingElement; + this.context.isAssignmentTarget = previousIsAssignmentTarget; + this.context.firstCoverInitializedNameError = previousFirstCoverInitializedNameError; + return result; + }; + Parser.prototype.inheritCoverGrammar = function (parseFunction) { + var previousIsBindingElement = this.context.isBindingElement; + var previousIsAssignmentTarget = this.context.isAssignmentTarget; + var previousFirstCoverInitializedNameError = this.context.firstCoverInitializedNameError; + this.context.isBindingElement = true; + this.context.isAssignmentTarget = true; + this.context.firstCoverInitializedNameError = null; + var result = parseFunction.call(this); + this.context.isBindingElement = this.context.isBindingElement && previousIsBindingElement; + this.context.isAssignmentTarget = this.context.isAssignmentTarget && previousIsAssignmentTarget; + this.context.firstCoverInitializedNameError = previousFirstCoverInitializedNameError || this.context.firstCoverInitializedNameError; + return result; + }; + Parser.prototype.consumeSemicolon = function () { + if (this.match(';')) { + this.nextToken(); + } + else if (!this.hasLineTerminator) { + if (this.lookahead.type !== 2 /* EOF */ && !this.match('}')) { + this.throwUnexpectedToken(this.lookahead); + } + this.lastMarker.index = this.startMarker.index; + this.lastMarker.line = this.startMarker.line; + this.lastMarker.column = this.startMarker.column; + } + }; + // https://tc39.github.io/ecma262/#sec-primary-expression + Parser.prototype.parsePrimaryExpression = function () { + var node = this.createNode(); + var expr; + var token, raw; + switch (this.lookahead.type) { + case 3 /* Identifier */: + if ((this.context.isModule || this.context.await) && this.lookahead.value === 'await') { + this.tolerateUnexpectedToken(this.lookahead); + } + expr = this.matchAsyncFunction() ? this.parseFunctionExpression() : this.finalize(node, new Node.Identifier(this.nextToken().value)); + break; + case 6 /* NumericLiteral */: + case 8 /* StringLiteral */: + if (this.context.strict && this.lookahead.octal) { + this.tolerateUnexpectedToken(this.lookahead, messages_1.Messages.StrictOctalLiteral); + } + this.context.isAssignmentTarget = false; + this.context.isBindingElement = false; + token = this.nextToken(); + raw = this.getTokenRaw(token); + expr = this.finalize(node, new Node.Literal(token.value, raw)); + break; + case 1 /* BooleanLiteral */: + this.context.isAssignmentTarget = false; + this.context.isBindingElement = false; + token = this.nextToken(); + raw = this.getTokenRaw(token); + expr = this.finalize(node, new Node.Literal(token.value === 'true', raw)); + break; + case 5 /* NullLiteral */: + this.context.isAssignmentTarget = false; + this.context.isBindingElement = false; + token = this.nextToken(); + raw = this.getTokenRaw(token); + expr = this.finalize(node, new Node.Literal(null, raw)); + break; + case 10 /* Template */: + expr = this.parseTemplateLiteral(); + break; + case 7 /* Punctuator */: + switch (this.lookahead.value) { + case '(': + this.context.isBindingElement = false; + expr = this.inheritCoverGrammar(this.parseGroupExpression); + break; + case '[': + expr = this.inheritCoverGrammar(this.parseArrayInitializer); + break; + case '{': + expr = this.inheritCoverGrammar(this.parseObjectInitializer); + break; + case '/': + case '/=': + this.context.isAssignmentTarget = false; + this.context.isBindingElement = false; + this.scanner.index = this.startMarker.index; + token = this.nextRegexToken(); + raw = this.getTokenRaw(token); + expr = this.finalize(node, new Node.RegexLiteral(token.regex, raw, token.pattern, token.flags)); + break; + default: + expr = this.throwUnexpectedToken(this.nextToken()); + } + break; + case 4 /* Keyword */: + if (!this.context.strict && this.context.allowYield && this.matchKeyword('yield')) { + expr = this.parseIdentifierName(); + } + else if (!this.context.strict && this.matchKeyword('let')) { + expr = this.finalize(node, new Node.Identifier(this.nextToken().value)); + } + else { + this.context.isAssignmentTarget = false; + this.context.isBindingElement = false; + if (this.matchKeyword('function')) { + expr = this.parseFunctionExpression(); + } + else if (this.matchKeyword('this')) { + this.nextToken(); + expr = this.finalize(node, new Node.ThisExpression()); + } + else if (this.matchKeyword('class')) { + expr = this.parseClassExpression(); + } + else { + expr = this.throwUnexpectedToken(this.nextToken()); + } + } + break; + default: + expr = this.throwUnexpectedToken(this.nextToken()); + } + return expr; + }; + // https://tc39.github.io/ecma262/#sec-array-initializer + Parser.prototype.parseSpreadElement = function () { + var node = this.createNode(); + this.expect('...'); + var arg = this.inheritCoverGrammar(this.parseAssignmentExpression); + return this.finalize(node, new Node.SpreadElement(arg)); + }; + Parser.prototype.parseArrayInitializer = function () { + var node = this.createNode(); + var elements = []; + this.expect('['); + while (!this.match(']')) { + if (this.match(',')) { + this.nextToken(); + elements.push(null); + } + else if (this.match('...')) { + var element = this.parseSpreadElement(); + if (!this.match(']')) { + this.context.isAssignmentTarget = false; + this.context.isBindingElement = false; + this.expect(','); + } + elements.push(element); + } + else { + elements.push(this.inheritCoverGrammar(this.parseAssignmentExpression)); + if (!this.match(']')) { + this.expect(','); + } + } + } + this.expect(']'); + return this.finalize(node, new Node.ArrayExpression(elements)); + }; + // https://tc39.github.io/ecma262/#sec-object-initializer + Parser.prototype.parsePropertyMethod = function (params) { + this.context.isAssignmentTarget = false; + this.context.isBindingElement = false; + var previousStrict = this.context.strict; + var previousAllowStrictDirective = this.context.allowStrictDirective; + this.context.allowStrictDirective = params.simple; + var body = this.isolateCoverGrammar(this.parseFunctionSourceElements); + if (this.context.strict && params.firstRestricted) { + this.tolerateUnexpectedToken(params.firstRestricted, params.message); + } + if (this.context.strict && params.stricted) { + this.tolerateUnexpectedToken(params.stricted, params.message); + } + this.context.strict = previousStrict; + this.context.allowStrictDirective = previousAllowStrictDirective; + return body; + }; + Parser.prototype.parsePropertyMethodFunction = function () { + var isGenerator = false; + var node = this.createNode(); + var previousAllowYield = this.context.allowYield; + this.context.allowYield = true; + var params = this.parseFormalParameters(); + var method = this.parsePropertyMethod(params); + this.context.allowYield = previousAllowYield; + return this.finalize(node, new Node.FunctionExpression(null, params.params, method, isGenerator)); + }; + Parser.prototype.parsePropertyMethodAsyncFunction = function () { + var node = this.createNode(); + var previousAllowYield = this.context.allowYield; + var previousAwait = this.context.await; + this.context.allowYield = false; + this.context.await = true; + var params = this.parseFormalParameters(); + var method = this.parsePropertyMethod(params); + this.context.allowYield = previousAllowYield; + this.context.await = previousAwait; + return this.finalize(node, new Node.AsyncFunctionExpression(null, params.params, method)); + }; + Parser.prototype.parseObjectPropertyKey = function () { + var node = this.createNode(); + var token = this.nextToken(); + var key; + switch (token.type) { + case 8 /* StringLiteral */: + case 6 /* NumericLiteral */: + if (this.context.strict && token.octal) { + this.tolerateUnexpectedToken(token, messages_1.Messages.StrictOctalLiteral); + } + var raw = this.getTokenRaw(token); + key = this.finalize(node, new Node.Literal(token.value, raw)); + break; + case 3 /* Identifier */: + case 1 /* BooleanLiteral */: + case 5 /* NullLiteral */: + case 4 /* Keyword */: + key = this.finalize(node, new Node.Identifier(token.value)); + break; + case 7 /* Punctuator */: + if (token.value === '[') { + key = this.isolateCoverGrammar(this.parseAssignmentExpression); + this.expect(']'); + } + else { + key = this.throwUnexpectedToken(token); + } + break; + default: + key = this.throwUnexpectedToken(token); + } + return key; + }; + Parser.prototype.isPropertyKey = function (key, value) { + return (key.type === syntax_1.Syntax.Identifier && key.name === value) || + (key.type === syntax_1.Syntax.Literal && key.value === value); + }; + Parser.prototype.parseObjectProperty = function (hasProto) { + var node = this.createNode(); + var token = this.lookahead; + var kind; + var key = null; + var value = null; + var computed = false; + var method = false; + var shorthand = false; + var isAsync = false; + if (token.type === 3 /* Identifier */) { + var id = token.value; + this.nextToken(); + computed = this.match('['); + isAsync = !this.hasLineTerminator && (id === 'async') && + !this.match(':') && !this.match('(') && !this.match('*') && !this.match(','); + key = isAsync ? this.parseObjectPropertyKey() : this.finalize(node, new Node.Identifier(id)); + } + else if (this.match('*')) { + this.nextToken(); + } + else { + computed = this.match('['); + key = this.parseObjectPropertyKey(); + } + var lookaheadPropertyKey = this.qualifiedPropertyName(this.lookahead); + if (token.type === 3 /* Identifier */ && !isAsync && token.value === 'get' && lookaheadPropertyKey) { + kind = 'get'; + computed = this.match('['); + key = this.parseObjectPropertyKey(); + this.context.allowYield = false; + value = this.parseGetterMethod(); + } + else if (token.type === 3 /* Identifier */ && !isAsync && token.value === 'set' && lookaheadPropertyKey) { + kind = 'set'; + computed = this.match('['); + key = this.parseObjectPropertyKey(); + value = this.parseSetterMethod(); + } + else if (token.type === 7 /* Punctuator */ && token.value === '*' && lookaheadPropertyKey) { + kind = 'init'; + computed = this.match('['); + key = this.parseObjectPropertyKey(); + value = this.parseGeneratorMethod(); + method = true; + } + else { + if (!key) { + this.throwUnexpectedToken(this.lookahead); + } + kind = 'init'; + if (this.match(':') && !isAsync) { + if (!computed && this.isPropertyKey(key, '__proto__')) { + if (hasProto.value) { + this.tolerateError(messages_1.Messages.DuplicateProtoProperty); + } + hasProto.value = true; + } + this.nextToken(); + value = this.inheritCoverGrammar(this.parseAssignmentExpression); + } + else if (this.match('(')) { + value = isAsync ? this.parsePropertyMethodAsyncFunction() : this.parsePropertyMethodFunction(); + method = true; + } + else if (token.type === 3 /* Identifier */) { + var id = this.finalize(node, new Node.Identifier(token.value)); + if (this.match('=')) { + this.context.firstCoverInitializedNameError = this.lookahead; + this.nextToken(); + shorthand = true; + var init = this.isolateCoverGrammar(this.parseAssignmentExpression); + value = this.finalize(node, new Node.AssignmentPattern(id, init)); + } + else { + shorthand = true; + value = id; + } + } + else { + this.throwUnexpectedToken(this.nextToken()); + } + } + return this.finalize(node, new Node.Property(kind, key, computed, value, method, shorthand)); + }; + Parser.prototype.parseObjectInitializer = function () { + var node = this.createNode(); + this.expect('{'); + var properties = []; + var hasProto = { value: false }; + while (!this.match('}')) { + properties.push(this.parseObjectProperty(hasProto)); + if (!this.match('}')) { + this.expectCommaSeparator(); + } + } + this.expect('}'); + return this.finalize(node, new Node.ObjectExpression(properties)); + }; + // https://tc39.github.io/ecma262/#sec-template-literals + Parser.prototype.parseTemplateHead = function () { + assert_1.assert(this.lookahead.head, 'Template literal must start with a template head'); + var node = this.createNode(); + var token = this.nextToken(); + var raw = token.value; + var cooked = token.cooked; + return this.finalize(node, new Node.TemplateElement({ raw: raw, cooked: cooked }, token.tail)); + }; + Parser.prototype.parseTemplateElement = function () { + if (this.lookahead.type !== 10 /* Template */) { + this.throwUnexpectedToken(); + } + var node = this.createNode(); + var token = this.nextToken(); + var raw = token.value; + var cooked = token.cooked; + return this.finalize(node, new Node.TemplateElement({ raw: raw, cooked: cooked }, token.tail)); + }; + Parser.prototype.parseTemplateLiteral = function () { + var node = this.createNode(); + var expressions = []; + var quasis = []; + var quasi = this.parseTemplateHead(); + quasis.push(quasi); + while (!quasi.tail) { + expressions.push(this.parseExpression()); + quasi = this.parseTemplateElement(); + quasis.push(quasi); + } + return this.finalize(node, new Node.TemplateLiteral(quasis, expressions)); + }; + // https://tc39.github.io/ecma262/#sec-grouping-operator + Parser.prototype.reinterpretExpressionAsPattern = function (expr) { + switch (expr.type) { + case syntax_1.Syntax.Identifier: + case syntax_1.Syntax.MemberExpression: + case syntax_1.Syntax.RestElement: + case syntax_1.Syntax.AssignmentPattern: + break; + case syntax_1.Syntax.SpreadElement: + expr.type = syntax_1.Syntax.RestElement; + this.reinterpretExpressionAsPattern(expr.argument); + break; + case syntax_1.Syntax.ArrayExpression: + expr.type = syntax_1.Syntax.ArrayPattern; + for (var i = 0; i < expr.elements.length; i++) { + if (expr.elements[i] !== null) { + this.reinterpretExpressionAsPattern(expr.elements[i]); + } + } + break; + case syntax_1.Syntax.ObjectExpression: + expr.type = syntax_1.Syntax.ObjectPattern; + for (var i = 0; i < expr.properties.length; i++) { + this.reinterpretExpressionAsPattern(expr.properties[i].value); + } + break; + case syntax_1.Syntax.AssignmentExpression: + expr.type = syntax_1.Syntax.AssignmentPattern; + delete expr.operator; + this.reinterpretExpressionAsPattern(expr.left); + break; + default: + // Allow other node type for tolerant parsing. + break; + } + }; + Parser.prototype.parseGroupExpression = function () { + var expr; + this.expect('('); + if (this.match(')')) { + this.nextToken(); + if (!this.match('=>')) { + this.expect('=>'); + } + expr = { + type: ArrowParameterPlaceHolder, + params: [], + async: false + }; + } + else { + var startToken = this.lookahead; + var params = []; + if (this.match('...')) { + expr = this.parseRestElement(params); + this.expect(')'); + if (!this.match('=>')) { + this.expect('=>'); + } + expr = { + type: ArrowParameterPlaceHolder, + params: [expr], + async: false + }; + } + else { + var arrow = false; + this.context.isBindingElement = true; + expr = this.inheritCoverGrammar(this.parseAssignmentExpression); + if (this.match(',')) { + var expressions = []; + this.context.isAssignmentTarget = false; + expressions.push(expr); + while (this.lookahead.type !== 2 /* EOF */) { + if (!this.match(',')) { + break; + } + this.nextToken(); + if (this.match(')')) { + this.nextToken(); + for (var i = 0; i < expressions.length; i++) { + this.reinterpretExpressionAsPattern(expressions[i]); + } + arrow = true; + expr = { + type: ArrowParameterPlaceHolder, + params: expressions, + async: false + }; + } + else if (this.match('...')) { + if (!this.context.isBindingElement) { + this.throwUnexpectedToken(this.lookahead); + } + expressions.push(this.parseRestElement(params)); + this.expect(')'); + if (!this.match('=>')) { + this.expect('=>'); + } + this.context.isBindingElement = false; + for (var i = 0; i < expressions.length; i++) { + this.reinterpretExpressionAsPattern(expressions[i]); + } + arrow = true; + expr = { + type: ArrowParameterPlaceHolder, + params: expressions, + async: false + }; + } + else { + expressions.push(this.inheritCoverGrammar(this.parseAssignmentExpression)); + } + if (arrow) { + break; + } + } + if (!arrow) { + expr = this.finalize(this.startNode(startToken), new Node.SequenceExpression(expressions)); + } + } + if (!arrow) { + this.expect(')'); + if (this.match('=>')) { + if (expr.type === syntax_1.Syntax.Identifier && expr.name === 'yield') { + arrow = true; + expr = { + type: ArrowParameterPlaceHolder, + params: [expr], + async: false + }; + } + if (!arrow) { + if (!this.context.isBindingElement) { + this.throwUnexpectedToken(this.lookahead); + } + if (expr.type === syntax_1.Syntax.SequenceExpression) { + for (var i = 0; i < expr.expressions.length; i++) { + this.reinterpretExpressionAsPattern(expr.expressions[i]); + } + } + else { + this.reinterpretExpressionAsPattern(expr); + } + var parameters = (expr.type === syntax_1.Syntax.SequenceExpression ? expr.expressions : [expr]); + expr = { + type: ArrowParameterPlaceHolder, + params: parameters, + async: false + }; + } + } + this.context.isBindingElement = false; + } + } + } + return expr; + }; + // https://tc39.github.io/ecma262/#sec-left-hand-side-expressions + Parser.prototype.parseArguments = function () { + this.expect('('); + var args = []; + if (!this.match(')')) { + while (true) { + var expr = this.match('...') ? this.parseSpreadElement() : + this.isolateCoverGrammar(this.parseAssignmentExpression); + args.push(expr); + if (this.match(')')) { + break; + } + this.expectCommaSeparator(); + if (this.match(')')) { + break; + } + } + } + this.expect(')'); + return args; + }; + Parser.prototype.isIdentifierName = function (token) { + return token.type === 3 /* Identifier */ || + token.type === 4 /* Keyword */ || + token.type === 1 /* BooleanLiteral */ || + token.type === 5 /* NullLiteral */; + }; + Parser.prototype.parseIdentifierName = function () { + var node = this.createNode(); + var token = this.nextToken(); + if (!this.isIdentifierName(token)) { + this.throwUnexpectedToken(token); + } + return this.finalize(node, new Node.Identifier(token.value)); + }; + Parser.prototype.parseNewExpression = function () { + var node = this.createNode(); + var id = this.parseIdentifierName(); + assert_1.assert(id.name === 'new', 'New expression must start with `new`'); + var expr; + if (this.match('.')) { + this.nextToken(); + if (this.lookahead.type === 3 /* Identifier */ && this.context.inFunctionBody && this.lookahead.value === 'target') { + var property = this.parseIdentifierName(); + expr = new Node.MetaProperty(id, property); + } + else { + this.throwUnexpectedToken(this.lookahead); + } + } + else { + var callee = this.isolateCoverGrammar(this.parseLeftHandSideExpression); + var args = this.match('(') ? this.parseArguments() : []; + expr = new Node.NewExpression(callee, args); + this.context.isAssignmentTarget = false; + this.context.isBindingElement = false; + } + return this.finalize(node, expr); + }; + Parser.prototype.parseAsyncArgument = function () { + var arg = this.parseAssignmentExpression(); + this.context.firstCoverInitializedNameError = null; + return arg; + }; + Parser.prototype.parseAsyncArguments = function () { + this.expect('('); + var args = []; + if (!this.match(')')) { + while (true) { + var expr = this.match('...') ? this.parseSpreadElement() : + this.isolateCoverGrammar(this.parseAsyncArgument); + args.push(expr); + if (this.match(')')) { + break; + } + this.expectCommaSeparator(); + if (this.match(')')) { + break; + } + } + } + this.expect(')'); + return args; + }; + Parser.prototype.parseLeftHandSideExpressionAllowCall = function () { + var startToken = this.lookahead; + var maybeAsync = this.matchContextualKeyword('async'); + var previousAllowIn = this.context.allowIn; + this.context.allowIn = true; + var expr; + if (this.matchKeyword('super') && this.context.inFunctionBody) { + expr = this.createNode(); + this.nextToken(); + expr = this.finalize(expr, new Node.Super()); + if (!this.match('(') && !this.match('.') && !this.match('[')) { + this.throwUnexpectedToken(this.lookahead); + } + } + else { + expr = this.inheritCoverGrammar(this.matchKeyword('new') ? this.parseNewExpression : this.parsePrimaryExpression); + } + while (true) { + if (this.match('.')) { + this.context.isBindingElement = false; + this.context.isAssignmentTarget = true; + this.expect('.'); + var property = this.parseIdentifierName(); + expr = this.finalize(this.startNode(startToken), new Node.StaticMemberExpression(expr, property)); + } + else if (this.match('(')) { + var asyncArrow = maybeAsync && (startToken.lineNumber === this.lookahead.lineNumber); + this.context.isBindingElement = false; + this.context.isAssignmentTarget = false; + var args = asyncArrow ? this.parseAsyncArguments() : this.parseArguments(); + expr = this.finalize(this.startNode(startToken), new Node.CallExpression(expr, args)); + if (asyncArrow && this.match('=>')) { + for (var i = 0; i < args.length; ++i) { + this.reinterpretExpressionAsPattern(args[i]); + } + expr = { + type: ArrowParameterPlaceHolder, + params: args, + async: true + }; + } + } + else if (this.match('[')) { + this.context.isBindingElement = false; + this.context.isAssignmentTarget = true; + this.expect('['); + var property = this.isolateCoverGrammar(this.parseExpression); + this.expect(']'); + expr = this.finalize(this.startNode(startToken), new Node.ComputedMemberExpression(expr, property)); + } + else if (this.lookahead.type === 10 /* Template */ && this.lookahead.head) { + var quasi = this.parseTemplateLiteral(); + expr = this.finalize(this.startNode(startToken), new Node.TaggedTemplateExpression(expr, quasi)); + } + else { + break; + } + } + this.context.allowIn = previousAllowIn; + return expr; + }; + Parser.prototype.parseSuper = function () { + var node = this.createNode(); + this.expectKeyword('super'); + if (!this.match('[') && !this.match('.')) { + this.throwUnexpectedToken(this.lookahead); + } + return this.finalize(node, new Node.Super()); + }; + Parser.prototype.parseLeftHandSideExpression = function () { + assert_1.assert(this.context.allowIn, 'callee of new expression always allow in keyword.'); + var node = this.startNode(this.lookahead); + var expr = (this.matchKeyword('super') && this.context.inFunctionBody) ? this.parseSuper() : + this.inheritCoverGrammar(this.matchKeyword('new') ? this.parseNewExpression : this.parsePrimaryExpression); + while (true) { + if (this.match('[')) { + this.context.isBindingElement = false; + this.context.isAssignmentTarget = true; + this.expect('['); + var property = this.isolateCoverGrammar(this.parseExpression); + this.expect(']'); + expr = this.finalize(node, new Node.ComputedMemberExpression(expr, property)); + } + else if (this.match('.')) { + this.context.isBindingElement = false; + this.context.isAssignmentTarget = true; + this.expect('.'); + var property = this.parseIdentifierName(); + expr = this.finalize(node, new Node.StaticMemberExpression(expr, property)); + } + else if (this.lookahead.type === 10 /* Template */ && this.lookahead.head) { + var quasi = this.parseTemplateLiteral(); + expr = this.finalize(node, new Node.TaggedTemplateExpression(expr, quasi)); + } + else { + break; + } + } + return expr; + }; + // https://tc39.github.io/ecma262/#sec-update-expressions + Parser.prototype.parseUpdateExpression = function () { + var expr; + var startToken = this.lookahead; + if (this.match('++') || this.match('--')) { + var node = this.startNode(startToken); + var token = this.nextToken(); + expr = this.inheritCoverGrammar(this.parseUnaryExpression); + if (this.context.strict && expr.type === syntax_1.Syntax.Identifier && this.scanner.isRestrictedWord(expr.name)) { + this.tolerateError(messages_1.Messages.StrictLHSPrefix); + } + if (!this.context.isAssignmentTarget) { + this.tolerateError(messages_1.Messages.InvalidLHSInAssignment); + } + var prefix = true; + expr = this.finalize(node, new Node.UpdateExpression(token.value, expr, prefix)); + this.context.isAssignmentTarget = false; + this.context.isBindingElement = false; + } + else { + expr = this.inheritCoverGrammar(this.parseLeftHandSideExpressionAllowCall); + if (!this.hasLineTerminator && this.lookahead.type === 7 /* Punctuator */) { + if (this.match('++') || this.match('--')) { + if (this.context.strict && expr.type === syntax_1.Syntax.Identifier && this.scanner.isRestrictedWord(expr.name)) { + this.tolerateError(messages_1.Messages.StrictLHSPostfix); + } + if (!this.context.isAssignmentTarget) { + this.tolerateError(messages_1.Messages.InvalidLHSInAssignment); + } + this.context.isAssignmentTarget = false; + this.context.isBindingElement = false; + var operator = this.nextToken().value; + var prefix = false; + expr = this.finalize(this.startNode(startToken), new Node.UpdateExpression(operator, expr, prefix)); + } + } + } + return expr; + }; + // https://tc39.github.io/ecma262/#sec-unary-operators + Parser.prototype.parseAwaitExpression = function () { + var node = this.createNode(); + this.nextToken(); + var argument = this.parseUnaryExpression(); + return this.finalize(node, new Node.AwaitExpression(argument)); + }; + Parser.prototype.parseUnaryExpression = function () { + var expr; + if (this.match('+') || this.match('-') || this.match('~') || this.match('!') || + this.matchKeyword('delete') || this.matchKeyword('void') || this.matchKeyword('typeof')) { + var node = this.startNode(this.lookahead); + var token = this.nextToken(); + expr = this.inheritCoverGrammar(this.parseUnaryExpression); + expr = this.finalize(node, new Node.UnaryExpression(token.value, expr)); + if (this.context.strict && expr.operator === 'delete' && expr.argument.type === syntax_1.Syntax.Identifier) { + this.tolerateError(messages_1.Messages.StrictDelete); + } + this.context.isAssignmentTarget = false; + this.context.isBindingElement = false; + } + else if (this.context.await && this.matchContextualKeyword('await')) { + expr = this.parseAwaitExpression(); + } + else { + expr = this.parseUpdateExpression(); + } + return expr; + }; + Parser.prototype.parseExponentiationExpression = function () { + var startToken = this.lookahead; + var expr = this.inheritCoverGrammar(this.parseUnaryExpression); + if (expr.type !== syntax_1.Syntax.UnaryExpression && this.match('**')) { + this.nextToken(); + this.context.isAssignmentTarget = false; + this.context.isBindingElement = false; + var left = expr; + var right = this.isolateCoverGrammar(this.parseExponentiationExpression); + expr = this.finalize(this.startNode(startToken), new Node.BinaryExpression('**', left, right)); + } + return expr; + }; + // https://tc39.github.io/ecma262/#sec-exp-operator + // https://tc39.github.io/ecma262/#sec-multiplicative-operators + // https://tc39.github.io/ecma262/#sec-additive-operators + // https://tc39.github.io/ecma262/#sec-bitwise-shift-operators + // https://tc39.github.io/ecma262/#sec-relational-operators + // https://tc39.github.io/ecma262/#sec-equality-operators + // https://tc39.github.io/ecma262/#sec-binary-bitwise-operators + // https://tc39.github.io/ecma262/#sec-binary-logical-operators + Parser.prototype.binaryPrecedence = function (token) { + var op = token.value; + var precedence; + if (token.type === 7 /* Punctuator */) { + precedence = this.operatorPrecedence[op] || 0; + } + else if (token.type === 4 /* Keyword */) { + precedence = (op === 'instanceof' || (this.context.allowIn && op === 'in')) ? 7 : 0; + } + else { + precedence = 0; + } + return precedence; + }; + Parser.prototype.parseBinaryExpression = function () { + var startToken = this.lookahead; + var expr = this.inheritCoverGrammar(this.parseExponentiationExpression); + var token = this.lookahead; + var prec = this.binaryPrecedence(token); + if (prec > 0) { + this.nextToken(); + this.context.isAssignmentTarget = false; + this.context.isBindingElement = false; + var markers = [startToken, this.lookahead]; + var left = expr; + var right = this.isolateCoverGrammar(this.parseExponentiationExpression); + var stack = [left, token.value, right]; + var precedences = [prec]; + while (true) { + prec = this.binaryPrecedence(this.lookahead); + if (prec <= 0) { + break; + } + // Reduce: make a binary expression from the three topmost entries. + while ((stack.length > 2) && (prec <= precedences[precedences.length - 1])) { + right = stack.pop(); + var operator = stack.pop(); + precedences.pop(); + left = stack.pop(); + markers.pop(); + var node = this.startNode(markers[markers.length - 1]); + stack.push(this.finalize(node, new Node.BinaryExpression(operator, left, right))); + } + // Shift. + stack.push(this.nextToken().value); + precedences.push(prec); + markers.push(this.lookahead); + stack.push(this.isolateCoverGrammar(this.parseExponentiationExpression)); + } + // Final reduce to clean-up the stack. + var i = stack.length - 1; + expr = stack[i]; + var lastMarker = markers.pop(); + while (i > 1) { + var marker = markers.pop(); + var lastLineStart = lastMarker && lastMarker.lineStart; + var node = this.startNode(marker, lastLineStart); + var operator = stack[i - 1]; + expr = this.finalize(node, new Node.BinaryExpression(operator, stack[i - 2], expr)); + i -= 2; + lastMarker = marker; + } + } + return expr; + }; + // https://tc39.github.io/ecma262/#sec-conditional-operator + Parser.prototype.parseConditionalExpression = function () { + var startToken = this.lookahead; + var expr = this.inheritCoverGrammar(this.parseBinaryExpression); + if (this.match('?')) { + this.nextToken(); + var previousAllowIn = this.context.allowIn; + this.context.allowIn = true; + var consequent = this.isolateCoverGrammar(this.parseAssignmentExpression); + this.context.allowIn = previousAllowIn; + this.expect(':'); + var alternate = this.isolateCoverGrammar(this.parseAssignmentExpression); + expr = this.finalize(this.startNode(startToken), new Node.ConditionalExpression(expr, consequent, alternate)); + this.context.isAssignmentTarget = false; + this.context.isBindingElement = false; + } + return expr; + }; + // https://tc39.github.io/ecma262/#sec-assignment-operators + Parser.prototype.checkPatternParam = function (options, param) { + switch (param.type) { + case syntax_1.Syntax.Identifier: + this.validateParam(options, param, param.name); + break; + case syntax_1.Syntax.RestElement: + this.checkPatternParam(options, param.argument); + break; + case syntax_1.Syntax.AssignmentPattern: + this.checkPatternParam(options, param.left); + break; + case syntax_1.Syntax.ArrayPattern: + for (var i = 0; i < param.elements.length; i++) { + if (param.elements[i] !== null) { + this.checkPatternParam(options, param.elements[i]); + } + } + break; + case syntax_1.Syntax.ObjectPattern: + for (var i = 0; i < param.properties.length; i++) { + this.checkPatternParam(options, param.properties[i].value); + } + break; + default: + break; + } + options.simple = options.simple && (param instanceof Node.Identifier); + }; + Parser.prototype.reinterpretAsCoverFormalsList = function (expr) { + var params = [expr]; + var options; + var asyncArrow = false; + switch (expr.type) { + case syntax_1.Syntax.Identifier: + break; + case ArrowParameterPlaceHolder: + params = expr.params; + asyncArrow = expr.async; + break; + default: + return null; + } + options = { + simple: true, + paramSet: {} + }; + for (var i = 0; i < params.length; ++i) { + var param = params[i]; + if (param.type === syntax_1.Syntax.AssignmentPattern) { + if (param.right.type === syntax_1.Syntax.YieldExpression) { + if (param.right.argument) { + this.throwUnexpectedToken(this.lookahead); + } + param.right.type = syntax_1.Syntax.Identifier; + param.right.name = 'yield'; + delete param.right.argument; + delete param.right.delegate; + } + } + else if (asyncArrow && param.type === syntax_1.Syntax.Identifier && param.name === 'await') { + this.throwUnexpectedToken(this.lookahead); + } + this.checkPatternParam(options, param); + params[i] = param; + } + if (this.context.strict || !this.context.allowYield) { + for (var i = 0; i < params.length; ++i) { + var param = params[i]; + if (param.type === syntax_1.Syntax.YieldExpression) { + this.throwUnexpectedToken(this.lookahead); + } + } + } + if (options.message === messages_1.Messages.StrictParamDupe) { + var token = this.context.strict ? options.stricted : options.firstRestricted; + this.throwUnexpectedToken(token, options.message); + } + return { + simple: options.simple, + params: params, + stricted: options.stricted, + firstRestricted: options.firstRestricted, + message: options.message + }; + }; + Parser.prototype.parseAssignmentExpression = function () { + var expr; + if (!this.context.allowYield && this.matchKeyword('yield')) { + expr = this.parseYieldExpression(); + } + else { + var startToken = this.lookahead; + var token = startToken; + expr = this.parseConditionalExpression(); + if (token.type === 3 /* Identifier */ && (token.lineNumber === this.lookahead.lineNumber) && token.value === 'async') { + if (this.lookahead.type === 3 /* Identifier */ || this.matchKeyword('yield')) { + var arg = this.parsePrimaryExpression(); + this.reinterpretExpressionAsPattern(arg); + expr = { + type: ArrowParameterPlaceHolder, + params: [arg], + async: true + }; + } + } + if (expr.type === ArrowParameterPlaceHolder || this.match('=>')) { + // https://tc39.github.io/ecma262/#sec-arrow-function-definitions + this.context.isAssignmentTarget = false; + this.context.isBindingElement = false; + var isAsync = expr.async; + var list = this.reinterpretAsCoverFormalsList(expr); + if (list) { + if (this.hasLineTerminator) { + this.tolerateUnexpectedToken(this.lookahead); + } + this.context.firstCoverInitializedNameError = null; + var previousStrict = this.context.strict; + var previousAllowStrictDirective = this.context.allowStrictDirective; + this.context.allowStrictDirective = list.simple; + var previousAllowYield = this.context.allowYield; + var previousAwait = this.context.await; + this.context.allowYield = true; + this.context.await = isAsync; + var node = this.startNode(startToken); + this.expect('=>'); + var body = void 0; + if (this.match('{')) { + var previousAllowIn = this.context.allowIn; + this.context.allowIn = true; + body = this.parseFunctionSourceElements(); + this.context.allowIn = previousAllowIn; + } + else { + body = this.isolateCoverGrammar(this.parseAssignmentExpression); + } + var expression = body.type !== syntax_1.Syntax.BlockStatement; + if (this.context.strict && list.firstRestricted) { + this.throwUnexpectedToken(list.firstRestricted, list.message); + } + if (this.context.strict && list.stricted) { + this.tolerateUnexpectedToken(list.stricted, list.message); + } + expr = isAsync ? this.finalize(node, new Node.AsyncArrowFunctionExpression(list.params, body, expression)) : + this.finalize(node, new Node.ArrowFunctionExpression(list.params, body, expression)); + this.context.strict = previousStrict; + this.context.allowStrictDirective = previousAllowStrictDirective; + this.context.allowYield = previousAllowYield; + this.context.await = previousAwait; + } + } + else { + if (this.matchAssign()) { + if (!this.context.isAssignmentTarget) { + this.tolerateError(messages_1.Messages.InvalidLHSInAssignment); + } + if (this.context.strict && expr.type === syntax_1.Syntax.Identifier) { + var id = expr; + if (this.scanner.isRestrictedWord(id.name)) { + this.tolerateUnexpectedToken(token, messages_1.Messages.StrictLHSAssignment); + } + if (this.scanner.isStrictModeReservedWord(id.name)) { + this.tolerateUnexpectedToken(token, messages_1.Messages.StrictReservedWord); + } + } + if (!this.match('=')) { + this.context.isAssignmentTarget = false; + this.context.isBindingElement = false; + } + else { + this.reinterpretExpressionAsPattern(expr); + } + token = this.nextToken(); + var operator = token.value; + var right = this.isolateCoverGrammar(this.parseAssignmentExpression); + expr = this.finalize(this.startNode(startToken), new Node.AssignmentExpression(operator, expr, right)); + this.context.firstCoverInitializedNameError = null; + } + } + } + return expr; + }; + // https://tc39.github.io/ecma262/#sec-comma-operator + Parser.prototype.parseExpression = function () { + var startToken = this.lookahead; + var expr = this.isolateCoverGrammar(this.parseAssignmentExpression); + if (this.match(',')) { + var expressions = []; + expressions.push(expr); + while (this.lookahead.type !== 2 /* EOF */) { + if (!this.match(',')) { + break; + } + this.nextToken(); + expressions.push(this.isolateCoverGrammar(this.parseAssignmentExpression)); + } + expr = this.finalize(this.startNode(startToken), new Node.SequenceExpression(expressions)); + } + return expr; + }; + // https://tc39.github.io/ecma262/#sec-block + Parser.prototype.parseStatementListItem = function () { + var statement; + this.context.isAssignmentTarget = true; + this.context.isBindingElement = true; + if (this.lookahead.type === 4 /* Keyword */) { + switch (this.lookahead.value) { + case 'export': + if (!this.context.isModule) { + this.tolerateUnexpectedToken(this.lookahead, messages_1.Messages.IllegalExportDeclaration); + } + statement = this.parseExportDeclaration(); + break; + case 'import': + if (!this.context.isModule) { + this.tolerateUnexpectedToken(this.lookahead, messages_1.Messages.IllegalImportDeclaration); + } + statement = this.parseImportDeclaration(); + break; + case 'const': + statement = this.parseLexicalDeclaration({ inFor: false }); + break; + case 'function': + statement = this.parseFunctionDeclaration(); + break; + case 'class': + statement = this.parseClassDeclaration(); + break; + case 'let': + statement = this.isLexicalDeclaration() ? this.parseLexicalDeclaration({ inFor: false }) : this.parseStatement(); + break; + default: + statement = this.parseStatement(); + break; + } + } + else { + statement = this.parseStatement(); + } + return statement; + }; + Parser.prototype.parseBlock = function () { + var node = this.createNode(); + this.expect('{'); + var block = []; + while (true) { + if (this.match('}')) { + break; + } + block.push(this.parseStatementListItem()); + } + this.expect('}'); + return this.finalize(node, new Node.BlockStatement(block)); + }; + // https://tc39.github.io/ecma262/#sec-let-and-const-declarations + Parser.prototype.parseLexicalBinding = function (kind, options) { + var node = this.createNode(); + var params = []; + var id = this.parsePattern(params, kind); + if (this.context.strict && id.type === syntax_1.Syntax.Identifier) { + if (this.scanner.isRestrictedWord(id.name)) { + this.tolerateError(messages_1.Messages.StrictVarName); + } + } + var init = null; + if (kind === 'const') { + if (!this.matchKeyword('in') && !this.matchContextualKeyword('of')) { + if (this.match('=')) { + this.nextToken(); + init = this.isolateCoverGrammar(this.parseAssignmentExpression); + } + else { + this.throwError(messages_1.Messages.DeclarationMissingInitializer, 'const'); + } + } + } + else if ((!options.inFor && id.type !== syntax_1.Syntax.Identifier) || this.match('=')) { + this.expect('='); + init = this.isolateCoverGrammar(this.parseAssignmentExpression); + } + return this.finalize(node, new Node.VariableDeclarator(id, init)); + }; + Parser.prototype.parseBindingList = function (kind, options) { + var list = [this.parseLexicalBinding(kind, options)]; + while (this.match(',')) { + this.nextToken(); + list.push(this.parseLexicalBinding(kind, options)); + } + return list; + }; + Parser.prototype.isLexicalDeclaration = function () { + var state = this.scanner.saveState(); + this.scanner.scanComments(); + var next = this.scanner.lex(); + this.scanner.restoreState(state); + return (next.type === 3 /* Identifier */) || + (next.type === 7 /* Punctuator */ && next.value === '[') || + (next.type === 7 /* Punctuator */ && next.value === '{') || + (next.type === 4 /* Keyword */ && next.value === 'let') || + (next.type === 4 /* Keyword */ && next.value === 'yield'); + }; + Parser.prototype.parseLexicalDeclaration = function (options) { + var node = this.createNode(); + var kind = this.nextToken().value; + assert_1.assert(kind === 'let' || kind === 'const', 'Lexical declaration must be either let or const'); + var declarations = this.parseBindingList(kind, options); + this.consumeSemicolon(); + return this.finalize(node, new Node.VariableDeclaration(declarations, kind)); + }; + // https://tc39.github.io/ecma262/#sec-destructuring-binding-patterns + Parser.prototype.parseBindingRestElement = function (params, kind) { + var node = this.createNode(); + this.expect('...'); + var arg = this.parsePattern(params, kind); + return this.finalize(node, new Node.RestElement(arg)); + }; + Parser.prototype.parseArrayPattern = function (params, kind) { + var node = this.createNode(); + this.expect('['); + var elements = []; + while (!this.match(']')) { + if (this.match(',')) { + this.nextToken(); + elements.push(null); + } + else { + if (this.match('...')) { + elements.push(this.parseBindingRestElement(params, kind)); + break; + } + else { + elements.push(this.parsePatternWithDefault(params, kind)); + } + if (!this.match(']')) { + this.expect(','); + } + } + } + this.expect(']'); + return this.finalize(node, new Node.ArrayPattern(elements)); + }; + Parser.prototype.parsePropertyPattern = function (params, kind) { + var node = this.createNode(); + var computed = false; + var shorthand = false; + var method = false; + var key; + var value; + if (this.lookahead.type === 3 /* Identifier */) { + var keyToken = this.lookahead; + key = this.parseVariableIdentifier(); + var init = this.finalize(node, new Node.Identifier(keyToken.value)); + if (this.match('=')) { + params.push(keyToken); + shorthand = true; + this.nextToken(); + var expr = this.parseAssignmentExpression(); + value = this.finalize(this.startNode(keyToken), new Node.AssignmentPattern(init, expr)); + } + else if (!this.match(':')) { + params.push(keyToken); + shorthand = true; + value = init; + } + else { + this.expect(':'); + value = this.parsePatternWithDefault(params, kind); + } + } + else { + computed = this.match('['); + key = this.parseObjectPropertyKey(); + this.expect(':'); + value = this.parsePatternWithDefault(params, kind); + } + return this.finalize(node, new Node.Property('init', key, computed, value, method, shorthand)); + }; + Parser.prototype.parseObjectPattern = function (params, kind) { + var node = this.createNode(); + var properties = []; + this.expect('{'); + while (!this.match('}')) { + properties.push(this.parsePropertyPattern(params, kind)); + if (!this.match('}')) { + this.expect(','); + } + } + this.expect('}'); + return this.finalize(node, new Node.ObjectPattern(properties)); + }; + Parser.prototype.parsePattern = function (params, kind) { + var pattern; + if (this.match('[')) { + pattern = this.parseArrayPattern(params, kind); + } + else if (this.match('{')) { + pattern = this.parseObjectPattern(params, kind); + } + else { + if (this.matchKeyword('let') && (kind === 'const' || kind === 'let')) { + this.tolerateUnexpectedToken(this.lookahead, messages_1.Messages.LetInLexicalBinding); + } + params.push(this.lookahead); + pattern = this.parseVariableIdentifier(kind); + } + return pattern; + }; + Parser.prototype.parsePatternWithDefault = function (params, kind) { + var startToken = this.lookahead; + var pattern = this.parsePattern(params, kind); + if (this.match('=')) { + this.nextToken(); + var previousAllowYield = this.context.allowYield; + this.context.allowYield = true; + var right = this.isolateCoverGrammar(this.parseAssignmentExpression); + this.context.allowYield = previousAllowYield; + pattern = this.finalize(this.startNode(startToken), new Node.AssignmentPattern(pattern, right)); + } + return pattern; + }; + // https://tc39.github.io/ecma262/#sec-variable-statement + Parser.prototype.parseVariableIdentifier = function (kind) { + var node = this.createNode(); + var token = this.nextToken(); + if (token.type === 4 /* Keyword */ && token.value === 'yield') { + if (this.context.strict) { + this.tolerateUnexpectedToken(token, messages_1.Messages.StrictReservedWord); + } + else if (!this.context.allowYield) { + this.throwUnexpectedToken(token); + } + } + else if (token.type !== 3 /* Identifier */) { + if (this.context.strict && token.type === 4 /* Keyword */ && this.scanner.isStrictModeReservedWord(token.value)) { + this.tolerateUnexpectedToken(token, messages_1.Messages.StrictReservedWord); + } + else { + if (this.context.strict || token.value !== 'let' || kind !== 'var') { + this.throwUnexpectedToken(token); + } + } + } + else if ((this.context.isModule || this.context.await) && token.type === 3 /* Identifier */ && token.value === 'await') { + this.tolerateUnexpectedToken(token); + } + return this.finalize(node, new Node.Identifier(token.value)); + }; + Parser.prototype.parseVariableDeclaration = function (options) { + var node = this.createNode(); + var params = []; + var id = this.parsePattern(params, 'var'); + if (this.context.strict && id.type === syntax_1.Syntax.Identifier) { + if (this.scanner.isRestrictedWord(id.name)) { + this.tolerateError(messages_1.Messages.StrictVarName); + } + } + var init = null; + if (this.match('=')) { + this.nextToken(); + init = this.isolateCoverGrammar(this.parseAssignmentExpression); + } + else if (id.type !== syntax_1.Syntax.Identifier && !options.inFor) { + this.expect('='); + } + return this.finalize(node, new Node.VariableDeclarator(id, init)); + }; + Parser.prototype.parseVariableDeclarationList = function (options) { + var opt = { inFor: options.inFor }; + var list = []; + list.push(this.parseVariableDeclaration(opt)); + while (this.match(',')) { + this.nextToken(); + list.push(this.parseVariableDeclaration(opt)); + } + return list; + }; + Parser.prototype.parseVariableStatement = function () { + var node = this.createNode(); + this.expectKeyword('var'); + var declarations = this.parseVariableDeclarationList({ inFor: false }); + this.consumeSemicolon(); + return this.finalize(node, new Node.VariableDeclaration(declarations, 'var')); + }; + // https://tc39.github.io/ecma262/#sec-empty-statement + Parser.prototype.parseEmptyStatement = function () { + var node = this.createNode(); + this.expect(';'); + return this.finalize(node, new Node.EmptyStatement()); + }; + // https://tc39.github.io/ecma262/#sec-expression-statement + Parser.prototype.parseExpressionStatement = function () { + var node = this.createNode(); + var expr = this.parseExpression(); + this.consumeSemicolon(); + return this.finalize(node, new Node.ExpressionStatement(expr)); + }; + // https://tc39.github.io/ecma262/#sec-if-statement + Parser.prototype.parseIfClause = function () { + if (this.context.strict && this.matchKeyword('function')) { + this.tolerateError(messages_1.Messages.StrictFunction); + } + return this.parseStatement(); + }; + Parser.prototype.parseIfStatement = function () { + var node = this.createNode(); + var consequent; + var alternate = null; + this.expectKeyword('if'); + this.expect('('); + var test = this.parseExpression(); + if (!this.match(')') && this.config.tolerant) { + this.tolerateUnexpectedToken(this.nextToken()); + consequent = this.finalize(this.createNode(), new Node.EmptyStatement()); + } + else { + this.expect(')'); + consequent = this.parseIfClause(); + if (this.matchKeyword('else')) { + this.nextToken(); + alternate = this.parseIfClause(); + } + } + return this.finalize(node, new Node.IfStatement(test, consequent, alternate)); + }; + // https://tc39.github.io/ecma262/#sec-do-while-statement + Parser.prototype.parseDoWhileStatement = function () { + var node = this.createNode(); + this.expectKeyword('do'); + var previousInIteration = this.context.inIteration; + this.context.inIteration = true; + var body = this.parseStatement(); + this.context.inIteration = previousInIteration; + this.expectKeyword('while'); + this.expect('('); + var test = this.parseExpression(); + if (!this.match(')') && this.config.tolerant) { + this.tolerateUnexpectedToken(this.nextToken()); + } + else { + this.expect(')'); + if (this.match(';')) { + this.nextToken(); + } + } + return this.finalize(node, new Node.DoWhileStatement(body, test)); + }; + // https://tc39.github.io/ecma262/#sec-while-statement + Parser.prototype.parseWhileStatement = function () { + var node = this.createNode(); + var body; + this.expectKeyword('while'); + this.expect('('); + var test = this.parseExpression(); + if (!this.match(')') && this.config.tolerant) { + this.tolerateUnexpectedToken(this.nextToken()); + body = this.finalize(this.createNode(), new Node.EmptyStatement()); + } + else { + this.expect(')'); + var previousInIteration = this.context.inIteration; + this.context.inIteration = true; + body = this.parseStatement(); + this.context.inIteration = previousInIteration; + } + return this.finalize(node, new Node.WhileStatement(test, body)); + }; + // https://tc39.github.io/ecma262/#sec-for-statement + // https://tc39.github.io/ecma262/#sec-for-in-and-for-of-statements + Parser.prototype.parseForStatement = function () { + var init = null; + var test = null; + var update = null; + var forIn = true; + var left, right; + var node = this.createNode(); + this.expectKeyword('for'); + this.expect('('); + if (this.match(';')) { + this.nextToken(); + } + else { + if (this.matchKeyword('var')) { + init = this.createNode(); + this.nextToken(); + var previousAllowIn = this.context.allowIn; + this.context.allowIn = false; + var declarations = this.parseVariableDeclarationList({ inFor: true }); + this.context.allowIn = previousAllowIn; + if (declarations.length === 1 && this.matchKeyword('in')) { + var decl = declarations[0]; + if (decl.init && (decl.id.type === syntax_1.Syntax.ArrayPattern || decl.id.type === syntax_1.Syntax.ObjectPattern || this.context.strict)) { + this.tolerateError(messages_1.Messages.ForInOfLoopInitializer, 'for-in'); + } + init = this.finalize(init, new Node.VariableDeclaration(declarations, 'var')); + this.nextToken(); + left = init; + right = this.parseExpression(); + init = null; + } + else if (declarations.length === 1 && declarations[0].init === null && this.matchContextualKeyword('of')) { + init = this.finalize(init, new Node.VariableDeclaration(declarations, 'var')); + this.nextToken(); + left = init; + right = this.parseAssignmentExpression(); + init = null; + forIn = false; + } + else { + init = this.finalize(init, new Node.VariableDeclaration(declarations, 'var')); + this.expect(';'); + } + } + else if (this.matchKeyword('const') || this.matchKeyword('let')) { + init = this.createNode(); + var kind = this.nextToken().value; + if (!this.context.strict && this.lookahead.value === 'in') { + init = this.finalize(init, new Node.Identifier(kind)); + this.nextToken(); + left = init; + right = this.parseExpression(); + init = null; + } + else { + var previousAllowIn = this.context.allowIn; + this.context.allowIn = false; + var declarations = this.parseBindingList(kind, { inFor: true }); + this.context.allowIn = previousAllowIn; + if (declarations.length === 1 && declarations[0].init === null && this.matchKeyword('in')) { + init = this.finalize(init, new Node.VariableDeclaration(declarations, kind)); + this.nextToken(); + left = init; + right = this.parseExpression(); + init = null; + } + else if (declarations.length === 1 && declarations[0].init === null && this.matchContextualKeyword('of')) { + init = this.finalize(init, new Node.VariableDeclaration(declarations, kind)); + this.nextToken(); + left = init; + right = this.parseAssignmentExpression(); + init = null; + forIn = false; + } + else { + this.consumeSemicolon(); + init = this.finalize(init, new Node.VariableDeclaration(declarations, kind)); + } + } + } + else { + var initStartToken = this.lookahead; + var previousAllowIn = this.context.allowIn; + this.context.allowIn = false; + init = this.inheritCoverGrammar(this.parseAssignmentExpression); + this.context.allowIn = previousAllowIn; + if (this.matchKeyword('in')) { + if (!this.context.isAssignmentTarget || init.type === syntax_1.Syntax.AssignmentExpression) { + this.tolerateError(messages_1.Messages.InvalidLHSInForIn); + } + this.nextToken(); + this.reinterpretExpressionAsPattern(init); + left = init; + right = this.parseExpression(); + init = null; + } + else if (this.matchContextualKeyword('of')) { + if (!this.context.isAssignmentTarget || init.type === syntax_1.Syntax.AssignmentExpression) { + this.tolerateError(messages_1.Messages.InvalidLHSInForLoop); + } + this.nextToken(); + this.reinterpretExpressionAsPattern(init); + left = init; + right = this.parseAssignmentExpression(); + init = null; + forIn = false; + } + else { + if (this.match(',')) { + var initSeq = [init]; + while (this.match(',')) { + this.nextToken(); + initSeq.push(this.isolateCoverGrammar(this.parseAssignmentExpression)); + } + init = this.finalize(this.startNode(initStartToken), new Node.SequenceExpression(initSeq)); + } + this.expect(';'); + } + } + } + if (typeof left === 'undefined') { + if (!this.match(';')) { + test = this.parseExpression(); + } + this.expect(';'); + if (!this.match(')')) { + update = this.parseExpression(); + } + } + var body; + if (!this.match(')') && this.config.tolerant) { + this.tolerateUnexpectedToken(this.nextToken()); + body = this.finalize(this.createNode(), new Node.EmptyStatement()); + } + else { + this.expect(')'); + var previousInIteration = this.context.inIteration; + this.context.inIteration = true; + body = this.isolateCoverGrammar(this.parseStatement); + this.context.inIteration = previousInIteration; + } + return (typeof left === 'undefined') ? + this.finalize(node, new Node.ForStatement(init, test, update, body)) : + forIn ? this.finalize(node, new Node.ForInStatement(left, right, body)) : + this.finalize(node, new Node.ForOfStatement(left, right, body)); + }; + // https://tc39.github.io/ecma262/#sec-continue-statement + Parser.prototype.parseContinueStatement = function () { + var node = this.createNode(); + this.expectKeyword('continue'); + var label = null; + if (this.lookahead.type === 3 /* Identifier */ && !this.hasLineTerminator) { + var id = this.parseVariableIdentifier(); + label = id; + var key = '$' + id.name; + if (!Object.prototype.hasOwnProperty.call(this.context.labelSet, key)) { + this.throwError(messages_1.Messages.UnknownLabel, id.name); + } + } + this.consumeSemicolon(); + if (label === null && !this.context.inIteration) { + this.throwError(messages_1.Messages.IllegalContinue); + } + return this.finalize(node, new Node.ContinueStatement(label)); + }; + // https://tc39.github.io/ecma262/#sec-break-statement + Parser.prototype.parseBreakStatement = function () { + var node = this.createNode(); + this.expectKeyword('break'); + var label = null; + if (this.lookahead.type === 3 /* Identifier */ && !this.hasLineTerminator) { + var id = this.parseVariableIdentifier(); + var key = '$' + id.name; + if (!Object.prototype.hasOwnProperty.call(this.context.labelSet, key)) { + this.throwError(messages_1.Messages.UnknownLabel, id.name); + } + label = id; + } + this.consumeSemicolon(); + if (label === null && !this.context.inIteration && !this.context.inSwitch) { + this.throwError(messages_1.Messages.IllegalBreak); + } + return this.finalize(node, new Node.BreakStatement(label)); + }; + // https://tc39.github.io/ecma262/#sec-return-statement + Parser.prototype.parseReturnStatement = function () { + if (!this.context.inFunctionBody) { + this.tolerateError(messages_1.Messages.IllegalReturn); + } + var node = this.createNode(); + this.expectKeyword('return'); + var hasArgument = (!this.match(';') && !this.match('}') && + !this.hasLineTerminator && this.lookahead.type !== 2 /* EOF */) || + this.lookahead.type === 8 /* StringLiteral */ || + this.lookahead.type === 10 /* Template */; + var argument = hasArgument ? this.parseExpression() : null; + this.consumeSemicolon(); + return this.finalize(node, new Node.ReturnStatement(argument)); + }; + // https://tc39.github.io/ecma262/#sec-with-statement + Parser.prototype.parseWithStatement = function () { + if (this.context.strict) { + this.tolerateError(messages_1.Messages.StrictModeWith); + } + var node = this.createNode(); + var body; + this.expectKeyword('with'); + this.expect('('); + var object = this.parseExpression(); + if (!this.match(')') && this.config.tolerant) { + this.tolerateUnexpectedToken(this.nextToken()); + body = this.finalize(this.createNode(), new Node.EmptyStatement()); + } + else { + this.expect(')'); + body = this.parseStatement(); + } + return this.finalize(node, new Node.WithStatement(object, body)); + }; + // https://tc39.github.io/ecma262/#sec-switch-statement + Parser.prototype.parseSwitchCase = function () { + var node = this.createNode(); + var test; + if (this.matchKeyword('default')) { + this.nextToken(); + test = null; + } + else { + this.expectKeyword('case'); + test = this.parseExpression(); + } + this.expect(':'); + var consequent = []; + while (true) { + if (this.match('}') || this.matchKeyword('default') || this.matchKeyword('case')) { + break; + } + consequent.push(this.parseStatementListItem()); + } + return this.finalize(node, new Node.SwitchCase(test, consequent)); + }; + Parser.prototype.parseSwitchStatement = function () { + var node = this.createNode(); + this.expectKeyword('switch'); + this.expect('('); + var discriminant = this.parseExpression(); + this.expect(')'); + var previousInSwitch = this.context.inSwitch; + this.context.inSwitch = true; + var cases = []; + var defaultFound = false; + this.expect('{'); + while (true) { + if (this.match('}')) { + break; + } + var clause = this.parseSwitchCase(); + if (clause.test === null) { + if (defaultFound) { + this.throwError(messages_1.Messages.MultipleDefaultsInSwitch); + } + defaultFound = true; + } + cases.push(clause); + } + this.expect('}'); + this.context.inSwitch = previousInSwitch; + return this.finalize(node, new Node.SwitchStatement(discriminant, cases)); + }; + // https://tc39.github.io/ecma262/#sec-labelled-statements + Parser.prototype.parseLabelledStatement = function () { + var node = this.createNode(); + var expr = this.parseExpression(); + var statement; + if ((expr.type === syntax_1.Syntax.Identifier) && this.match(':')) { + this.nextToken(); + var id = expr; + var key = '$' + id.name; + if (Object.prototype.hasOwnProperty.call(this.context.labelSet, key)) { + this.throwError(messages_1.Messages.Redeclaration, 'Label', id.name); + } + this.context.labelSet[key] = true; + var body = void 0; + if (this.matchKeyword('class')) { + this.tolerateUnexpectedToken(this.lookahead); + body = this.parseClassDeclaration(); + } + else if (this.matchKeyword('function')) { + var token = this.lookahead; + var declaration = this.parseFunctionDeclaration(); + if (this.context.strict) { + this.tolerateUnexpectedToken(token, messages_1.Messages.StrictFunction); + } + else if (declaration.generator) { + this.tolerateUnexpectedToken(token, messages_1.Messages.GeneratorInLegacyContext); + } + body = declaration; + } + else { + body = this.parseStatement(); + } + delete this.context.labelSet[key]; + statement = new Node.LabeledStatement(id, body); + } + else { + this.consumeSemicolon(); + statement = new Node.ExpressionStatement(expr); + } + return this.finalize(node, statement); + }; + // https://tc39.github.io/ecma262/#sec-throw-statement + Parser.prototype.parseThrowStatement = function () { + var node = this.createNode(); + this.expectKeyword('throw'); + if (this.hasLineTerminator) { + this.throwError(messages_1.Messages.NewlineAfterThrow); + } + var argument = this.parseExpression(); + this.consumeSemicolon(); + return this.finalize(node, new Node.ThrowStatement(argument)); + }; + // https://tc39.github.io/ecma262/#sec-try-statement + Parser.prototype.parseCatchClause = function () { + var node = this.createNode(); + this.expectKeyword('catch'); + this.expect('('); + if (this.match(')')) { + this.throwUnexpectedToken(this.lookahead); + } + var params = []; + var param = this.parsePattern(params); + var paramMap = {}; + for (var i = 0; i < params.length; i++) { + var key = '$' + params[i].value; + if (Object.prototype.hasOwnProperty.call(paramMap, key)) { + this.tolerateError(messages_1.Messages.DuplicateBinding, params[i].value); + } + paramMap[key] = true; + } + if (this.context.strict && param.type === syntax_1.Syntax.Identifier) { + if (this.scanner.isRestrictedWord(param.name)) { + this.tolerateError(messages_1.Messages.StrictCatchVariable); + } + } + this.expect(')'); + var body = this.parseBlock(); + return this.finalize(node, new Node.CatchClause(param, body)); + }; + Parser.prototype.parseFinallyClause = function () { + this.expectKeyword('finally'); + return this.parseBlock(); + }; + Parser.prototype.parseTryStatement = function () { + var node = this.createNode(); + this.expectKeyword('try'); + var block = this.parseBlock(); + var handler = this.matchKeyword('catch') ? this.parseCatchClause() : null; + var finalizer = this.matchKeyword('finally') ? this.parseFinallyClause() : null; + if (!handler && !finalizer) { + this.throwError(messages_1.Messages.NoCatchOrFinally); + } + return this.finalize(node, new Node.TryStatement(block, handler, finalizer)); + }; + // https://tc39.github.io/ecma262/#sec-debugger-statement + Parser.prototype.parseDebuggerStatement = function () { + var node = this.createNode(); + this.expectKeyword('debugger'); + this.consumeSemicolon(); + return this.finalize(node, new Node.DebuggerStatement()); + }; + // https://tc39.github.io/ecma262/#sec-ecmascript-language-statements-and-declarations + Parser.prototype.parseStatement = function () { + var statement; + switch (this.lookahead.type) { + case 1 /* BooleanLiteral */: + case 5 /* NullLiteral */: + case 6 /* NumericLiteral */: + case 8 /* StringLiteral */: + case 10 /* Template */: + case 9 /* RegularExpression */: + statement = this.parseExpressionStatement(); + break; + case 7 /* Punctuator */: + var value = this.lookahead.value; + if (value === '{') { + statement = this.parseBlock(); + } + else if (value === '(') { + statement = this.parseExpressionStatement(); + } + else if (value === ';') { + statement = this.parseEmptyStatement(); + } + else { + statement = this.parseExpressionStatement(); + } + break; + case 3 /* Identifier */: + statement = this.matchAsyncFunction() ? this.parseFunctionDeclaration() : this.parseLabelledStatement(); + break; + case 4 /* Keyword */: + switch (this.lookahead.value) { + case 'break': + statement = this.parseBreakStatement(); + break; + case 'continue': + statement = this.parseContinueStatement(); + break; + case 'debugger': + statement = this.parseDebuggerStatement(); + break; + case 'do': + statement = this.parseDoWhileStatement(); + break; + case 'for': + statement = this.parseForStatement(); + break; + case 'function': + statement = this.parseFunctionDeclaration(); + break; + case 'if': + statement = this.parseIfStatement(); + break; + case 'return': + statement = this.parseReturnStatement(); + break; + case 'switch': + statement = this.parseSwitchStatement(); + break; + case 'throw': + statement = this.parseThrowStatement(); + break; + case 'try': + statement = this.parseTryStatement(); + break; + case 'var': + statement = this.parseVariableStatement(); + break; + case 'while': + statement = this.parseWhileStatement(); + break; + case 'with': + statement = this.parseWithStatement(); + break; + default: + statement = this.parseExpressionStatement(); + break; + } + break; + default: + statement = this.throwUnexpectedToken(this.lookahead); + } + return statement; + }; + // https://tc39.github.io/ecma262/#sec-function-definitions + Parser.prototype.parseFunctionSourceElements = function () { + var node = this.createNode(); + this.expect('{'); + var body = this.parseDirectivePrologues(); + var previousLabelSet = this.context.labelSet; + var previousInIteration = this.context.inIteration; + var previousInSwitch = this.context.inSwitch; + var previousInFunctionBody = this.context.inFunctionBody; + this.context.labelSet = {}; + this.context.inIteration = false; + this.context.inSwitch = false; + this.context.inFunctionBody = true; + while (this.lookahead.type !== 2 /* EOF */) { + if (this.match('}')) { + break; + } + body.push(this.parseStatementListItem()); + } + this.expect('}'); + this.context.labelSet = previousLabelSet; + this.context.inIteration = previousInIteration; + this.context.inSwitch = previousInSwitch; + this.context.inFunctionBody = previousInFunctionBody; + return this.finalize(node, new Node.BlockStatement(body)); + }; + Parser.prototype.validateParam = function (options, param, name) { + var key = '$' + name; + if (this.context.strict) { + if (this.scanner.isRestrictedWord(name)) { + options.stricted = param; + options.message = messages_1.Messages.StrictParamName; + } + if (Object.prototype.hasOwnProperty.call(options.paramSet, key)) { + options.stricted = param; + options.message = messages_1.Messages.StrictParamDupe; + } + } + else if (!options.firstRestricted) { + if (this.scanner.isRestrictedWord(name)) { + options.firstRestricted = param; + options.message = messages_1.Messages.StrictParamName; + } + else if (this.scanner.isStrictModeReservedWord(name)) { + options.firstRestricted = param; + options.message = messages_1.Messages.StrictReservedWord; + } + else if (Object.prototype.hasOwnProperty.call(options.paramSet, key)) { + options.stricted = param; + options.message = messages_1.Messages.StrictParamDupe; + } + } + /* istanbul ignore next */ + if (typeof Object.defineProperty === 'function') { + Object.defineProperty(options.paramSet, key, { value: true, enumerable: true, writable: true, configurable: true }); + } + else { + options.paramSet[key] = true; + } + }; + Parser.prototype.parseRestElement = function (params) { + var node = this.createNode(); + this.expect('...'); + var arg = this.parsePattern(params); + if (this.match('=')) { + this.throwError(messages_1.Messages.DefaultRestParameter); + } + if (!this.match(')')) { + this.throwError(messages_1.Messages.ParameterAfterRestParameter); + } + return this.finalize(node, new Node.RestElement(arg)); + }; + Parser.prototype.parseFormalParameter = function (options) { + var params = []; + var param = this.match('...') ? this.parseRestElement(params) : this.parsePatternWithDefault(params); + for (var i = 0; i < params.length; i++) { + this.validateParam(options, params[i], params[i].value); + } + options.simple = options.simple && (param instanceof Node.Identifier); + options.params.push(param); + }; + Parser.prototype.parseFormalParameters = function (firstRestricted) { + var options; + options = { + simple: true, + params: [], + firstRestricted: firstRestricted + }; + this.expect('('); + if (!this.match(')')) { + options.paramSet = {}; + while (this.lookahead.type !== 2 /* EOF */) { + this.parseFormalParameter(options); + if (this.match(')')) { + break; + } + this.expect(','); + if (this.match(')')) { + break; + } + } + } + this.expect(')'); + return { + simple: options.simple, + params: options.params, + stricted: options.stricted, + firstRestricted: options.firstRestricted, + message: options.message + }; + }; + Parser.prototype.matchAsyncFunction = function () { + var match = this.matchContextualKeyword('async'); + if (match) { + var state = this.scanner.saveState(); + this.scanner.scanComments(); + var next = this.scanner.lex(); + this.scanner.restoreState(state); + match = (state.lineNumber === next.lineNumber) && (next.type === 4 /* Keyword */) && (next.value === 'function'); + } + return match; + }; + Parser.prototype.parseFunctionDeclaration = function (identifierIsOptional) { + var node = this.createNode(); + var isAsync = this.matchContextualKeyword('async'); + if (isAsync) { + this.nextToken(); + } + this.expectKeyword('function'); + var isGenerator = isAsync ? false : this.match('*'); + if (isGenerator) { + this.nextToken(); + } + var message; + var id = null; + var firstRestricted = null; + if (!identifierIsOptional || !this.match('(')) { + var token = this.lookahead; + id = this.parseVariableIdentifier(); + if (this.context.strict) { + if (this.scanner.isRestrictedWord(token.value)) { + this.tolerateUnexpectedToken(token, messages_1.Messages.StrictFunctionName); + } + } + else { + if (this.scanner.isRestrictedWord(token.value)) { + firstRestricted = token; + message = messages_1.Messages.StrictFunctionName; + } + else if (this.scanner.isStrictModeReservedWord(token.value)) { + firstRestricted = token; + message = messages_1.Messages.StrictReservedWord; + } + } + } + var previousAllowAwait = this.context.await; + var previousAllowYield = this.context.allowYield; + this.context.await = isAsync; + this.context.allowYield = !isGenerator; + var formalParameters = this.parseFormalParameters(firstRestricted); + var params = formalParameters.params; + var stricted = formalParameters.stricted; + firstRestricted = formalParameters.firstRestricted; + if (formalParameters.message) { + message = formalParameters.message; + } + var previousStrict = this.context.strict; + var previousAllowStrictDirective = this.context.allowStrictDirective; + this.context.allowStrictDirective = formalParameters.simple; + var body = this.parseFunctionSourceElements(); + if (this.context.strict && firstRestricted) { + this.throwUnexpectedToken(firstRestricted, message); + } + if (this.context.strict && stricted) { + this.tolerateUnexpectedToken(stricted, message); + } + this.context.strict = previousStrict; + this.context.allowStrictDirective = previousAllowStrictDirective; + this.context.await = previousAllowAwait; + this.context.allowYield = previousAllowYield; + return isAsync ? this.finalize(node, new Node.AsyncFunctionDeclaration(id, params, body)) : + this.finalize(node, new Node.FunctionDeclaration(id, params, body, isGenerator)); + }; + Parser.prototype.parseFunctionExpression = function () { + var node = this.createNode(); + var isAsync = this.matchContextualKeyword('async'); + if (isAsync) { + this.nextToken(); + } + this.expectKeyword('function'); + var isGenerator = isAsync ? false : this.match('*'); + if (isGenerator) { + this.nextToken(); + } + var message; + var id = null; + var firstRestricted; + var previousAllowAwait = this.context.await; + var previousAllowYield = this.context.allowYield; + this.context.await = isAsync; + this.context.allowYield = !isGenerator; + if (!this.match('(')) { + var token = this.lookahead; + id = (!this.context.strict && !isGenerator && this.matchKeyword('yield')) ? this.parseIdentifierName() : this.parseVariableIdentifier(); + if (this.context.strict) { + if (this.scanner.isRestrictedWord(token.value)) { + this.tolerateUnexpectedToken(token, messages_1.Messages.StrictFunctionName); + } + } + else { + if (this.scanner.isRestrictedWord(token.value)) { + firstRestricted = token; + message = messages_1.Messages.StrictFunctionName; + } + else if (this.scanner.isStrictModeReservedWord(token.value)) { + firstRestricted = token; + message = messages_1.Messages.StrictReservedWord; + } + } + } + var formalParameters = this.parseFormalParameters(firstRestricted); + var params = formalParameters.params; + var stricted = formalParameters.stricted; + firstRestricted = formalParameters.firstRestricted; + if (formalParameters.message) { + message = formalParameters.message; + } + var previousStrict = this.context.strict; + var previousAllowStrictDirective = this.context.allowStrictDirective; + this.context.allowStrictDirective = formalParameters.simple; + var body = this.parseFunctionSourceElements(); + if (this.context.strict && firstRestricted) { + this.throwUnexpectedToken(firstRestricted, message); + } + if (this.context.strict && stricted) { + this.tolerateUnexpectedToken(stricted, message); + } + this.context.strict = previousStrict; + this.context.allowStrictDirective = previousAllowStrictDirective; + this.context.await = previousAllowAwait; + this.context.allowYield = previousAllowYield; + return isAsync ? this.finalize(node, new Node.AsyncFunctionExpression(id, params, body)) : + this.finalize(node, new Node.FunctionExpression(id, params, body, isGenerator)); + }; + // https://tc39.github.io/ecma262/#sec-directive-prologues-and-the-use-strict-directive + Parser.prototype.parseDirective = function () { + var token = this.lookahead; + var node = this.createNode(); + var expr = this.parseExpression(); + var directive = (expr.type === syntax_1.Syntax.Literal) ? this.getTokenRaw(token).slice(1, -1) : null; + this.consumeSemicolon(); + return this.finalize(node, directive ? new Node.Directive(expr, directive) : new Node.ExpressionStatement(expr)); + }; + Parser.prototype.parseDirectivePrologues = function () { + var firstRestricted = null; + var body = []; + while (true) { + var token = this.lookahead; + if (token.type !== 8 /* StringLiteral */) { + break; + } + var statement = this.parseDirective(); + body.push(statement); + var directive = statement.directive; + if (typeof directive !== 'string') { + break; + } + if (directive === 'use strict') { + this.context.strict = true; + if (firstRestricted) { + this.tolerateUnexpectedToken(firstRestricted, messages_1.Messages.StrictOctalLiteral); + } + if (!this.context.allowStrictDirective) { + this.tolerateUnexpectedToken(token, messages_1.Messages.IllegalLanguageModeDirective); + } + } + else { + if (!firstRestricted && token.octal) { + firstRestricted = token; + } + } + } + return body; + }; + // https://tc39.github.io/ecma262/#sec-method-definitions + Parser.prototype.qualifiedPropertyName = function (token) { + switch (token.type) { + case 3 /* Identifier */: + case 8 /* StringLiteral */: + case 1 /* BooleanLiteral */: + case 5 /* NullLiteral */: + case 6 /* NumericLiteral */: + case 4 /* Keyword */: + return true; + case 7 /* Punctuator */: + return token.value === '['; + default: + break; + } + return false; + }; + Parser.prototype.parseGetterMethod = function () { + var node = this.createNode(); + var isGenerator = false; + var previousAllowYield = this.context.allowYield; + this.context.allowYield = !isGenerator; + var formalParameters = this.parseFormalParameters(); + if (formalParameters.params.length > 0) { + this.tolerateError(messages_1.Messages.BadGetterArity); + } + var method = this.parsePropertyMethod(formalParameters); + this.context.allowYield = previousAllowYield; + return this.finalize(node, new Node.FunctionExpression(null, formalParameters.params, method, isGenerator)); + }; + Parser.prototype.parseSetterMethod = function () { + var node = this.createNode(); + var isGenerator = false; + var previousAllowYield = this.context.allowYield; + this.context.allowYield = !isGenerator; + var formalParameters = this.parseFormalParameters(); + if (formalParameters.params.length !== 1) { + this.tolerateError(messages_1.Messages.BadSetterArity); + } + else if (formalParameters.params[0] instanceof Node.RestElement) { + this.tolerateError(messages_1.Messages.BadSetterRestParameter); + } + var method = this.parsePropertyMethod(formalParameters); + this.context.allowYield = previousAllowYield; + return this.finalize(node, new Node.FunctionExpression(null, formalParameters.params, method, isGenerator)); + }; + Parser.prototype.parseGeneratorMethod = function () { + var node = this.createNode(); + var isGenerator = true; + var previousAllowYield = this.context.allowYield; + this.context.allowYield = true; + var params = this.parseFormalParameters(); + this.context.allowYield = false; + var method = this.parsePropertyMethod(params); + this.context.allowYield = previousAllowYield; + return this.finalize(node, new Node.FunctionExpression(null, params.params, method, isGenerator)); + }; + // https://tc39.github.io/ecma262/#sec-generator-function-definitions + Parser.prototype.isStartOfExpression = function () { + var start = true; + var value = this.lookahead.value; + switch (this.lookahead.type) { + case 7 /* Punctuator */: + start = (value === '[') || (value === '(') || (value === '{') || + (value === '+') || (value === '-') || + (value === '!') || (value === '~') || + (value === '++') || (value === '--') || + (value === '/') || (value === '/='); // regular expression literal + break; + case 4 /* Keyword */: + start = (value === 'class') || (value === 'delete') || + (value === 'function') || (value === 'let') || (value === 'new') || + (value === 'super') || (value === 'this') || (value === 'typeof') || + (value === 'void') || (value === 'yield'); + break; + default: + break; + } + return start; + }; + Parser.prototype.parseYieldExpression = function () { + var node = this.createNode(); + this.expectKeyword('yield'); + var argument = null; + var delegate = false; + if (!this.hasLineTerminator) { + var previousAllowYield = this.context.allowYield; + this.context.allowYield = false; + delegate = this.match('*'); + if (delegate) { + this.nextToken(); + argument = this.parseAssignmentExpression(); + } + else if (this.isStartOfExpression()) { + argument = this.parseAssignmentExpression(); + } + this.context.allowYield = previousAllowYield; + } + return this.finalize(node, new Node.YieldExpression(argument, delegate)); + }; + // https://tc39.github.io/ecma262/#sec-class-definitions + Parser.prototype.parseClassElement = function (hasConstructor) { + var token = this.lookahead; + var node = this.createNode(); + var kind = ''; + var key = null; + var value = null; + var computed = false; + var method = false; + var isStatic = false; + var isAsync = false; + if (this.match('*')) { + this.nextToken(); + } + else { + computed = this.match('['); + key = this.parseObjectPropertyKey(); + var id = key; + if (id.name === 'static' && (this.qualifiedPropertyName(this.lookahead) || this.match('*'))) { + token = this.lookahead; + isStatic = true; + computed = this.match('['); + if (this.match('*')) { + this.nextToken(); + } + else { + key = this.parseObjectPropertyKey(); + } + } + if ((token.type === 3 /* Identifier */) && !this.hasLineTerminator && (token.value === 'async')) { + var punctuator = this.lookahead.value; + if (punctuator !== ':' && punctuator !== '(' && punctuator !== '*') { + isAsync = true; + token = this.lookahead; + key = this.parseObjectPropertyKey(); + if (token.type === 3 /* Identifier */ && token.value === 'constructor') { + this.tolerateUnexpectedToken(token, messages_1.Messages.ConstructorIsAsync); + } + } + } + } + var lookaheadPropertyKey = this.qualifiedPropertyName(this.lookahead); + if (token.type === 3 /* Identifier */) { + if (token.value === 'get' && lookaheadPropertyKey) { + kind = 'get'; + computed = this.match('['); + key = this.parseObjectPropertyKey(); + this.context.allowYield = false; + value = this.parseGetterMethod(); + } + else if (token.value === 'set' && lookaheadPropertyKey) { + kind = 'set'; + computed = this.match('['); + key = this.parseObjectPropertyKey(); + value = this.parseSetterMethod(); + } + } + else if (token.type === 7 /* Punctuator */ && token.value === '*' && lookaheadPropertyKey) { + kind = 'init'; + computed = this.match('['); + key = this.parseObjectPropertyKey(); + value = this.parseGeneratorMethod(); + method = true; + } + if (!kind && key && this.match('(')) { + kind = 'init'; + value = isAsync ? this.parsePropertyMethodAsyncFunction() : this.parsePropertyMethodFunction(); + method = true; + } + if (!kind) { + this.throwUnexpectedToken(this.lookahead); + } + if (kind === 'init') { + kind = 'method'; + } + if (!computed) { + if (isStatic && this.isPropertyKey(key, 'prototype')) { + this.throwUnexpectedToken(token, messages_1.Messages.StaticPrototype); + } + if (!isStatic && this.isPropertyKey(key, 'constructor')) { + if (kind !== 'method' || !method || (value && value.generator)) { + this.throwUnexpectedToken(token, messages_1.Messages.ConstructorSpecialMethod); + } + if (hasConstructor.value) { + this.throwUnexpectedToken(token, messages_1.Messages.DuplicateConstructor); + } + else { + hasConstructor.value = true; + } + kind = 'constructor'; + } + } + return this.finalize(node, new Node.MethodDefinition(key, computed, value, kind, isStatic)); + }; + Parser.prototype.parseClassElementList = function () { + var body = []; + var hasConstructor = { value: false }; + this.expect('{'); + while (!this.match('}')) { + if (this.match(';')) { + this.nextToken(); + } + else { + body.push(this.parseClassElement(hasConstructor)); + } + } + this.expect('}'); + return body; + }; + Parser.prototype.parseClassBody = function () { + var node = this.createNode(); + var elementList = this.parseClassElementList(); + return this.finalize(node, new Node.ClassBody(elementList)); + }; + Parser.prototype.parseClassDeclaration = function (identifierIsOptional) { + var node = this.createNode(); + var previousStrict = this.context.strict; + this.context.strict = true; + this.expectKeyword('class'); + var id = (identifierIsOptional && (this.lookahead.type !== 3 /* Identifier */)) ? null : this.parseVariableIdentifier(); + var superClass = null; + if (this.matchKeyword('extends')) { + this.nextToken(); + superClass = this.isolateCoverGrammar(this.parseLeftHandSideExpressionAllowCall); + } + var classBody = this.parseClassBody(); + this.context.strict = previousStrict; + return this.finalize(node, new Node.ClassDeclaration(id, superClass, classBody)); + }; + Parser.prototype.parseClassExpression = function () { + var node = this.createNode(); + var previousStrict = this.context.strict; + this.context.strict = true; + this.expectKeyword('class'); + var id = (this.lookahead.type === 3 /* Identifier */) ? this.parseVariableIdentifier() : null; + var superClass = null; + if (this.matchKeyword('extends')) { + this.nextToken(); + superClass = this.isolateCoverGrammar(this.parseLeftHandSideExpressionAllowCall); + } + var classBody = this.parseClassBody(); + this.context.strict = previousStrict; + return this.finalize(node, new Node.ClassExpression(id, superClass, classBody)); + }; + // https://tc39.github.io/ecma262/#sec-scripts + // https://tc39.github.io/ecma262/#sec-modules + Parser.prototype.parseModule = function () { + this.context.strict = true; + this.context.isModule = true; + this.scanner.isModule = true; + var node = this.createNode(); + var body = this.parseDirectivePrologues(); + while (this.lookahead.type !== 2 /* EOF */) { + body.push(this.parseStatementListItem()); + } + return this.finalize(node, new Node.Module(body)); + }; + Parser.prototype.parseScript = function () { + var node = this.createNode(); + var body = this.parseDirectivePrologues(); + while (this.lookahead.type !== 2 /* EOF */) { + body.push(this.parseStatementListItem()); + } + return this.finalize(node, new Node.Script(body)); + }; + // https://tc39.github.io/ecma262/#sec-imports + Parser.prototype.parseModuleSpecifier = function () { + var node = this.createNode(); + if (this.lookahead.type !== 8 /* StringLiteral */) { + this.throwError(messages_1.Messages.InvalidModuleSpecifier); + } + var token = this.nextToken(); + var raw = this.getTokenRaw(token); + return this.finalize(node, new Node.Literal(token.value, raw)); + }; + // import {} ...; + Parser.prototype.parseImportSpecifier = function () { + var node = this.createNode(); + var imported; + var local; + if (this.lookahead.type === 3 /* Identifier */) { + imported = this.parseVariableIdentifier(); + local = imported; + if (this.matchContextualKeyword('as')) { + this.nextToken(); + local = this.parseVariableIdentifier(); + } + } + else { + imported = this.parseIdentifierName(); + local = imported; + if (this.matchContextualKeyword('as')) { + this.nextToken(); + local = this.parseVariableIdentifier(); + } + else { + this.throwUnexpectedToken(this.nextToken()); + } + } + return this.finalize(node, new Node.ImportSpecifier(local, imported)); + }; + // {foo, bar as bas} + Parser.prototype.parseNamedImports = function () { + this.expect('{'); + var specifiers = []; + while (!this.match('}')) { + specifiers.push(this.parseImportSpecifier()); + if (!this.match('}')) { + this.expect(','); + } + } + this.expect('}'); + return specifiers; + }; + // import ...; + Parser.prototype.parseImportDefaultSpecifier = function () { + var node = this.createNode(); + var local = this.parseIdentifierName(); + return this.finalize(node, new Node.ImportDefaultSpecifier(local)); + }; + // import <* as foo> ...; + Parser.prototype.parseImportNamespaceSpecifier = function () { + var node = this.createNode(); + this.expect('*'); + if (!this.matchContextualKeyword('as')) { + this.throwError(messages_1.Messages.NoAsAfterImportNamespace); + } + this.nextToken(); + var local = this.parseIdentifierName(); + return this.finalize(node, new Node.ImportNamespaceSpecifier(local)); + }; + Parser.prototype.parseImportDeclaration = function () { + if (this.context.inFunctionBody) { + this.throwError(messages_1.Messages.IllegalImportDeclaration); + } + var node = this.createNode(); + this.expectKeyword('import'); + var src; + var specifiers = []; + if (this.lookahead.type === 8 /* StringLiteral */) { + // import 'foo'; + src = this.parseModuleSpecifier(); + } + else { + if (this.match('{')) { + // import {bar} + specifiers = specifiers.concat(this.parseNamedImports()); + } + else if (this.match('*')) { + // import * as foo + specifiers.push(this.parseImportNamespaceSpecifier()); + } + else if (this.isIdentifierName(this.lookahead) && !this.matchKeyword('default')) { + // import foo + specifiers.push(this.parseImportDefaultSpecifier()); + if (this.match(',')) { + this.nextToken(); + if (this.match('*')) { + // import foo, * as foo + specifiers.push(this.parseImportNamespaceSpecifier()); + } + else if (this.match('{')) { + // import foo, {bar} + specifiers = specifiers.concat(this.parseNamedImports()); + } + else { + this.throwUnexpectedToken(this.lookahead); + } + } + } + else { + this.throwUnexpectedToken(this.nextToken()); + } + if (!this.matchContextualKeyword('from')) { + var message = this.lookahead.value ? messages_1.Messages.UnexpectedToken : messages_1.Messages.MissingFromClause; + this.throwError(message, this.lookahead.value); + } + this.nextToken(); + src = this.parseModuleSpecifier(); + } + this.consumeSemicolon(); + return this.finalize(node, new Node.ImportDeclaration(specifiers, src)); + }; + // https://tc39.github.io/ecma262/#sec-exports + Parser.prototype.parseExportSpecifier = function () { + var node = this.createNode(); + var local = this.parseIdentifierName(); + var exported = local; + if (this.matchContextualKeyword('as')) { + this.nextToken(); + exported = this.parseIdentifierName(); + } + return this.finalize(node, new Node.ExportSpecifier(local, exported)); + }; + Parser.prototype.parseExportDeclaration = function () { + if (this.context.inFunctionBody) { + this.throwError(messages_1.Messages.IllegalExportDeclaration); + } + var node = this.createNode(); + this.expectKeyword('export'); + var exportDeclaration; + if (this.matchKeyword('default')) { + // export default ... + this.nextToken(); + if (this.matchKeyword('function')) { + // export default function foo () {} + // export default function () {} + var declaration = this.parseFunctionDeclaration(true); + exportDeclaration = this.finalize(node, new Node.ExportDefaultDeclaration(declaration)); + } + else if (this.matchKeyword('class')) { + // export default class foo {} + var declaration = this.parseClassDeclaration(true); + exportDeclaration = this.finalize(node, new Node.ExportDefaultDeclaration(declaration)); + } + else if (this.matchContextualKeyword('async')) { + // export default async function f () {} + // export default async function () {} + // export default async x => x + var declaration = this.matchAsyncFunction() ? this.parseFunctionDeclaration(true) : this.parseAssignmentExpression(); + exportDeclaration = this.finalize(node, new Node.ExportDefaultDeclaration(declaration)); + } + else { + if (this.matchContextualKeyword('from')) { + this.throwError(messages_1.Messages.UnexpectedToken, this.lookahead.value); + } + // export default {}; + // export default []; + // export default (1 + 2); + var declaration = this.match('{') ? this.parseObjectInitializer() : + this.match('[') ? this.parseArrayInitializer() : this.parseAssignmentExpression(); + this.consumeSemicolon(); + exportDeclaration = this.finalize(node, new Node.ExportDefaultDeclaration(declaration)); + } + } + else if (this.match('*')) { + // export * from 'foo'; + this.nextToken(); + if (!this.matchContextualKeyword('from')) { + var message = this.lookahead.value ? messages_1.Messages.UnexpectedToken : messages_1.Messages.MissingFromClause; + this.throwError(message, this.lookahead.value); + } + this.nextToken(); + var src = this.parseModuleSpecifier(); + this.consumeSemicolon(); + exportDeclaration = this.finalize(node, new Node.ExportAllDeclaration(src)); + } + else if (this.lookahead.type === 4 /* Keyword */) { + // export var f = 1; + var declaration = void 0; + switch (this.lookahead.value) { + case 'let': + case 'const': + declaration = this.parseLexicalDeclaration({ inFor: false }); + break; + case 'var': + case 'class': + case 'function': + declaration = this.parseStatementListItem(); + break; + default: + this.throwUnexpectedToken(this.lookahead); + } + exportDeclaration = this.finalize(node, new Node.ExportNamedDeclaration(declaration, [], null)); + } + else if (this.matchAsyncFunction()) { + var declaration = this.parseFunctionDeclaration(); + exportDeclaration = this.finalize(node, new Node.ExportNamedDeclaration(declaration, [], null)); + } + else { + var specifiers = []; + var source = null; + var isExportFromIdentifier = false; + this.expect('{'); + while (!this.match('}')) { + isExportFromIdentifier = isExportFromIdentifier || this.matchKeyword('default'); + specifiers.push(this.parseExportSpecifier()); + if (!this.match('}')) { + this.expect(','); + } + } + this.expect('}'); + if (this.matchContextualKeyword('from')) { + // export {default} from 'foo'; + // export {foo} from 'foo'; + this.nextToken(); + source = this.parseModuleSpecifier(); + this.consumeSemicolon(); + } + else if (isExportFromIdentifier) { + // export {default}; // missing fromClause + var message = this.lookahead.value ? messages_1.Messages.UnexpectedToken : messages_1.Messages.MissingFromClause; + this.throwError(message, this.lookahead.value); + } + else { + // export {foo}; + this.consumeSemicolon(); + } + exportDeclaration = this.finalize(node, new Node.ExportNamedDeclaration(null, specifiers, source)); + } + return exportDeclaration; + }; + return Parser; + }()); + exports.Parser = Parser; + + +/***/ }, +/* 9 */ +/***/ function(module, exports) { + + "use strict"; + // Ensure the condition is true, otherwise throw an error. + // This is only to have a better contract semantic, i.e. another safety net + // to catch a logic error. The condition shall be fulfilled in normal case. + // Do NOT use this to enforce a certain condition on any user input. + Object.defineProperty(exports, "__esModule", { value: true }); + function assert(condition, message) { + /* istanbul ignore if */ + if (!condition) { + throw new Error('ASSERT: ' + message); + } + } + exports.assert = assert; + + +/***/ }, +/* 10 */ +/***/ function(module, exports) { + + "use strict"; + /* tslint:disable:max-classes-per-file */ + Object.defineProperty(exports, "__esModule", { value: true }); + var ErrorHandler = (function () { + function ErrorHandler() { + this.errors = []; + this.tolerant = false; + } + ErrorHandler.prototype.recordError = function (error) { + this.errors.push(error); + }; + ErrorHandler.prototype.tolerate = function (error) { + if (this.tolerant) { + this.recordError(error); + } + else { + throw error; + } + }; + ErrorHandler.prototype.constructError = function (msg, column) { + var error = new Error(msg); + try { + throw error; + } + catch (base) { + /* istanbul ignore else */ + if (Object.create && Object.defineProperty) { + error = Object.create(base); + Object.defineProperty(error, 'column', { value: column }); + } + } + /* istanbul ignore next */ + return error; + }; + ErrorHandler.prototype.createError = function (index, line, col, description) { + var msg = 'Line ' + line + ': ' + description; + var error = this.constructError(msg, col); + error.index = index; + error.lineNumber = line; + error.description = description; + return error; + }; + ErrorHandler.prototype.throwError = function (index, line, col, description) { + throw this.createError(index, line, col, description); + }; + ErrorHandler.prototype.tolerateError = function (index, line, col, description) { + var error = this.createError(index, line, col, description); + if (this.tolerant) { + this.recordError(error); + } + else { + throw error; + } + }; + return ErrorHandler; + }()); + exports.ErrorHandler = ErrorHandler; + + +/***/ }, +/* 11 */ +/***/ function(module, exports) { + + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + // Error messages should be identical to V8. + exports.Messages = { + BadGetterArity: 'Getter must not have any formal parameters', + BadSetterArity: 'Setter must have exactly one formal parameter', + BadSetterRestParameter: 'Setter function argument must not be a rest parameter', + ConstructorIsAsync: 'Class constructor may not be an async method', + ConstructorSpecialMethod: 'Class constructor may not be an accessor', + DeclarationMissingInitializer: 'Missing initializer in %0 declaration', + DefaultRestParameter: 'Unexpected token =', + DuplicateBinding: 'Duplicate binding %0', + DuplicateConstructor: 'A class may only have one constructor', + DuplicateProtoProperty: 'Duplicate __proto__ fields are not allowed in object literals', + ForInOfLoopInitializer: '%0 loop variable declaration may not have an initializer', + GeneratorInLegacyContext: 'Generator declarations are not allowed in legacy contexts', + IllegalBreak: 'Illegal break statement', + IllegalContinue: 'Illegal continue statement', + IllegalExportDeclaration: 'Unexpected token', + IllegalImportDeclaration: 'Unexpected token', + IllegalLanguageModeDirective: 'Illegal \'use strict\' directive in function with non-simple parameter list', + IllegalReturn: 'Illegal return statement', + InvalidEscapedReservedWord: 'Keyword must not contain escaped characters', + InvalidHexEscapeSequence: 'Invalid hexadecimal escape sequence', + InvalidLHSInAssignment: 'Invalid left-hand side in assignment', + InvalidLHSInForIn: 'Invalid left-hand side in for-in', + InvalidLHSInForLoop: 'Invalid left-hand side in for-loop', + InvalidModuleSpecifier: 'Unexpected token', + InvalidRegExp: 'Invalid regular expression', + LetInLexicalBinding: 'let is disallowed as a lexically bound name', + MissingFromClause: 'Unexpected token', + MultipleDefaultsInSwitch: 'More than one default clause in switch statement', + NewlineAfterThrow: 'Illegal newline after throw', + NoAsAfterImportNamespace: 'Unexpected token', + NoCatchOrFinally: 'Missing catch or finally after try', + ParameterAfterRestParameter: 'Rest parameter must be last formal parameter', + Redeclaration: '%0 \'%1\' has already been declared', + StaticPrototype: 'Classes may not have static property named prototype', + StrictCatchVariable: 'Catch variable may not be eval or arguments in strict mode', + StrictDelete: 'Delete of an unqualified identifier in strict mode.', + StrictFunction: 'In strict mode code, functions can only be declared at top level or inside a block', + StrictFunctionName: 'Function name may not be eval or arguments in strict mode', + StrictLHSAssignment: 'Assignment to eval or arguments is not allowed in strict mode', + StrictLHSPostfix: 'Postfix increment/decrement may not have eval or arguments operand in strict mode', + StrictLHSPrefix: 'Prefix increment/decrement may not have eval or arguments operand in strict mode', + StrictModeWith: 'Strict mode code may not include a with statement', + StrictOctalLiteral: 'Octal literals are not allowed in strict mode.', + StrictParamDupe: 'Strict mode function may not have duplicate parameter names', + StrictParamName: 'Parameter name eval or arguments is not allowed in strict mode', + StrictReservedWord: 'Use of future reserved word in strict mode', + StrictVarName: 'Variable name may not be eval or arguments in strict mode', + TemplateOctalLiteral: 'Octal literals are not allowed in template strings.', + UnexpectedEOS: 'Unexpected end of input', + UnexpectedIdentifier: 'Unexpected identifier', + UnexpectedNumber: 'Unexpected number', + UnexpectedReserved: 'Unexpected reserved word', + UnexpectedString: 'Unexpected string', + UnexpectedTemplate: 'Unexpected quasi %0', + UnexpectedToken: 'Unexpected token %0', + UnexpectedTokenIllegal: 'Unexpected token ILLEGAL', + UnknownLabel: 'Undefined label \'%0\'', + UnterminatedRegExp: 'Invalid regular expression: missing /' + }; + + +/***/ }, +/* 12 */ +/***/ function(module, exports, __nested_webpack_require_226599_226618__) { + + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + var assert_1 = __nested_webpack_require_226599_226618__(9); + var character_1 = __nested_webpack_require_226599_226618__(4); + var messages_1 = __nested_webpack_require_226599_226618__(11); + function hexValue(ch) { + return '0123456789abcdef'.indexOf(ch.toLowerCase()); + } + function octalValue(ch) { + return '01234567'.indexOf(ch); + } + var Scanner = (function () { + function Scanner(code, handler) { + this.source = code; + this.errorHandler = handler; + this.trackComment = false; + this.isModule = false; + this.length = code.length; + this.index = 0; + this.lineNumber = (code.length > 0) ? 1 : 0; + this.lineStart = 0; + this.curlyStack = []; + } + Scanner.prototype.saveState = function () { + return { + index: this.index, + lineNumber: this.lineNumber, + lineStart: this.lineStart + }; + }; + Scanner.prototype.restoreState = function (state) { + this.index = state.index; + this.lineNumber = state.lineNumber; + this.lineStart = state.lineStart; + }; + Scanner.prototype.eof = function () { + return this.index >= this.length; + }; + Scanner.prototype.throwUnexpectedToken = function (message) { + if (message === void 0) { message = messages_1.Messages.UnexpectedTokenIllegal; } + return this.errorHandler.throwError(this.index, this.lineNumber, this.index - this.lineStart + 1, message); + }; + Scanner.prototype.tolerateUnexpectedToken = function (message) { + if (message === void 0) { message = messages_1.Messages.UnexpectedTokenIllegal; } + this.errorHandler.tolerateError(this.index, this.lineNumber, this.index - this.lineStart + 1, message); + }; + // https://tc39.github.io/ecma262/#sec-comments + Scanner.prototype.skipSingleLineComment = function (offset) { + var comments = []; + var start, loc; + if (this.trackComment) { + comments = []; + start = this.index - offset; + loc = { + start: { + line: this.lineNumber, + column: this.index - this.lineStart - offset + }, + end: {} + }; + } + while (!this.eof()) { + var ch = this.source.charCodeAt(this.index); + ++this.index; + if (character_1.Character.isLineTerminator(ch)) { + if (this.trackComment) { + loc.end = { + line: this.lineNumber, + column: this.index - this.lineStart - 1 + }; + var entry = { + multiLine: false, + slice: [start + offset, this.index - 1], + range: [start, this.index - 1], + loc: loc + }; + comments.push(entry); + } + if (ch === 13 && this.source.charCodeAt(this.index) === 10) { + ++this.index; + } + ++this.lineNumber; + this.lineStart = this.index; + return comments; + } + } + if (this.trackComment) { + loc.end = { + line: this.lineNumber, + column: this.index - this.lineStart + }; + var entry = { + multiLine: false, + slice: [start + offset, this.index], + range: [start, this.index], + loc: loc + }; + comments.push(entry); + } + return comments; + }; + Scanner.prototype.skipMultiLineComment = function () { + var comments = []; + var start, loc; + if (this.trackComment) { + comments = []; + start = this.index - 2; + loc = { + start: { + line: this.lineNumber, + column: this.index - this.lineStart - 2 + }, + end: {} + }; + } + while (!this.eof()) { + var ch = this.source.charCodeAt(this.index); + if (character_1.Character.isLineTerminator(ch)) { + if (ch === 0x0D && this.source.charCodeAt(this.index + 1) === 0x0A) { + ++this.index; + } + ++this.lineNumber; + ++this.index; + this.lineStart = this.index; + } + else if (ch === 0x2A) { + // Block comment ends with '*/'. + if (this.source.charCodeAt(this.index + 1) === 0x2F) { + this.index += 2; + if (this.trackComment) { + loc.end = { + line: this.lineNumber, + column: this.index - this.lineStart + }; + var entry = { + multiLine: true, + slice: [start + 2, this.index - 2], + range: [start, this.index], + loc: loc + }; + comments.push(entry); + } + return comments; + } + ++this.index; + } + else { + ++this.index; + } + } + // Ran off the end of the file - the whole thing is a comment + if (this.trackComment) { + loc.end = { + line: this.lineNumber, + column: this.index - this.lineStart + }; + var entry = { + multiLine: true, + slice: [start + 2, this.index], + range: [start, this.index], + loc: loc + }; + comments.push(entry); + } + this.tolerateUnexpectedToken(); + return comments; + }; + Scanner.prototype.scanComments = function () { + var comments; + if (this.trackComment) { + comments = []; + } + var start = (this.index === 0); + while (!this.eof()) { + var ch = this.source.charCodeAt(this.index); + if (character_1.Character.isWhiteSpace(ch)) { + ++this.index; + } + else if (character_1.Character.isLineTerminator(ch)) { + ++this.index; + if (ch === 0x0D && this.source.charCodeAt(this.index) === 0x0A) { + ++this.index; + } + ++this.lineNumber; + this.lineStart = this.index; + start = true; + } + else if (ch === 0x2F) { + ch = this.source.charCodeAt(this.index + 1); + if (ch === 0x2F) { + this.index += 2; + var comment = this.skipSingleLineComment(2); + if (this.trackComment) { + comments = comments.concat(comment); + } + start = true; + } + else if (ch === 0x2A) { + this.index += 2; + var comment = this.skipMultiLineComment(); + if (this.trackComment) { + comments = comments.concat(comment); + } + } + else { + break; + } + } + else if (start && ch === 0x2D) { + // U+003E is '>' + if ((this.source.charCodeAt(this.index + 1) === 0x2D) && (this.source.charCodeAt(this.index + 2) === 0x3E)) { + // '-->' is a single-line comment + this.index += 3; + var comment = this.skipSingleLineComment(3); + if (this.trackComment) { + comments = comments.concat(comment); + } + } + else { + break; + } + } + else if (ch === 0x3C && !this.isModule) { + if (this.source.slice(this.index + 1, this.index + 4) === '!--') { + this.index += 4; // `/g, "")); + } + }); + Object.defineProperty(Window.prototype.toString, "e781468d8e503942bd8a2b5d75e820e3", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "e781468d8e503942bd8a2b5d75e820e3" due to: ' + e); + } + }, + '(()=>{const t=window.Map.prototype.values,a={apply:(a,e,p)=>{try{const a=Array.from(t.call(e))[0];(a?.parentElement?.matches(".supbar")||a?.matches?.(".rotator"))&&(e=new Map)}catch(t){}return Reflect.apply(a,e,p)}};window.Map.prototype.values=new Proxy(window.Map.prototype.values,a)})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString.d64b4dac3a9d8fa9ed65b3d8c658a01f === e) return; + (()=>{ + const e = window.Map.prototype.values, t = { + apply: (t, a, r)=>{ + try { + var _t_parentElement, _t_matches; + const t = Array.from(e.call(a))[0]; + ((t === null || t === void 0 ? void 0 : (_t_parentElement = t.parentElement) === null || _t_parentElement === void 0 ? void 0 : _t_parentElement.matches(".supbar")) || (t === null || t === void 0 ? void 0 : (_t_matches = t.matches) === null || _t_matches === void 0 ? void 0 : _t_matches.call(t, ".rotator"))) && (a = new Map); + } catch (e) {} + return Reflect.apply(t, a, r); + } + }; + window.Map.prototype.values = new Proxy(window.Map.prototype.values, t); + })(); + Object.defineProperty(Window.prototype.toString, "d64b4dac3a9d8fa9ed65b3d8c658a01f", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "d64b4dac3a9d8fa9ed65b3d8c658a01f" due to: ' + e); + } + }, + "(function() { var isSet = false; Object.defineProperty(window, 'vas', { get: function() { return isSet ? false : undefined; }, set: function() { isSet = false; } }); })();": ()=>{ + try { + const e = "done"; + if (Window.prototype.toString.d818588d2f70a2feaf95e6d52f17ccbe === e) return; + !function() { + var e = !1; + Object.defineProperty(window, "vas", { + get: function() { + return !e && void 0; + }, + set: function() { + e = !1; + } + }); + }(); + Object.defineProperty(Window.prototype.toString, "d818588d2f70a2feaf95e6d52f17ccbe", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "d818588d2f70a2feaf95e6d52f17ccbe" due to: ' + e); + } + }, + "window.trckd = true;": ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["9694a84d652f8dc20c14bac2f5d04885"] === e) return; + window.trckd = !0; + Object.defineProperty(Window.prototype.toString, "9694a84d652f8dc20c14bac2f5d04885", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "9694a84d652f8dc20c14bac2f5d04885" due to: ' + e); + } + }, + "window.ab = false;": ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["4b8a3a3cee481368c865f50cdb63083f"] === e) return; + window.ab = !1; + Object.defineProperty(Window.prototype.toString, "4b8a3a3cee481368c865f50cdb63083f", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "4b8a3a3cee481368c865f50cdb63083f" due to: ' + e); + } + }, + "window.aadnet = {};": ()=>{ + try { + const d = "done"; + if (Window.prototype.toString["723ed96afa36adad6fac95f60ddc793d"] === d) return; + window.aadnet = {}; + Object.defineProperty(Window.prototype.toString, "723ed96afa36adad6fac95f60ddc793d", { + value: d, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (d) { + console.error('Error executing AG js rule with uniqueId "723ed96afa36adad6fac95f60ddc793d" due to: ' + d); + } + }, + "var isadblock=1;": ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["0528f2e6eabb867d601e3b5619e18249"] === e) return; + var isadblock = 1; + Object.defineProperty(Window.prototype.toString, "0528f2e6eabb867d601e3b5619e18249", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "0528f2e6eabb867d601e3b5619e18249" due to: ' + e); + } + }, + "function setTimeout() {};": ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["2fe08ac469bce8e0959ec04f0f994427"] === e) return; + function setTimeout1() {} + Object.defineProperty(Window.prototype.toString, "2fe08ac469bce8e0959ec04f0f994427", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (t) { + console.error('Error executing AG js rule with uniqueId "2fe08ac469bce8e0959ec04f0f994427" due to: ' + t); + } + }, + "var block = false;": ()=>{ + try { + const a = "done"; + if (Window.prototype.toString["84381f8c4a4c9c214a07baa32a8b8a38"] === a) return; + var block = !1; + Object.defineProperty(Window.prototype.toString, "84381f8c4a4c9c214a07baa32a8b8a38", { + value: a, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (a) { + console.error('Error executing AG js rule with uniqueId "84381f8c4a4c9c214a07baa32a8b8a38" due to: ' + a); + } + }, + "window.setTimeout=function() {};": ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["61f2a933309703d6e7d9383e4428a8e6"] === e) return; + window.setTimeout = function() {}; + Object.defineProperty(Window.prototype.toString, "61f2a933309703d6e7d9383e4428a8e6", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "61f2a933309703d6e7d9383e4428a8e6" due to: ' + e); + } + }, + "var canRunAds = true;": ()=>{ + try { + const c = "done"; + if (Window.prototype.toString["8a68886c66c8ca4dccac563705f5891c"] === c) return; + var canRunAds = !0; + Object.defineProperty(Window.prototype.toString, "8a68886c66c8ca4dccac563705f5891c", { + value: c, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (c) { + console.error('Error executing AG js rule with uniqueId "8a68886c66c8ca4dccac563705f5891c" due to: ' + c); + } + }, + "Element.prototype.attachShadow = function(){};": ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["34432d844bc8123e149136a1ccd4dca3"] === e) return; + Element.prototype.attachShadow = function() {}; + Object.defineProperty(Window.prototype.toString, "34432d844bc8123e149136a1ccd4dca3", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "34432d844bc8123e149136a1ccd4dca3" due to: ' + e); + } + }, + "window.atob = function() {};": ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["1dd67b659846dea638d69419abe06c73"] === e) return; + window.atob = function() {}; + Object.defineProperty(Window.prototype.toString, "1dd67b659846dea638d69419abe06c73", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "1dd67b659846dea638d69419abe06c73" due to: ' + e); + } + }, + "(function() { var intervalId = 0; var blockAds = function() { try { if (typeof BeSeedRotator != 'undefined' && BeSeedRotator.Container.player) { clearInterval(intervalId); BeSeedRotator.showDismissButton(); BeSeedRotator.reCache(); } } catch (ex) {} }; intervalId = setInterval(blockAds, 100); })();": ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["52c186b38202f876b11210bbe1307dcf"] === e) return; + !function() { + var e = 0; + e = setInterval(function() { + try { + if ("undefined" != typeof BeSeedRotator && BeSeedRotator.Container.player) { + clearInterval(e); + BeSeedRotator.showDismissButton(); + BeSeedRotator.reCache(); + } + } catch (e) {} + }, 100); + }(); + Object.defineProperty(Window.prototype.toString, "52c186b38202f876b11210bbe1307dcf", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "52c186b38202f876b11210bbe1307dcf" due to: ' + e); + } + }, + '(function(){var getElementsByTagName=document.getElementsByTagName;document.getElementsByTagName=function(tagName){if(tagName=="script")return[];return getElementsByTagName.call(this,tagName)}})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString.b1d2d1ecc236da7e56f0c6627c80f309 === e) return; + !function() { + var e = document.getElementsByTagName; + document.getElementsByTagName = function(t) { + return "script" == t ? [] : e.call(this, t); + }; + }(); + Object.defineProperty(Window.prototype.toString, "b1d2d1ecc236da7e56f0c6627c80f309", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "b1d2d1ecc236da7e56f0c6627c80f309" due to: ' + e); + } + }, + '(function(){var b={};(function(a,c,d){"undefined"!==typeof window[a]?window[a][c]=d:Object.defineProperty(window,a,{get:function(){return b[a]},set:function(e){b[a]=e;e[c]=d}})})("authConfig","adfox",[])})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString.f08e1e484fb2ed477eff5477b270c3ab === e) return; + !function() { + var e, o, t, n1 = {}; + e = "authConfig", o = "adfox", t = [], void 0 !== window[e] ? window[e][o] = t : Object.defineProperty(window, e, { + get: function() { + return n1[e]; + }, + set: function(r) { + n1[e] = r; + r[o] = t; + } + }); + }(); + Object.defineProperty(Window.prototype.toString, "f08e1e484fb2ed477eff5477b270c3ab", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "f08e1e484fb2ed477eff5477b270c3ab" due to: ' + e); + } + }, + "document.addEventListener('click',function(e){var t=e.target.closest('.click_coupons_code');if(!t)return;e.stopPropagation();e.preventDefault();var u=t.dataset.hrefAlt||null;if(u)location.href=u},true);": ()=>{ + try { + const e = "done"; + if (Window.prototype.toString.dd29b63b5d4d49aaa50e088388b6539b === e) return; + document.addEventListener("click", function(e) { + var t = e.target.closest(".click_coupons_code"); + if (t) { + e.stopPropagation(); + e.preventDefault(); + var o = t.dataset.hrefAlt || null; + o && (location.href = o); + } + }, !0); + Object.defineProperty(Window.prototype.toString, "dd29b63b5d4d49aaa50e088388b6539b", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "dd29b63b5d4d49aaa50e088388b6539b" due to: ' + e); + } + }, + "(function(){var i=setInterval(function(){var f=window.CashbackOpenCouponGlobal;if(f){window.CashbackOpenCouponGlobal=function(a){if(a&&a.IS_CODE){try{Cookies.set('CASHBACK_OPEN_OFFER',a.ID,{expires:new Date(Date.now()+1800000)});Cookies.set('CASHBACK_SCROLL_TOP',window.scrollY,{expires:new Date(Date.now()+1800000)})}catch(e){}var u=new URL(location.href);u.hash='';u.searchParams.delete('ncc');u.searchParams.delete('pr');u.searchParams.set('ncc','1');location.href=u.toString();return}return f(a)};clearInterval(i)}},5)})();": ()=>{ + try { + const e = "done"; + if (Window.prototype.toString.e80c2ebcba2ebb31126bf54b39c993de === e) return; + !function() { + var e = setInterval(function() { + var o = window.CashbackOpenCouponGlobal; + if (o) { + window.CashbackOpenCouponGlobal = function(e) { + if (!e || !e.IS_CODE) return o(e); + try { + Cookies.set("CASHBACK_OPEN_OFFER", e.ID, { + expires: new Date(Date.now() + 18e5) + }); + Cookies.set("CASHBACK_SCROLL_TOP", window.scrollY, { + expires: new Date(Date.now() + 18e5) + }); + } catch (e) {} + var r = new URL(location.href); + r.hash = ""; + r.searchParams.delete("ncc"); + r.searchParams.delete("pr"); + r.searchParams.set("ncc", "1"); + location.href = r.toString(); + }; + clearInterval(e); + } + }, 5); + }(); + Object.defineProperty(Window.prototype.toString, "e80c2ebcba2ebb31126bf54b39c993de", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "e80c2ebcba2ebb31126bf54b39c993de" due to: ' + e); + } + }, + '!function(){const p={apply:(p,e,n)=>{const r=Reflect.apply(p,e,n),s=r?.[0]?.props?.data;return s&&null===s.user&&(r[0].props.data.user="guest"),r}};window.JSON.parse=new Proxy(window.JSON.parse,p)}();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString.ff8cf9783100a66d151550ce6ced34a2 === e) return; + !function() { + const e = { + apply: (e, r, t)=>{ + var _o__props, _o_; + const o = Reflect.apply(e, r, t), n1 = o === null || o === void 0 ? void 0 : (_o_ = o[0]) === null || _o_ === void 0 ? void 0 : (_o__props = _o_.props) === null || _o__props === void 0 ? void 0 : _o__props.data; + return n1 && null === n1.user && (o[0].props.data.user = "guest"), o; + } + }; + window.JSON.parse = new Proxy(window.JSON.parse, e); + }(); + Object.defineProperty(Window.prototype.toString, "ff8cf9783100a66d151550ce6ced34a2", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "ff8cf9783100a66d151550ce6ced34a2" due to: ' + e); + } + }, + "(()=>{const a={apply:(a,t,r)=>{try{!0===r[0]?.parameters?.[1]?.autoplay&&(r[0].parameters[1].autoplay=!1)}catch(a){console.trace(a)}return Reflect.apply(a,t,r)}};window.JSON.stringify=new Proxy(window.JSON.stringify,a)})();": ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["4f79921d4ac95552f4af81dfd58692a0"] === e) return; + (()=>{ + const e = { + apply: (e, r, t)=>{ + try { + var _t__parameters_, _t__parameters, _t_; + !0 === ((_t_ = t[0]) === null || _t_ === void 0 ? void 0 : (_t__parameters = _t_.parameters) === null || _t__parameters === void 0 ? void 0 : (_t__parameters_ = _t__parameters[1]) === null || _t__parameters_ === void 0 ? void 0 : _t__parameters_.autoplay) && (t[0].parameters[1].autoplay = !1); + } catch (e) { + console.trace(e); + } + return Reflect.apply(e, r, t); + } + }; + window.JSON.stringify = new Proxy(window.JSON.stringify, e); + })(); + Object.defineProperty(Window.prototype.toString, "4f79921d4ac95552f4af81dfd58692a0", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "4f79921d4ac95552f4af81dfd58692a0" due to: ' + e); + } + }, + '(()=>{const a=(a,b,c)=>{const d=Reflect.apply(a,b,c),e="div[id^=\'atf\']:empty { display: none !important; }";if("adoptedStyleSheets"in document){const a=new CSSStyleSheet;a.replaceSync(e),d.adoptedStyleSheets=[a]}else{const a=document.createElement("style");a.innerText=e,d.appendChild(a)}return d};window.Element.prototype.attachShadow=new Proxy(window.Element.prototype.attachShadow,{apply:a})})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString.b8fa834f4adf06d6a85a989a38de37be === e) return; + window.Element.prototype.attachShadow = new Proxy(window.Element.prototype.attachShadow, { + apply: (e, t, a)=>{ + const o = Reflect.apply(e, t, a), n1 = "div[id^='atf']:empty { display: none !important; }"; + if ("adoptedStyleSheets" in document) { + const e = new CSSStyleSheet; + e.replaceSync(n1), o.adoptedStyleSheets = [ + e + ]; + } else { + const e = document.createElement("style"); + e.innerText = n1, o.appendChild(e); + } + return o; + } + }); + Object.defineProperty(Window.prototype.toString, "b8fa834f4adf06d6a85a989a38de37be", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "b8fa834f4adf06d6a85a989a38de37be" due to: ' + e); + } + }, + "window.samDetected = false;": ()=>{ + try { + const e = "done"; + if (Window.prototype.toString.c377d77d43a05809c9a0d8a9ceab3d41 === e) return; + window.samDetected = !1; + Object.defineProperty(Window.prototype.toString, "c377d77d43a05809c9a0d8a9ceab3d41", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "c377d77d43a05809c9a0d8a9ceab3d41" due to: ' + e); + } + }, + "var _amw1 = 1;": ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["18c5b42ee23d66b2e421249a57fa79b6"] === e) return; + var _amw1 = 1; + Object.defineProperty(Window.prototype.toString, "18c5b42ee23d66b2e421249a57fa79b6", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "18c5b42ee23d66b2e421249a57fa79b6" due to: ' + e); + } + }, + "var AdmostClient = 1;": ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["68f39c1ee25950ec0093a17497f1746a"] === e) return; + var AdmostClient = 1; + Object.defineProperty(Window.prototype.toString, "68f39c1ee25950ec0093a17497f1746a", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "68f39c1ee25950ec0093a17497f1746a" due to: ' + e); + } + }, + "var advertisement_not_blocked = 1;": ()=>{ + try { + const d = "done"; + if (Window.prototype.toString["7d86fff0df182d87d917f92dd5565564"] === d) return; + var advertisement_not_blocked = 1; + Object.defineProperty(Window.prototype.toString, "7d86fff0df182d87d917f92dd5565564", { + value: d, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (d) { + console.error('Error executing AG js rule with uniqueId "7d86fff0df182d87d917f92dd5565564" due to: ' + d); + } + }, + "var criteo_medyanet_loaded = 1;": ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["36a1a7ba76fefd6b56dea5d5a3260cf4"] === e) return; + var criteo_medyanet_loaded = 1; + Object.defineProperty(Window.prototype.toString, "36a1a7ba76fefd6b56dea5d5a3260cf4", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "36a1a7ba76fefd6b56dea5d5a3260cf4" due to: ' + e); + } + }, + '(function(){var b=window.setTimeout;window.setTimeout=function(a,c){if(!/RTCPeerConnection[\\s\\S]*?new MouseEvent\\("click"/.test(a.toString()))return b(a,c)};})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString.ad3cc2fb594ccbd52529466a1f774118 === e) return; + !function() { + var e = window.setTimeout; + window.setTimeout = function(t, o) { + if (!/RTCPeerConnection[\s\S]*?new MouseEvent\("click"/.test(t.toString())) return e(t, o); + }; + }(); + Object.defineProperty(Window.prototype.toString, "ad3cc2fb594ccbd52529466a1f774118", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "ad3cc2fb594ccbd52529466a1f774118" due to: ' + e); + } + }, + '(()=>{document.addEventListener("DOMContentLoaded",(()=>{"function"==typeof load_3rdparties&&load_3rdparties()}));})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString.d32c830c0e926685887f2481f9379565 === e) return; + document.addEventListener("DOMContentLoaded", ()=>{ + "function" == typeof load_3rdparties && load_3rdparties(); + }); + Object.defineProperty(Window.prototype.toString, "d32c830c0e926685887f2481f9379565", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "d32c830c0e926685887f2481f9379565" due to: ' + e); + } + }, + '!function(){if(-1{ + try { + const o = "done"; + if (Window.prototype.toString["8286156f54f298badd47131511830b06"] === o) return; + !function() { + if (-1 < window.location.href.indexOf("/?u=aHR0c")) { + var o = location.href.split("/?u="); + if (o[1]) try { + window.location = atob(o[1]); + } catch (o) {} + } + }(); + Object.defineProperty(Window.prototype.toString, "8286156f54f298badd47131511830b06", { + value: o, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (o) { + console.error('Error executing AG js rule with uniqueId "8286156f54f298badd47131511830b06" due to: ' + o); + } + }, + 'document.cookie="modalads=yes; path=/;";': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["48f46432b0c186dccc332dff0c8a87fe"] === e) return; + document.cookie = "modalads=yes; path=/;"; + Object.defineProperty(Window.prototype.toString, "48f46432b0c186dccc332dff0c8a87fe", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "48f46432b0c186dccc332dff0c8a87fe" due to: ' + e); + } + }, + "if(window.sessionStorage) { window.sessionStorage.pageCount = 0; }": ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["96c1872f8a0322e86045b358d415f5c4"] === e) return; + window.sessionStorage && (window.sessionStorage.pageCount = 0); + Object.defineProperty(Window.prototype.toString, "96c1872f8a0322e86045b358d415f5c4", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "96c1872f8a0322e86045b358d415f5c4" due to: ' + e); + } + }, + 'setTimeout ("HideFloatAdBanner()", 1000);': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["56182d371d85af85aa5af8cbd48e5b34"] === e) return; + setTimeout("HideFloatAdBanner()", 1e3); + Object.defineProperty(Window.prototype.toString, "56182d371d85af85aa5af8cbd48e5b34", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "56182d371d85af85aa5af8cbd48e5b34" due to: ' + e); + } + }, + '!function(){const e={apply:(e,t,n)=>(n&&n[1]&&"useAdBlockerDetector"===n[1]&&n[2]&&n[2].get&&(n[2].get=function(){return function(){return!1}}),Reflect.apply(e,t,n))};window.Object.defineProperty=new Proxy(window.Object.defineProperty,e)}();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["121f6100a828e1c169bfff6bafc69bfd"] === e) return; + !function() { + const e = { + apply: (e, t, r)=>(r && r[1] && "useAdBlockerDetector" === r[1] && r[2] && r[2].get && (r[2].get = function() { + return function() { + return !1; + }; + }), Reflect.apply(e, t, r)) + }; + window.Object.defineProperty = new Proxy(window.Object.defineProperty, e); + }(); + Object.defineProperty(Window.prototype.toString, "121f6100a828e1c169bfff6bafc69bfd", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "121f6100a828e1c169bfff6bafc69bfd" due to: ' + e); + } + }, + "window.google_tag_manager = function() {};": ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["62de8ad86c59d0b7297a578a18ec0db3"] === e) return; + window.google_tag_manager = function() {}; + Object.defineProperty(Window.prototype.toString, "62de8ad86c59d0b7297a578a18ec0db3", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "62de8ad86c59d0b7297a578a18ec0db3" due to: ' + e); + } + }, + "(()=>{const e=function(){};window.tC={privacy:{getOptinCategories:e,cookieData:[]},addConsentChangeListener:e,removeConsentChangeListener:e,container:{reload:e}},window.tc_events_global=e})();": ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["3e6ad3ca98205e8e015d731852c14ada"] === e) return; + (()=>{ + const e = function() {}; + window.tC = { + privacy: { + getOptinCategories: e, + cookieData: [] + }, + addConsentChangeListener: e, + removeConsentChangeListener: e, + container: { + reload: e + } + }, window.tc_events_global = e; + })(); + Object.defineProperty(Window.prototype.toString, "3e6ad3ca98205e8e015d731852c14ada", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "3e6ad3ca98205e8e015d731852c14ada" due to: ' + e); + } + }, + '(()=>{window.TATM=window.TATM||{},TATM.init=()=>{},TATM.initAdUnits=()=>{},TATM.pageReady=()=>{},TATM.getVast=function(n){return new Promise((n=>{n()}))},TATM.push=function(n){if("function"==typeof n)try{n()}catch(n){console.debug(n)}};})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["103de1b5e23e730a477b9b7da10564a4"] === e) return; + window.TATM = window.TATM || {}, TATM.init = ()=>{}, TATM.initAdUnits = ()=>{}, TATM.pageReady = ()=>{}, TATM.getVast = function(e) { + return new Promise((e)=>{ + e(); + }); + }, TATM.push = function(e) { + if ("function" == typeof e) try { + e(); + } catch (e) { + console.debug(e); + } + }; + Object.defineProperty(Window.prototype.toString, "103de1b5e23e730a477b9b7da10564a4", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "103de1b5e23e730a477b9b7da10564a4" due to: ' + e); + } + }, + '(()=>{document.location.href.includes("/pop_advisor")&&window.addEventListener("load",()=>{const e=new CustomEvent("visibilitychange"),t=t=>{Object.defineProperty(t.view.top.document,"hidden",{value:!0,writable:!0}),t.view.top.document.dispatchEvent(e),setTimeout((()=>{Object.defineProperty(t.view.top.document,"hidden",{value:!1,writable:!0}),t.view.top.document.dispatchEvent(e)}),100)},n=document.querySelector("button.btn-continu");n&&n.addEventListener("click",t)});})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["962185cb0a55f058eae7c7389bbc7327"] === e) return; + document.location.href.includes("/pop_advisor") && window.addEventListener("load", ()=>{ + const e = new CustomEvent("visibilitychange"), t = document.querySelector("button.btn-continu"); + t && t.addEventListener("click", (t)=>{ + Object.defineProperty(t.view.top.document, "hidden", { + value: !0, + writable: !0 + }), t.view.top.document.dispatchEvent(e), setTimeout(()=>{ + Object.defineProperty(t.view.top.document, "hidden", { + value: !1, + writable: !0 + }), t.view.top.document.dispatchEvent(e); + }, 100); + }); + }); + Object.defineProperty(Window.prototype.toString, "962185cb0a55f058eae7c7389bbc7327", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "962185cb0a55f058eae7c7389bbc7327" due to: ' + e); + } + }, + '(()=>{document.location.href.includes("/iframe_ad")&&window.addEventListener("load",(()=>{const e=new CustomEvent("visibilitychange"),t=()=>{Object.defineProperty(document,"hidden",{value:!0,writable:!0}),document.dispatchEvent(e),setTimeout((()=>{Object.defineProperty(document,"hidden",{value:!1,writable:!0}),document.dispatchEvent(e)}),100)},n=document.querySelector("a.btn-ad-iframe");n&&n.addEventListener("click",t)}));})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString.a715b406996eaeeeaf44515461187620 === e) return; + document.location.href.includes("/iframe_ad") && window.addEventListener("load", ()=>{ + const e = new CustomEvent("visibilitychange"), t = document.querySelector("a.btn-ad-iframe"); + t && t.addEventListener("click", ()=>{ + Object.defineProperty(document, "hidden", { + value: !0, + writable: !0 + }), document.dispatchEvent(e), setTimeout(()=>{ + Object.defineProperty(document, "hidden", { + value: !1, + writable: !0 + }), document.dispatchEvent(e); + }, 100); + }); + }); + Object.defineProperty(Window.prototype.toString, "a715b406996eaeeeaf44515461187620", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "a715b406996eaeeeaf44515461187620" due to: ' + e); + } + }, + '(function(){var a={cmd:[],public:{getVideoAdUrl:function(){},createNewPosition:function(){},refreshAds:function(){},setTargetingOnPosition:function(){},getDailymotionAdsParamsForScript:function(c,a){if("function"==typeof a)try{if(1===a.length){a({})}}catch(a){}}}};a.cmd.push=function(b){let a=function(){try{"function"==typeof b&&b()}catch(a){}};"complete"===document.readyState?a():window.addEventListener("load",()=>{a()})},window.jad=a})();': ()=>{ + try { + const t = "done"; + if (Window.prototype.toString["176456e95ac0c8ff1ac49bbf30461c8b"] === t) return; + !function() { + var t = { + cmd: [], + public: { + getVideoAdUrl: function() {}, + createNewPosition: function() {}, + refreshAds: function() {}, + setTargetingOnPosition: function() {}, + getDailymotionAdsParamsForScript: function(t, e) { + if ("function" == typeof e) try { + 1 === e.length && e({}); + } catch (e) {} + } + } + }; + t.cmd.push = function(t) { + let e = function() { + try { + "function" == typeof t && t(); + } catch (t) {} + }; + "complete" === document.readyState ? e() : window.addEventListener("load", ()=>{ + e(); + }); + }, window.jad = t; + }(); + Object.defineProperty(Window.prototype.toString, "176456e95ac0c8ff1ac49bbf30461c8b", { + value: t, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (t) { + console.error('Error executing AG js rule with uniqueId "176456e95ac0c8ff1ac49bbf30461c8b" due to: ' + t); + } + }, + "var _st = window.setTimeout; window.setTimeout = function(a, b) { if(!/target_url/.test(a)){ _st(a,b);}};": ()=>{ + try { + const t = "done"; + if (Window.prototype.toString["315672b76833d426a2a0b83c85c50797"] === t) return; + var _st = window.setTimeout; + window.setTimeout = function(t, e) { + /target_url/.test(t) || _st(t, e); + }; + Object.defineProperty(Window.prototype.toString, "315672b76833d426a2a0b83c85c50797", { + value: t, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (t) { + console.error('Error executing AG js rule with uniqueId "315672b76833d426a2a0b83c85c50797" due to: ' + t); + } + }, + '(function(){let callCounter=0;const nativeJSONParse=JSON.parse;const handler={apply(){callCounter++;const obj=Reflect.apply(...arguments);if(callCounter<=10){if(obj.hasOwnProperty("appName")){if(obj.applaunch?.data?.player?.features?.ad?.enabled){obj.applaunch.data.player.features.ad.enabled=false}if(obj.applaunch?.data?.player?.features?.ad?.dai?.enabled){obj.applaunch.data.player.features.ad.dai.enabled=false}}}else{JSON.parse=nativeJSONParse}return obj}};JSON.parse=new Proxy(JSON.parse,handler)})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["03b60dbf8e3b5b8f2423393210afcf06"] === e) return; + !function() { + let e = 0; + const a = JSON.parse, r = { + apply () { + e++; + const r = Reflect.apply(...arguments); + if (e <= 10) { + if (r.hasOwnProperty("appName")) { + var _r_applaunch_data_player_features_ad, _r_applaunch_data_player_features, _r_applaunch_data_player, _r_applaunch_data, _r_applaunch, _r_applaunch_data_player_features_ad_dai, _r_applaunch_data_player_features_ad1, _r_applaunch_data_player_features1, _r_applaunch_data_player1, _r_applaunch_data1, _r_applaunch1; + ((_r_applaunch = r.applaunch) === null || _r_applaunch === void 0 ? void 0 : (_r_applaunch_data = _r_applaunch.data) === null || _r_applaunch_data === void 0 ? void 0 : (_r_applaunch_data_player = _r_applaunch_data.player) === null || _r_applaunch_data_player === void 0 ? void 0 : (_r_applaunch_data_player_features = _r_applaunch_data_player.features) === null || _r_applaunch_data_player_features === void 0 ? void 0 : (_r_applaunch_data_player_features_ad = _r_applaunch_data_player_features.ad) === null || _r_applaunch_data_player_features_ad === void 0 ? void 0 : _r_applaunch_data_player_features_ad.enabled) && (r.applaunch.data.player.features.ad.enabled = !1); + ((_r_applaunch1 = r.applaunch) === null || _r_applaunch1 === void 0 ? void 0 : (_r_applaunch_data1 = _r_applaunch1.data) === null || _r_applaunch_data1 === void 0 ? void 0 : (_r_applaunch_data_player1 = _r_applaunch_data1.player) === null || _r_applaunch_data_player1 === void 0 ? void 0 : (_r_applaunch_data_player_features1 = _r_applaunch_data_player1.features) === null || _r_applaunch_data_player_features1 === void 0 ? void 0 : (_r_applaunch_data_player_features_ad1 = _r_applaunch_data_player_features1.ad) === null || _r_applaunch_data_player_features_ad1 === void 0 ? void 0 : (_r_applaunch_data_player_features_ad_dai = _r_applaunch_data_player_features_ad1.dai) === null || _r_applaunch_data_player_features_ad_dai === void 0 ? void 0 : _r_applaunch_data_player_features_ad_dai.enabled) && (r.applaunch.data.player.features.ad.dai.enabled = !1); + } + } else JSON.parse = a; + return r; + } + }; + JSON.parse = new Proxy(JSON.parse, r); + }(); + Object.defineProperty(Window.prototype.toString, "03b60dbf8e3b5b8f2423393210afcf06", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "03b60dbf8e3b5b8f2423393210afcf06" due to: ' + e); + } + }, + "(function(){let callCounter=0;const nativeJSONParse=JSON.parse;const handler={apply(){callCounter++;const obj=Reflect.apply(...arguments);if(callCounter<=10){if(obj.hasOwnProperty('env')&&obj.env.hasOwnProperty('origin')){if(!obj.hasOwnProperty('ads')){obj.ads={};}obj.ads.enable=false;obj.ads._prerolls=false;obj.ads._midrolls=false;}}else{JSON.parse=nativeJSONParse;}return obj;}};JSON.parse=new Proxy(JSON.parse,handler);})();": ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["076ec28f8d5bd40b7dc4be56dc82b841"] === e) return; + !function() { + let e = 0; + const r = JSON.parse, o = { + apply () { + e++; + const o = Reflect.apply(...arguments); + if (e <= 10) { + if (o.hasOwnProperty("env") && o.env.hasOwnProperty("origin")) { + o.hasOwnProperty("ads") || (o.ads = {}); + o.ads.enable = !1; + o.ads._prerolls = !1; + o.ads._midrolls = !1; + } + } else JSON.parse = r; + return o; + } + }; + JSON.parse = new Proxy(JSON.parse, o); + }(); + Object.defineProperty(Window.prototype.toString, "076ec28f8d5bd40b7dc4be56dc82b841", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "076ec28f8d5bd40b7dc4be56dc82b841" due to: ' + e); + } + }, + '(()=>{if(location.href.includes("cdn.sirdata.eu/load_with_tcf.php?url=https")){const a=new URLSearchParams(location.search).get("url");a&&location.assign(a)}})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString.ca7a8176701e7a23e0d4c73706555161 === e) return; + (()=>{ + if (location.href.includes("cdn.sirdata.eu/load_with_tcf.php?url=https")) { + const e = new URLSearchParams(location.search).get("url"); + e && location.assign(e); + } + })(); + Object.defineProperty(Window.prototype.toString, "ca7a8176701e7a23e0d4c73706555161", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "ca7a8176701e7a23e0d4c73706555161" due to: ' + e); + } + }, + '(()=>{window.patroniteGdprData={google_recaptcha:"allow"}})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString.fc25d8c99ebbbc3be6aedb39d0c00819 === e) return; + window.patroniteGdprData = { + google_recaptcha: "allow" + }; + Object.defineProperty(Window.prototype.toString, "fc25d8c99ebbbc3be6aedb39d0c00819", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "fc25d8c99ebbbc3be6aedb39d0c00819" due to: ' + e); + } + }, + '(()=>{let t,e=!1;const o=new MutationObserver(((e,o)=>{const c=t?.querySelector(\'cmp-button[variant="primary"]\');c&&(c.click(),o.disconnect())})),c={apply:(c,n,a)=>{const r=Reflect.apply(c,n,a);return!e&&n.matches("cmp-dialog")&&(e=!0,t=r),o.observe(r,{subtree:!0,childList:!0}),r}};window.Element.prototype.attachShadow=new Proxy(window.Element.prototype.attachShadow,c)})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["9318631bdeb75b748ea1cad12107b17a"] === e) return; + (()=>{ + let e, t = !1; + const o = new MutationObserver((t, o)=>{ + const r = e === null || e === void 0 ? void 0 : e.querySelector('cmp-button[variant="primary"]'); + r && (r.click(), o.disconnect()); + }), r = { + apply: (r, a, n1)=>{ + const c = Reflect.apply(r, a, n1); + return !t && a.matches("cmp-dialog") && (t = !0, e = c), o.observe(c, { + subtree: !0, + childList: !0 + }), c; + } + }; + window.Element.prototype.attachShadow = new Proxy(window.Element.prototype.attachShadow, r); + })(); + Object.defineProperty(Window.prototype.toString, "9318631bdeb75b748ea1cad12107b17a", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "9318631bdeb75b748ea1cad12107b17a" due to: ' + e); + } + }, + '(()=>{let t;const e=new MutationObserver(((e,o)=>{const n=t?.querySelector(\'button[data-testid="button-agree"]\');n&&(setTimeout((()=>{n.click()}),500),o.disconnect())})),o={apply:(o,n,c)=>{const a=Reflect.apply(o,n,c);return n.matches(".szn-cmp-dialog-container")&&(t=a),e.observe(a,{subtree:!0,childList:!0}),a}};window.Element.prototype.attachShadow=new Proxy(window.Element.prototype.attachShadow,o)})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["2bca593aa0d901f23a66e9e0ba973abc"] === e) return; + (()=>{ + let e; + const t = new MutationObserver((t, a)=>{ + const o = e === null || e === void 0 ? void 0 : e.querySelector('button[data-testid="button-agree"]'); + o && (setTimeout(()=>{ + o.click(); + }, 500), a.disconnect()); + }), a = { + apply: (a, o, r)=>{ + const n1 = Reflect.apply(a, o, r); + return o.matches(".szn-cmp-dialog-container") && (e = n1), t.observe(n1, { + subtree: !0, + childList: !0 + }), n1; + } + }; + window.Element.prototype.attachShadow = new Proxy(window.Element.prototype.attachShadow, a); + })(); + Object.defineProperty(Window.prototype.toString, "2bca593aa0d901f23a66e9e0ba973abc", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "2bca593aa0d901f23a66e9e0ba973abc" due to: ' + e); + } + }, + '(function(){var noopFunc=function(){};var tcData={eventStatus:"tcloaded",gdprApplies:!1,listenerId:noopFunc,vendor:{consents:{967:true}},purpose:{consents:[]}};window.__tcfapi=function(command,version,callback){"function"==typeof callback&&"removeEventListener"!==command&&callback(tcData,!0)}})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["905285a22b2c90f963ab16245e1f463b"] === e) return; + !function() { + var e = { + eventStatus: "tcloaded", + gdprApplies: !1, + listenerId: function() {}, + vendor: { + consents: { + 967: !0 + } + }, + purpose: { + consents: [] + } + }; + window.__tcfapi = function(t, n1, o) { + "function" == typeof o && "removeEventListener" !== t && o(e, !0); + }; + }(); + Object.defineProperty(Window.prototype.toString, "905285a22b2c90f963ab16245e1f463b", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "905285a22b2c90f963ab16245e1f463b" due to: ' + e); + } + }, + 'document.cookie="PostAnalytics=inactive; path=/;";': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["8dd64e0e5c7cfb7ada0186747714df1b"] === e) return; + document.cookie = "PostAnalytics=inactive; path=/;"; + Object.defineProperty(Window.prototype.toString, "8dd64e0e5c7cfb7ada0186747714df1b", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "8dd64e0e5c7cfb7ada0186747714df1b" due to: ' + e); + } + }, + "document.cookie='cmplz_consented_services={\"youtube\":true};path=/;';": ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["8cbd0cd2ffcfd41b8dd501b4861c18e3"] === e) return; + document.cookie = 'cmplz_consented_services={"youtube":true};path=/;'; + Object.defineProperty(Window.prototype.toString, "8cbd0cd2ffcfd41b8dd501b4861c18e3", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "8cbd0cd2ffcfd41b8dd501b4861c18e3" due to: ' + e); + } + }, + '(function(){if(!document.cookie.includes("CookieInformationConsent=")){var a=encodeURIComponent(\'{"website_uuid":"","timestamp":"","consent_url":"","consent_website":"jysk.nl","consent_domain":"jysk.nl","user_uid":"","consents_approved":["cookie_cat_necessary","cookie_cat_functional","cookie_cat_statistic"],"consents_denied":[],"user_agent":""}\');document.cookie="CookieInformationConsent="+a+"; path=/;"}})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["4e7a66fe06a58f87f9deb67cb85b8a2c"] === e) return; + !function() { + if (!document.cookie.includes("CookieInformationConsent=")) { + var e = encodeURIComponent('{"website_uuid":"","timestamp":"","consent_url":"","consent_website":"jysk.nl","consent_domain":"jysk.nl","user_uid":"","consents_approved":["cookie_cat_necessary","cookie_cat_functional","cookie_cat_statistic"],"consents_denied":[],"user_agent":""}'); + document.cookie = "CookieInformationConsent=" + e + "; path=/;"; + } + }(); + Object.defineProperty(Window.prototype.toString, "4e7a66fe06a58f87f9deb67cb85b8a2c", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "4e7a66fe06a58f87f9deb67cb85b8a2c" due to: ' + e); + } + }, + 'document.cookie=\'cookie_consent_level={"functionality":true,"strictly-necessary":true,"targeting":false,"tracking":false}; path=/;\';': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString.bee65ec0755ccff706db52148c4173c7 === e) return; + document.cookie = 'cookie_consent_level={"functionality":true,"strictly-necessary":true,"targeting":false,"tracking":false}; path=/;'; + Object.defineProperty(Window.prototype.toString, "bee65ec0755ccff706db52148c4173c7", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "bee65ec0755ccff706db52148c4173c7" due to: ' + e); + } + }, + '(function(){try{var a=location.pathname.split("/")[1],b="dra_cookie_consent_allowed_"+a,c=new RegExp(/[a-z]+_[a-z]+/);if(!document.cookie.includes(b)&&c.test(a)){var d=encodeURIComponent("v=1&t=1&f=1&s=0&m=0");document.cookie=b+"="+d+"; path=/;"}}catch(e){}})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["89284264a9e746e269120c04d8e07578"] === e) return; + !function() { + try { + var e = location.pathname.split("/")[1], o = "dra_cookie_consent_allowed_" + e, t = new RegExp(/[a-z]+_[a-z]+/); + if (!document.cookie.includes(o) && t.test(e)) { + var n1 = encodeURIComponent("v=1&t=1&f=1&s=0&m=0"); + document.cookie = o + "=" + n1 + "; path=/;"; + } + } catch (e) {} + }(); + Object.defineProperty(Window.prototype.toString, "89284264a9e746e269120c04d8e07578", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "89284264a9e746e269120c04d8e07578" due to: ' + e); + } + }, + 'document.cookie="dw_cookies_accepted=D; path=/;";': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["65ddec250513cfa895af9e691c980515"] === e) return; + document.cookie = "dw_cookies_accepted=D; path=/;"; + Object.defineProperty(Window.prototype.toString, "65ddec250513cfa895af9e691c980515", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "65ddec250513cfa895af9e691c980515" due to: ' + e); + } + }, + '(function(){document.cookie.includes("cookies-consents")||(document.cookie=\'cookies-consents={"ad_storage":false,"analytics_storage":false}\')})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString.ccaa77db2be3c96b3a11b73a501af1f1 === e) return; + document.cookie.includes("cookies-consents") || (document.cookie = 'cookies-consents={"ad_storage":false,"analytics_storage":false}'); + Object.defineProperty(Window.prototype.toString, "ccaa77db2be3c96b3a11b73a501af1f1", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "ccaa77db2be3c96b3a11b73a501af1f1" due to: ' + e); + } + }, + 'document.cookie="ubCmpSettings=eyJnZW1laW5kZW5fc2VsZWN0ZWRfdmFsdWUiOnRydWUsImdvb2dsZV9hbmFseXRpY3MiOmZhbHNlLCJhZF90cmFja2luZyI6ZmFsc2UsInNvY2lhbF9lbWJlZHMiOnRydWV9;path=/;";': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["58bc9348bcf4f1f2b6163529b3298384"] === e) return; + document.cookie = "ubCmpSettings=eyJnZW1laW5kZW5fc2VsZWN0ZWRfdmFsdWUiOnRydWUsImdvb2dsZV9hbmFseXRpY3MiOmZhbHNlLCJhZF90cmFja2luZyI6ZmFsc2UsInNvY2lhbF9lbWJlZHMiOnRydWV9;path=/;"; + Object.defineProperty(Window.prototype.toString, "58bc9348bcf4f1f2b6163529b3298384", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "58bc9348bcf4f1f2b6163529b3298384" due to: ' + e); + } + }, + 'document.cookie="cookieconsent_status=allow; path=/;";': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["95e24d457a7de10b441b7cbe6b509b42"] === e) return; + document.cookie = "cookieconsent_status=allow; path=/;"; + Object.defineProperty(Window.prototype.toString, "95e24d457a7de10b441b7cbe6b509b42", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "95e24d457a7de10b441b7cbe6b509b42" due to: ' + e); + } + }, + 'document.cookie="cookieConsentLevel=functional; path=/;";': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["787f6ec1d270f080d84075658a3154bd"] === e) return; + document.cookie = "cookieConsentLevel=functional; path=/;"; + Object.defineProperty(Window.prototype.toString, "787f6ec1d270f080d84075658a3154bd", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "787f6ec1d270f080d84075658a3154bd" due to: ' + e); + } + }, + 'document.cookie="cookies_accept=all; path=/;";': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["25fbbc330687fea937e26e0888468fc1"] === e) return; + document.cookie = "cookies_accept=all; path=/;"; + Object.defineProperty(Window.prototype.toString, "25fbbc330687fea937e26e0888468fc1", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "25fbbc330687fea937e26e0888468fc1" due to: ' + e); + } + }, + 'document.cookie="waconcookiemanagement=min; path=/;";': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["0898665962f7d4da16a3e93e72148415"] === e) return; + document.cookie = "waconcookiemanagement=min; path=/;"; + Object.defineProperty(Window.prototype.toString, "0898665962f7d4da16a3e93e72148415", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "0898665962f7d4da16a3e93e72148415" due to: ' + e); + } + }, + 'document.cookie="apcAcceptedTrackingCookie3=1111000; path=/;";': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString.ebce46e2aa13a6690a7be922ea601529 === e) return; + document.cookie = "apcAcceptedTrackingCookie3=1111000; path=/;"; + Object.defineProperty(Window.prototype.toString, "ebce46e2aa13a6690a7be922ea601529", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "ebce46e2aa13a6690a7be922ea601529" due to: ' + e); + } + }, + 'document.cookie="bbDatenstufe=stufe3; path=/;";': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["9d2c1d25c86235dc271dab2c2b2e99b2"] === e) return; + document.cookie = "bbDatenstufe=stufe3; path=/;"; + Object.defineProperty(Window.prototype.toString, "9d2c1d25c86235dc271dab2c2b2e99b2", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "9d2c1d25c86235dc271dab2c2b2e99b2" due to: ' + e); + } + }, + 'document.cookie="newsletter-signup=viewed; path=/;";': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["0cee21006fa668615b19188582a82e34"] === e) return; + document.cookie = "newsletter-signup=viewed; path=/;"; + Object.defineProperty(Window.prototype.toString, "0cee21006fa668615b19188582a82e34", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "0cee21006fa668615b19188582a82e34" due to: ' + e); + } + }, + 'document.cookie="user_cookie_consent=essential; path=/";': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["00c1162ebf92fa57d12e33c78f9ab876"] === e) return; + document.cookie = "user_cookie_consent=essential; path=/"; + Object.defineProperty(Window.prototype.toString, "00c1162ebf92fa57d12e33c78f9ab876", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "00c1162ebf92fa57d12e33c78f9ab876" due to: ' + e); + } + }, + 'document.cookie="cookiebanner=closed; path=/;";': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["64b6a01f2a020125dffd898bafb19615"] === e) return; + document.cookie = "cookiebanner=closed; path=/;"; + Object.defineProperty(Window.prototype.toString, "64b6a01f2a020125dffd898bafb19615", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "64b6a01f2a020125dffd898bafb19615" due to: ' + e); + } + }, + 'document.cookie=\'allow_cookies={"essential":"1","functional":{"all":"1"},"marketing":{"all":"0"}}; path=/;\';': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString.d61d4bd09c7716fa4e2f0235b892e274 === e) return; + document.cookie = 'allow_cookies={"essential":"1","functional":{"all":"1"},"marketing":{"all":"0"}}; path=/;'; + Object.defineProperty(Window.prototype.toString, "d61d4bd09c7716fa4e2f0235b892e274", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "d61d4bd09c7716fa4e2f0235b892e274" due to: ' + e); + } + }, + '(function(){-1==document.cookie.indexOf("GPRD")&&(document.cookie="GPRD=128; path=/;",location.reload())})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString.dcadc5846fed7b2f033974e6075c5fed === e) return; + -1 == document.cookie.indexOf("GPRD") && (document.cookie = "GPRD=128; path=/;", location.reload()); + Object.defineProperty(Window.prototype.toString, "dcadc5846fed7b2f033974e6075c5fed", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "dcadc5846fed7b2f033974e6075c5fed" due to: ' + e); + } + }, + 'document.cookie="acceptRodoSie=hide; path=/;";': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString.d52e913bca352f639daec5b240f07513 === e) return; + document.cookie = "acceptRodoSie=hide; path=/;"; + Object.defineProperty(Window.prototype.toString, "d52e913bca352f639daec5b240f07513", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "d52e913bca352f639daec5b240f07513" due to: ' + e); + } + }, + '(function(){-1==document.cookie.indexOf("cookie-functional")&&(document.cookie="cookie-functional=1; path=/;",document.cookie="popupek=1; path=/;",location.reload())})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["23d2c0ec8e7bc0167527c1acc5bb5355"] === e) return; + -1 == document.cookie.indexOf("cookie-functional") && (document.cookie = "cookie-functional=1; path=/;", document.cookie = "popupek=1; path=/;", location.reload()); + Object.defineProperty(Window.prototype.toString, "23d2c0ec8e7bc0167527c1acc5bb5355", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "23d2c0ec8e7bc0167527c1acc5bb5355" due to: ' + e); + } + }, + '(function(){-1==document.cookie.indexOf("ccb")&&(document.cookie="ccb=facebookAccepted=0&googleAnalyticsAccepted=0&commonCookies=1; path=/;",location.reload())})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString.f2aea7e44ba000bb61336ea707125580 === e) return; + -1 == document.cookie.indexOf("ccb") && (document.cookie = "ccb=facebookAccepted=0&googleAnalyticsAccepted=0&commonCookies=1; path=/;", location.reload()); + Object.defineProperty(Window.prototype.toString, "f2aea7e44ba000bb61336ea707125580", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "f2aea7e44ba000bb61336ea707125580" due to: ' + e); + } + }, + "(function(){-1===document.cookie.indexOf(\"CookieConsent\")&&(document.cookie='CookieConsent=mandatory|osm; path=/;')})();": ()=>{ + try { + const e = "done"; + if (Window.prototype.toString.f7a28a06b7a2a2e94cb072030083586d === e) return; + -1 === document.cookie.indexOf("CookieConsent") && (document.cookie = "CookieConsent=mandatory|osm; path=/;"); + Object.defineProperty(Window.prototype.toString, "f7a28a06b7a2a2e94cb072030083586d", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "f7a28a06b7a2a2e94cb072030083586d" due to: ' + e); + } + }, + '(function(){-1===document.cookie.indexOf("CookieControl")&&(document.cookie=\'CookieControl={"necessaryCookies":["wordpress_*","wordpress_logged_in_*","CookieControl"],"optionalCookies":{"functional_cookies":"accepted"}}\')})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["06ad4ed929d84e1793e13be6c4a31b38"] === e) return; + -1 === document.cookie.indexOf("CookieControl") && (document.cookie = 'CookieControl={"necessaryCookies":["wordpress_*","wordpress_logged_in_*","CookieControl"],"optionalCookies":{"functional_cookies":"accepted"}}'); + Object.defineProperty(Window.prototype.toString, "06ad4ed929d84e1793e13be6c4a31b38", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "06ad4ed929d84e1793e13be6c4a31b38" due to: ' + e); + } + }, + '(function(){if(-1==document.cookie.indexOf("CONSENT")){var c=new Date, d=c.getTime(), date = new Date(d + 365 * 60 * 60 * 1000); document.cookie="CONSENT=301212NN; path=/; expires=" + date.toUTCString(), location.reload()}})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["2f7b46464b7a29f89080a98e454b73a8"] === e) return; + !function() { + if (-1 == document.cookie.indexOf("CONSENT")) { + var e = (new Date).getTime(), o = new Date(e + 1314e6); + document.cookie = "CONSENT=301212NN; path=/; expires=" + o.toUTCString(), location.reload(); + } + }(); + Object.defineProperty(Window.prototype.toString, "2f7b46464b7a29f89080a98e454b73a8", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "2f7b46464b7a29f89080a98e454b73a8" due to: ' + e); + } + }, + 'document.cookie="dsgvo=basic; path=/;";': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString.c8f808a7e878f97d64286800484605d0 === e) return; + document.cookie = "dsgvo=basic; path=/;"; + Object.defineProperty(Window.prototype.toString, "c8f808a7e878f97d64286800484605d0", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "c8f808a7e878f97d64286800484605d0" due to: ' + e); + } + }, + '(function(){if(!document.cookie.includes("CookieInformationConsent=")){var a=encodeURIComponent(\'{"website_uuid":"","timestamp":"","consent_url":"","consent_website":"elkjop.no","consent_domain":"elkjop.no","user_uid":"","consents_approved":["cookie_cat_necessary","cookie_cat_functional","cookie_cat_statistic"],"consents_denied":[],"user_agent":""}\');document.cookie="CookieInformationConsent="+a+"; path=/;"}})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["6051620f594fcf9636bd68b417cb0e5b"] === e) return; + !function() { + if (!document.cookie.includes("CookieInformationConsent=")) { + var e = encodeURIComponent('{"website_uuid":"","timestamp":"","consent_url":"","consent_website":"elkjop.no","consent_domain":"elkjop.no","user_uid":"","consents_approved":["cookie_cat_necessary","cookie_cat_functional","cookie_cat_statistic"],"consents_denied":[],"user_agent":""}'); + document.cookie = "CookieInformationConsent=" + e + "; path=/;"; + } + }(); + Object.defineProperty(Window.prototype.toString, "6051620f594fcf9636bd68b417cb0e5b", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "6051620f594fcf9636bd68b417cb0e5b" due to: ' + e); + } + }, + '(function(){var a={timestamp:(new Date).getTime(),choice:2,version:"1.0"};document.cookie="mxp="+JSON.stringify(a)+"; path=/"})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["4cdd2100913b4096462563fee10f5daa"] === e) return; + !function() { + var e = { + timestamp: (new Date).getTime(), + choice: 2, + version: "1.0" + }; + document.cookie = "mxp=" + JSON.stringify(e) + "; path=/"; + }(); + Object.defineProperty(Window.prototype.toString, "4cdd2100913b4096462563fee10f5daa", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "4cdd2100913b4096462563fee10f5daa" due to: ' + e); + } + }, + '(function(){if(-1==document.cookie.indexOf("_chorus_privacy_consent")&&document.location.hostname.includes("bavarianfootballworks.com")){var c=new Date, d=c.getTime(), date = new Date(d + 365 * 60 * 60 * 1000); document.cookie="_chorus_privacy_consent="+d+"; path=/; expires=" + date.toUTCString(), location.reload()}})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["504f6b7ac8c9c857fc49addc0eb518fd"] === e) return; + !function() { + if (-1 == document.cookie.indexOf("_chorus_privacy_consent") && document.location.hostname.includes("bavarianfootballworks.com")) { + var e = (new Date).getTime(), o = new Date(e + 1314e6); + document.cookie = "_chorus_privacy_consent=" + e + "; path=/; expires=" + o.toUTCString(), location.reload(); + } + }(); + Object.defineProperty(Window.prototype.toString, "504f6b7ac8c9c857fc49addc0eb518fd", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "504f6b7ac8c9c857fc49addc0eb518fd" due to: ' + e); + } + }, + '(function(){if(-1==document.cookie.indexOf("_chorus_privacy_consent")&&document.location.hostname.includes("goldenstateofmind.com")){var c=new Date, d=c.getTime(), date = new Date(d + 365 * 60 * 60 * 1000); document.cookie="_chorus_privacy_consent="+d+"; path=/; expires=" + date.toUTCString(), location.reload()}})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["62fd4c05daebdd55280e0b23009cc9aa"] === e) return; + !function() { + if (-1 == document.cookie.indexOf("_chorus_privacy_consent") && document.location.hostname.includes("goldenstateofmind.com")) { + var e = (new Date).getTime(), o = new Date(e + 1314e6); + document.cookie = "_chorus_privacy_consent=" + e + "; path=/; expires=" + o.toUTCString(), location.reload(); + } + }(); + Object.defineProperty(Window.prototype.toString, "62fd4c05daebdd55280e0b23009cc9aa", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "62fd4c05daebdd55280e0b23009cc9aa" due to: ' + e); + } + }, + '(function(){if(-1==document.cookie.indexOf("_chorus_privacy_consent")&&document.location.hostname.includes("mmafighting.com")){var c=new Date, d=c.getTime(), date = new Date(d + 365 * 60 * 60 * 1000); document.cookie="_chorus_privacy_consent="+d+"; path=/; expires=" + date.toUTCString(), location.reload()}})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["1a42ed4d4e4e6922f6fda946f00f4816"] === e) return; + !function() { + if (-1 == document.cookie.indexOf("_chorus_privacy_consent") && document.location.hostname.includes("mmafighting.com")) { + var e = (new Date).getTime(), o = new Date(e + 1314e6); + document.cookie = "_chorus_privacy_consent=" + e + "; path=/; expires=" + o.toUTCString(), location.reload(); + } + }(); + Object.defineProperty(Window.prototype.toString, "1a42ed4d4e4e6922f6fda946f00f4816", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "1a42ed4d4e4e6922f6fda946f00f4816" due to: ' + e); + } + }, + '(function(){-1==document.cookie.indexOf("cms_cookies")&&(document.cookie="cms_cookies=6; path=/;",document.cookie="cms_cookies_saved=true; path=/;",location.reload())})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString.c69eca07b387ee449234ff30bf5ce30e === e) return; + -1 == document.cookie.indexOf("cms_cookies") && (document.cookie = "cms_cookies=6; path=/;", document.cookie = "cms_cookies_saved=true; path=/;", location.reload()); + Object.defineProperty(Window.prototype.toString, "c69eca07b387ee449234ff30bf5ce30e", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "c69eca07b387ee449234ff30bf5ce30e" due to: ' + e); + } + }, + 'document.cookie="erlaubte_cookies=1; path=/;";': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString.fa4fb1ef63a96ddb1e25a44e7d9cfcfe === e) return; + document.cookie = "erlaubte_cookies=1; path=/;"; + Object.defineProperty(Window.prototype.toString, "fa4fb1ef63a96ddb1e25a44e7d9cfcfe", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "fa4fb1ef63a96ddb1e25a44e7d9cfcfe" due to: ' + e); + } + }, + 'document.cookie="klaviano_police=1; path=/;";': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["0625bed2a838c73f77094993c60b81cc"] === e) return; + document.cookie = "klaviano_police=1; path=/;"; + Object.defineProperty(Window.prototype.toString, "0625bed2a838c73f77094993c60b81cc", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "0625bed2a838c73f77094993c60b81cc" due to: ' + e); + } + }, + 'document.cookie=\'cookieConsent={"statistical":0,"personalization":0,"targeting":0}; path=/;\';': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString.f5b9b753afe5738b6731ee8166dcd891 === e) return; + document.cookie = 'cookieConsent={"statistical":0,"personalization":0,"targeting":0}; path=/;'; + Object.defineProperty(Window.prototype.toString, "f5b9b753afe5738b6731ee8166dcd891", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "f5b9b753afe5738b6731ee8166dcd891" due to: ' + e); + } + }, + 'document.cookie="allowTracking=false; path=/;"; document.cookie="trackingSettings={%22ads%22:false%2C%22performance%22:false}; path=/;";': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["380715610fe9f7be74ee211b5df06559"] === e) return; + document.cookie = "allowTracking=false; path=/;"; + document.cookie = "trackingSettings={%22ads%22:false%2C%22performance%22:false}; path=/;"; + Object.defineProperty(Window.prototype.toString, "380715610fe9f7be74ee211b5df06559", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "380715610fe9f7be74ee211b5df06559" due to: ' + e); + } + }, + 'document.cookie="userConsent=%7B%22marketing%22%3Afalse%2C%22version%22%3A%221%22%7D; path=/;";': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["967efe0b8b7e9d602d9c0ecdf20fc0cf"] === e) return; + document.cookie = "userConsent=%7B%22marketing%22%3Afalse%2C%22version%22%3A%221%22%7D; path=/;"; + Object.defineProperty(Window.prototype.toString, "967efe0b8b7e9d602d9c0ecdf20fc0cf", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "967efe0b8b7e9d602d9c0ecdf20fc0cf" due to: ' + e); + } + }, + 'document.cookie="sendgb_cookiewarning=1; path=/;";': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["190bccd6dfb21f403e2765c76b59110f"] === e) return; + document.cookie = "sendgb_cookiewarning=1; path=/;"; + Object.defineProperty(Window.prototype.toString, "190bccd6dfb21f403e2765c76b59110f", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "190bccd6dfb21f403e2765c76b59110f" due to: ' + e); + } + }, + 'document.cookie="rodopop=1; path=/;";': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["9ed981f72e0e18755c3a1ffe09bbd2ba"] === e) return; + document.cookie = "rodopop=1; path=/;"; + Object.defineProperty(Window.prototype.toString, "9ed981f72e0e18755c3a1ffe09bbd2ba", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "9ed981f72e0e18755c3a1ffe09bbd2ba" due to: ' + e); + } + }, + 'document.cookie="gdprAccepted=true; path=/;";': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["2c12d864ca83dfdf8bc7e1c395c19fef"] === e) return; + document.cookie = "gdprAccepted=true; path=/;"; + Object.defineProperty(Window.prototype.toString, "2c12d864ca83dfdf8bc7e1c395c19fef", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "2c12d864ca83dfdf8bc7e1c395c19fef" due to: ' + e); + } + }, + '(function(){if(-1==document.cookie.indexOf("BCPermissionLevel")){var c=new Date, d=c.getTime(), date = new Date(d + 365 * 60 * 60 * 1000); document.cookie="BCPermissionLevel=PERSONAL; path=/; expires=" + date.toUTCString(), location.reload()}})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["29fd06a58b635f18a26d675807f87ee7"] === e) return; + !function() { + if (-1 == document.cookie.indexOf("BCPermissionLevel")) { + var e = (new Date).getTime(), o = new Date(e + 1314e6); + document.cookie = "BCPermissionLevel=PERSONAL; path=/; expires=" + o.toUTCString(), location.reload(); + } + }(); + Object.defineProperty(Window.prototype.toString, "29fd06a58b635f18a26d675807f87ee7", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "29fd06a58b635f18a26d675807f87ee7" due to: ' + e); + } + }, + '(function(){if(-1==document.cookie.indexOf("_chorus_privacy_consent")){var c=new Date, d=c.getTime(), date = new Date(d + 365 * 60 * 60 * 1000); document.cookie="_chorus_privacy_consent="+d+"; path=/; expires=" + date.toUTCString(), location.reload()}})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString.e7ea60642fa9501751b42fd2fe95103b === e) return; + !function() { + if (-1 == document.cookie.indexOf("_chorus_privacy_consent")) { + var e = (new Date).getTime(), o = new Date(e + 1314e6); + document.cookie = "_chorus_privacy_consent=" + e + "; path=/; expires=" + o.toUTCString(), location.reload(); + } + }(); + Object.defineProperty(Window.prototype.toString, "e7ea60642fa9501751b42fd2fe95103b", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "e7ea60642fa9501751b42fd2fe95103b" due to: ' + e); + } + }, + "!function(a,b,c,f,g,d,e){e=a[c]||a['WebKit'+c]||a['Moz'+c],e&&(d=new e(function(){b[f].contains(g)&&(b[f].remove(g),d.disconnect())}),d.observe(b,{attributes:!0,attributeFilter:['class']}))}(window,document.documentElement,'MutationObserver','classList','layer_cookie__visible');": ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["61e6ac2655edf1e9450373c1fd849cd0"] === e) return; + !function(e, t, o, n1, r, c, i1) { + (i1 = e[o] || e["WebKit" + o] || e["Moz" + o]) && (c = new i1(function() { + t[n1].contains(r) && (t[n1].remove(r), c.disconnect()); + })).observe(t, { + attributes: !0, + attributeFilter: [ + "class" + ] + }); + }(window, document.documentElement, "MutationObserver", "classList", "layer_cookie__visible"); + Object.defineProperty(Window.prototype.toString, "61e6ac2655edf1e9450373c1fd849cd0", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "61e6ac2655edf1e9450373c1fd849cd0" due to: ' + e); + } + }, + 'var cw;Object.defineProperty(window,"cookieWallSettings",{get:function(){return cw},set:function(a){document.cookie="rtlcookieconsent="+a.version.toString()+";";cw=a}});': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString.b32831777a037cfe79fc602cdef09ab7 === e) return; + var cw; + Object.defineProperty(window, "cookieWallSettings", { + get: function() { + return cw; + }, + set: function(e) { + document.cookie = "rtlcookieconsent=" + e.version.toString() + ";"; + cw = e; + } + }); + Object.defineProperty(Window.prototype.toString, "b32831777a037cfe79fc602cdef09ab7", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "b32831777a037cfe79fc602cdef09ab7" due to: ' + e); + } + }, + '(()=>{const e=document,t=new MutationObserver((()=>{const e=document.querySelector("#onetrust-accept-btn-handler");e&&(e.click(),t.disconnect())}));t.observe(e,{attributes:!0,childList:!0,subtree:!0}),setTimeout((()=>{t.disconnect()}),1e4)})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["47331811da7c3ac0cbfb198884a715c9"] === e) return; + (()=>{ + const e = document, t = new MutationObserver(()=>{ + const e = document.querySelector("#onetrust-accept-btn-handler"); + e && (e.click(), t.disconnect()); + }); + t.observe(e, { + attributes: !0, + childList: !0, + subtree: !0 + }), setTimeout(()=>{ + t.disconnect(); + }, 1e4); + })(); + Object.defineProperty(Window.prototype.toString, "47331811da7c3ac0cbfb198884a715c9", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "47331811da7c3ac0cbfb198884a715c9" due to: ' + e); + } + }, + '(()=>{const e=document,t=new MutationObserver((()=>{const e=document.querySelector("#onetrust-reject-all-handler");e&&(e.click(),t.disconnect())}));t.observe(e,{attributes:!0,childList:!0,subtree:!0}),setTimeout((()=>{t.disconnect()}),1e4)})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString.bc95dd84ae7c7899b8fef815cd1b8299 === e) return; + (()=>{ + const e = document, t = new MutationObserver(()=>{ + const e = document.querySelector("#onetrust-reject-all-handler"); + e && (e.click(), t.disconnect()); + }); + t.observe(e, { + attributes: !0, + childList: !0, + subtree: !0 + }), setTimeout(()=>{ + t.disconnect(); + }, 1e4); + })(); + Object.defineProperty(Window.prototype.toString, "bc95dd84ae7c7899b8fef815cd1b8299", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "bc95dd84ae7c7899b8fef815cd1b8299" due to: ' + e); + } + }, + "(()=>{const t=document.documentElement,o=new MutationObserver((()=>{const t=document.querySelector('#mms-consent-portal-container button[data-test=\"pwa-consent-layer-deny-all\"]');if(t&&typeof t.click !== 'undefined'){t.click();}}));o.observe(t,{attributes:!0,childList:!0,subtree:!0})})();": ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["46276a98537643ca503c6ce94ff988f1"] === e) return; + (()=>{ + const e = document.documentElement, t = new MutationObserver(()=>{ + const e = document.querySelector('#mms-consent-portal-container button[data-test="pwa-consent-layer-deny-all"]'); + e && void 0 !== e.click && e.click(); + }); + t.observe(e, { + attributes: !0, + childList: !0, + subtree: !0 + }); + })(); + Object.defineProperty(Window.prototype.toString, "46276a98537643ca503c6ce94ff988f1", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "46276a98537643ca503c6ce94ff988f1" due to: ' + e); + } + }, + '(()=>{if(!location.pathname.includes("/search"))return;const t={attributes:!0,childList:!0,subtree:!0},e=(t,e)=>{for(const n of t){const t=n.target.querySelector(".privacy-statement + .get-started-btn-wrapper > button.inline-explicit");t&&(t.click(),e.disconnect())}},n={apply:(n,o,c)=>{const r=Reflect.apply(n,o,c);if(o&&o.matches("cib-muid-consent")){new MutationObserver(e).observe(r,t)}return r}};window.Element.prototype.attachShadow=new Proxy(window.Element.prototype.attachShadow,n)})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["36fc3a243e85a682dd99c26376ad6c57"] === e) return; + (()=>{ + if (!location.pathname.includes("/search")) return; + const e = { + attributes: !0, + childList: !0, + subtree: !0 + }, t = (e, t)=>{ + for (const o of e){ + const e = o.target.querySelector(".privacy-statement + .get-started-btn-wrapper > button.inline-explicit"); + e && (e.click(), t.disconnect()); + } + }, o = { + apply: (o, r, n1)=>{ + const c = Reflect.apply(o, r, n1); + r && r.matches("cib-muid-consent") && new MutationObserver(t).observe(c, e); + return c; + } + }; + window.Element.prototype.attachShadow = new Proxy(window.Element.prototype.attachShadow, o); + })(); + Object.defineProperty(Window.prototype.toString, "36fc3a243e85a682dd99c26376ad6c57", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "36fc3a243e85a682dd99c26376ad6c57" due to: ' + e); + } + }, + '(()=>{let t,e=!1;const o=new MutationObserver(((e,o)=>{const c=t?.querySelector("button.uc-deny-button");c&&(c.click(),o.disconnect())})),c={apply:(c,n,p)=>{const r=Reflect.apply(c,n,p);return!e&&n.matches("#usercentrics-cmp-ui")&&(e=!0,t=r),o.observe(r,{subtree:!0,childList:!0}),r}};window.Element.prototype.attachShadow=new Proxy(window.Element.prototype.attachShadow,c)})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["7d2a68c5db67d5c0b987bcc67516ef8e"] === e) return; + (()=>{ + let e, t = !1; + const c = new MutationObserver((t, c)=>{ + const o = e === null || e === void 0 ? void 0 : e.querySelector("button.uc-deny-button"); + o && (o.click(), c.disconnect()); + }), o = { + apply: (o, r, n1)=>{ + const d = Reflect.apply(o, r, n1); + return !t && r.matches("#usercentrics-cmp-ui") && (t = !0, e = d), c.observe(d, { + subtree: !0, + childList: !0 + }), d; + } + }; + window.Element.prototype.attachShadow = new Proxy(window.Element.prototype.attachShadow, o); + })(); + Object.defineProperty(Window.prototype.toString, "7d2a68c5db67d5c0b987bcc67516ef8e", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "7d2a68c5db67d5c0b987bcc67516ef8e" due to: ' + e); + } + }, + '(()=>{let t,e=!1;const o=new MutationObserver(((e,o)=>{const c=t?.querySelector(\'button[data-testid="uc-accept-all-button"]\');c&&(c.click(),o.disconnect())})),c={apply:(c,n,p)=>{const r=Reflect.apply(c,n,p);return!e&&n.matches("#usercentrics-root")&&(e=!0,t=r),o.observe(r,{subtree:!0,childList:!0}),r}};window.Element.prototype.attachShadow=new Proxy(window.Element.prototype.attachShadow,c)})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString.c3fa9bec7cb9559b8965f87071a37fc6 === e) return; + (()=>{ + let e, t = !1; + const c = new MutationObserver((t, c)=>{ + const o = e === null || e === void 0 ? void 0 : e.querySelector('button[data-testid="uc-accept-all-button"]'); + o && (o.click(), c.disconnect()); + }), o = { + apply: (o, r, n1)=>{ + const a = Reflect.apply(o, r, n1); + return !t && r.matches("#usercentrics-root") && (t = !0, e = a), c.observe(a, { + subtree: !0, + childList: !0 + }), a; + } + }; + window.Element.prototype.attachShadow = new Proxy(window.Element.prototype.attachShadow, o); + })(); + Object.defineProperty(Window.prototype.toString, "c3fa9bec7cb9559b8965f87071a37fc6", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "c3fa9bec7cb9559b8965f87071a37fc6" due to: ' + e); + } + }, + '(()=>{let t,e=!1;const o=new MutationObserver(((e,o)=>{const c=t?.querySelector(\'button[data-testid="uc-deny-all-button"]\');c&&(c.click(),o.disconnect())})),c={apply:(c,n,p)=>{const r=Reflect.apply(c,n,p);return!e&&n.matches("#usercentrics-root")&&(e=!0,t=r),o.observe(r,{subtree:!0,childList:!0}),r}};window.Element.prototype.attachShadow=new Proxy(window.Element.prototype.attachShadow,c)})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["7924c03c0efcdc958073d4f764522f33"] === e) return; + (()=>{ + let e, t = !1; + const o = new MutationObserver((t, o)=>{ + const c = e === null || e === void 0 ? void 0 : e.querySelector('button[data-testid="uc-deny-all-button"]'); + c && (c.click(), o.disconnect()); + }), c = { + apply: (c, r, n1)=>{ + const d = Reflect.apply(c, r, n1); + return !t && r.matches("#usercentrics-root") && (t = !0, e = d), o.observe(d, { + subtree: !0, + childList: !0 + }), d; + } + }; + window.Element.prototype.attachShadow = new Proxy(window.Element.prototype.attachShadow, c); + })(); + Object.defineProperty(Window.prototype.toString, "7924c03c0efcdc958073d4f764522f33", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "7924c03c0efcdc958073d4f764522f33" due to: ' + e); + } + }, + '(()=>{let t,e=!1;const o=new MutationObserver(((e,o)=>{const c=t?.querySelector("#cmpbox a.cmptxt_btn_yes");c&&(c.click(),o.disconnect())})),c={apply:(c,n,p)=>{const r=Reflect.apply(c,n,p);return!e&&n.matches("#cmpwrapper")&&(e=!0,t=r),o.observe(r,{subtree:!0,childList:!0}),r}};window.Element.prototype.attachShadow=new Proxy(window.Element.prototype.attachShadow,c)})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["9c5d8cfc5b5533f486ab90d24d15e42c"] === e) return; + (()=>{ + let e, t = !1; + const c = new MutationObserver((t, c)=>{ + const o = e === null || e === void 0 ? void 0 : e.querySelector("#cmpbox a.cmptxt_btn_yes"); + o && (o.click(), c.disconnect()); + }), o = { + apply: (o, r, n1)=>{ + const d = Reflect.apply(o, r, n1); + return !t && r.matches("#cmpwrapper") && (t = !0, e = d), c.observe(d, { + subtree: !0, + childList: !0 + }), d; + } + }; + window.Element.prototype.attachShadow = new Proxy(window.Element.prototype.attachShadow, o); + })(); + Object.defineProperty(Window.prototype.toString, "9c5d8cfc5b5533f486ab90d24d15e42c", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "9c5d8cfc5b5533f486ab90d24d15e42c" due to: ' + e); + } + }, + '(function(o){function a(a){return{get:function(){return a},set:b}}function b(){}function c(){throw"Adguard: stopped a script execution.";}var d={},e=a(function(a){a(!1)}),f={},g=EventTarget.prototype.addEventListener;o(d,{spid_control_callback:a(b),content_control_callback:a(b),vid_control_callback:a(b)});o(f,{config:a(d),_setSpKey:{get:c,set:c},checkState:e,isAdBlocking:e,getSafeUri:a(function(a){return a}),pageChange:a(b),setupSmartBeacons:a(b)});Object.defineProperty(window,"_sp_",a(f));EventTarget.prototype.addEventListener=function(a){"sp.blocking"!=a&&"sp.not_blocking"!=a&&g.apply(this,arguments)}})(Object.defineProperties);': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString.a1233e00aac3b1e9bd547e64ca938543 === e) return; + !function(e) { + function t(e) { + return { + get: function() { + return e; + }, + set: n1 + }; + } + function n1() {} + function o() { + throw "Adguard: stopped a script execution."; + } + var r = {}, c = t(function(e) { + e(!1); + }), a = {}, i1 = EventTarget.prototype.addEventListener; + e(r, { + spid_control_callback: t(n1), + content_control_callback: t(n1), + vid_control_callback: t(n1) + }); + e(a, { + config: t(r), + _setSpKey: { + get: o, + set: o + }, + checkState: c, + isAdBlocking: c, + getSafeUri: t(function(e) { + return e; + }), + pageChange: t(n1), + setupSmartBeacons: t(n1) + }); + Object.defineProperty(window, "_sp_", t(a)); + EventTarget.prototype.addEventListener = function(e) { + "sp.blocking" != e && "sp.not_blocking" != e && i1.apply(this, arguments); + }; + }(Object.defineProperties); + Object.defineProperty(Window.prototype.toString, "a1233e00aac3b1e9bd547e64ca938543", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "a1233e00aac3b1e9bd547e64ca938543" due to: ' + e); + } + }, + '(()=>{const e={apply:(e,t,l)=>{try{const e=(new Error).stack;if(e?.includes?.("initAdBlockDetection")&&4===l[0]?.length)return Promise.resolve()}catch(e){}return Reflect.apply(e,t,l)}};window.Promise.allSettled=new Proxy(window.Promise.allSettled,e)})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString.c2e008a1d6491e8fa4125943a91eb8b8 === e) return; + (()=>{ + const e = { + apply: (e, t, r)=>{ + try { + var _e_includes, _r_; + const e = (new Error).stack; + if ((e === null || e === void 0 ? void 0 : (_e_includes = e.includes) === null || _e_includes === void 0 ? void 0 : _e_includes.call(e, "initAdBlockDetection")) && 4 === ((_r_ = r[0]) === null || _r_ === void 0 ? void 0 : _r_.length)) return Promise.resolve(); + } catch (e) {} + return Reflect.apply(e, t, r); + } + }; + window.Promise.allSettled = new Proxy(window.Promise.allSettled, e); + })(); + Object.defineProperty(Window.prototype.toString, "c2e008a1d6491e8fa4125943a91eb8b8", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "c2e008a1d6491e8fa4125943a91eb8b8" due to: ' + e); + } + }, + '(()=>{const d={getUserConsentStatusForVendor:()=>!0};window.didomiOnReady=window.didomiOnReady||[],window.didomiOnReady.push=n=>{"function"==typeof n&&n(d)}})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["4f42a63fdc8f353f50712cbd342cc7be"] === e) return; + (()=>{ + const e = { + getUserConsentStatusForVendor: ()=>!0 + }; + window.didomiOnReady = window.didomiOnReady || [], window.didomiOnReady.push = (o)=>{ + "function" == typeof o && o(e); + }; + })(); + Object.defineProperty(Window.prototype.toString, "4f42a63fdc8f353f50712cbd342cc7be", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "4f42a63fdc8f353f50712cbd342cc7be" due to: ' + e); + } + }, + '(()=>{const e={apply:async(e,t,a)=>{if(a[0]&&a[0]?.match(/adsbygoogle|doubleclick|googlesyndication|static\\.cloudflareinsights\\.com\\/beacon\\.min\\.js/)){const e=(e="{}",t="",a="opaque")=>{const n=new Response(e,{statusText:"OK"}),o=String((s=50800,r=50900,Math.floor(Math.random()*(r-s+1)+s)));var s,r;return n.headers.set("Content-Length",o),Object.defineProperties(n,{type:{value:a},status:{value:0},statusText:{value:""},url:{value:""}}),Promise.resolve(n)};return e("{}",a[0])}return Reflect.apply(e,t,a)}};window.fetch=new Proxy(window.fetch,e)})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["9dbd26c8d0d4dcb61410c72cac73374e"] === e) return; + (()=>{ + const e = { + apply: async (e, t, o)=>{ + var _o_; + if (o[0] && ((_o_ = o[0]) === null || _o_ === void 0 ? void 0 : _o_.match(/adsbygoogle|doubleclick|googlesyndication|static\.cloudflareinsights\.com\/beacon\.min\.js/))) { + const e = (e = "{}", t = "", o = "opaque")=>{ + const c = new Response(e, { + statusText: "OK" + }), n1 = String(Math.floor(101 * Math.random() + 50800)); + return c.headers.set("Content-Length", n1), Object.defineProperties(c, { + type: { + value: o + }, + status: { + value: 0 + }, + statusText: { + value: "" + }, + url: { + value: "" + } + }), Promise.resolve(c); + }; + return e("{}", o[0]); + } + return Reflect.apply(e, t, o); + } + }; + window.fetch = new Proxy(window.fetch, e); + })(); + Object.defineProperty(Window.prototype.toString, "9dbd26c8d0d4dcb61410c72cac73374e", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "9dbd26c8d0d4dcb61410c72cac73374e" due to: ' + e); + } + }, + "window.ad_allowed = true;": ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["049921132ffe411b4692a70bec90d335"] === e) return; + window.ad_allowed = !0; + Object.defineProperty(Window.prototype.toString, "049921132ffe411b4692a70bec90d335", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "049921132ffe411b4692a70bec90d335" due to: ' + e); + } + }, + "(function(){var b=window.setTimeout;window.setTimeout=function(a,c){if(!/google_ads_frame/.test(a.toString()))return b(a,c)};})();": ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["47f456fa4a14a6df26efb37ac4b35e9a"] === e) return; + !function() { + var e = window.setTimeout; + window.setTimeout = function(t, o) { + if (!/google_ads_frame/.test(t.toString())) return e(t, o); + }; + }(); + Object.defineProperty(Window.prototype.toString, "47f456fa4a14a6df26efb37ac4b35e9a", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "47f456fa4a14a6df26efb37ac4b35e9a" due to: ' + e); + } + }, + 'var _st = window.setTimeout; window.setTimeout = function(a, b) { if(!/var ad = document\\.querySelector\\("ins\\.adsbygoogle"\\);/.test(a)){ _st(a,b);}};': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["8468c20094b47b4c6230a90bb0cf2d54"] === e) return; + var _st = window.setTimeout; + window.setTimeout = function(e, t) { + /var ad = document\.querySelector\("ins\.adsbygoogle"\);/.test(e) || _st(e, t); + }; + Object.defineProperty(Window.prototype.toString, "8468c20094b47b4c6230a90bb0cf2d54", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "8468c20094b47b4c6230a90bb0cf2d54" due to: ' + e); + } + }, + "document.avp_ready = 1;": ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["1cd8368bac9abff3d844c605b628fee9"] === e) return; + document.avp_ready = 1; + Object.defineProperty(Window.prototype.toString, "1cd8368bac9abff3d844c605b628fee9", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "1cd8368bac9abff3d844c605b628fee9" due to: ' + e); + } + }, + "window.ADTECH = function() {};": ()=>{ + try { + const e = "done"; + if (Window.prototype.toString.e42f31b21c3855d599c00a3f8701ede6 === e) return; + window.ADTECH = function() {}; + Object.defineProperty(Window.prototype.toString, "e42f31b21c3855d599c00a3f8701ede6", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "e42f31b21c3855d599c00a3f8701ede6" due to: ' + e); + } + }, + "fuckAdBlock = function() {};": ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["5c3f48e3f24ff8813da9609a53a72433"] === e) return; + fuckAdBlock = function() {}; + Object.defineProperty(Window.prototype.toString, "5c3f48e3f24ff8813da9609a53a72433", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "5c3f48e3f24ff8813da9609a53a72433" due to: ' + e); + } + }, + "window.IM = [1,2,3];": ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["6e0b841e576ac763f81d5c219813906b"] === e) return; + window.IM = [ + 1, + 2, + 3 + ]; + Object.defineProperty(Window.prototype.toString, "6e0b841e576ac763f81d5c219813906b", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "6e0b841e576ac763f81d5c219813906b" due to: ' + e); + } + }, + "window.google_jobrunner = function() { };": ()=>{ + try { + const e = "done"; + if (Window.prototype.toString.c155982f45f07c347701b45fce31f5d3 === e) return; + window.google_jobrunner = function() {}; + Object.defineProperty(Window.prototype.toString, "c155982f45f07c347701b45fce31f5d3", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "c155982f45f07c347701b45fce31f5d3" due to: ' + e); + } + }, + "(function(){var c=window.setTimeout;window.setTimeout=function(f,g){return !Number.isNaN(g)&&/\\$\\('#l'\\+|#linkdiv/.test(f.toString())&&(g*=0.01),c.apply(this,arguments)}.bind(window)})();": ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["009922e6198163d89edac4a47ce341c7"] === e) return; + !function() { + var e = window.setTimeout; + window.setTimeout = (function(t, o) { + return !Number.isNaN(o) && /\$\('#l'\+|#linkdiv/.test(t.toString()) && (o *= .01), e.apply(this, arguments); + }).bind(window); + }(); + Object.defineProperty(Window.prototype.toString, "009922e6198163d89edac4a47ce341c7", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "009922e6198163d89edac4a47ce341c7" due to: ' + e); + } + }, + "window.blockAdBlock = function() {};": ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["7b0fe49ca4878b71af2e77dfe4259f5a"] === e) return; + window.blockAdBlock = function() {}; + Object.defineProperty(Window.prototype.toString, "7b0fe49ca4878b71af2e77dfe4259f5a", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "7b0fe49ca4878b71af2e77dfe4259f5a" due to: ' + e); + } + }, + '(()=>{let t;const e={apply:(e,o,c)=>{try{const r=c[0],l=c[1];let y;try{y=t?.getNitroStateValue()}catch{return Reflect.apply(e,o,c)}if(y&&"object"==typeof r&&null!==r&&1===Object.keys(r).length&&"number"==typeof Object.values(r)[0]&&"object"==typeof l&&null!==l&&(n=l,Object.values(n).some((t=>{if("function"==typeof t&&t.toString().includes("]:!0}"))return!0})))){const[t]=Object.keys(r);void 0!==t&&Reflect.set(r,t,y+1)}}catch(t){}var n;return Reflect.apply(e,o,c)}};window.Object.is=new Proxy(window.Object.is,e);const o={apply:(e,o,c)=>{try{const e=c[0],o=c[1];!t&&e&&o&&"object"==typeof e&&"Module"===e[Symbol.toStringTag]&&"string"==typeof o&&"NitroScript"===o&&(t=e)}catch(t){}return Reflect.apply(e,o,c)}};window.Object.defineProperty=new Proxy(window.Object.defineProperty,o)})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString.b990af6625716f6d6fe45948d5a5b4fa === e) return; + (()=>{ + let e; + const t = { + apply: (t, o, r)=>{ + try { + const c = r[0], f = r[1]; + let i1; + try { + i1 = e === null || e === void 0 ? void 0 : e.getNitroStateValue(); + } catch { + return Reflect.apply(t, o, r); + } + if (i1 && "object" == typeof c && null !== c && 1 === Object.keys(c).length && "number" == typeof Object.values(c)[0] && "object" == typeof f && null !== f && (n1 = f, Object.values(n1).some((e)=>{ + if ("function" == typeof e && e.toString().includes("]:!0}")) return !0; + }))) { + const [e] = Object.keys(c); + void 0 !== e && Reflect.set(c, e, i1 + 1); + } + } catch (e) {} + var n1; + return Reflect.apply(t, o, r); + } + }; + window.Object.is = new Proxy(window.Object.is, t); + const o = { + apply: (t, o, r)=>{ + try { + const t = r[0], o = r[1]; + !e && t && o && "object" == typeof t && "Module" === t[Symbol.toStringTag] && "string" == typeof o && "NitroScript" === o && (e = t); + } catch (e) {} + return Reflect.apply(t, o, r); + } + }; + window.Object.defineProperty = new Proxy(window.Object.defineProperty, o); + })(); + Object.defineProperty(Window.prototype.toString, "b990af6625716f6d6fe45948d5a5b4fa", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "b990af6625716f6d6fe45948d5a5b4fa" due to: ' + e); + } + }, + '!function(){const e={apply:(e,t,o)=>{const i=o[1];if(!i||"object"!=typeof i.QiyiPlayerProphetData)return Reflect.apply(e,t,o)}};window.Object.defineProperties=new Proxy(window.Object.defineProperties,e)}();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["545a0289c2a1afd8dd9039c82074c2b7"] === e) return; + !function() { + const e = { + apply: (e, t, o)=>{ + const r = o[1]; + if (!r || "object" != typeof r.QiyiPlayerProphetData) return Reflect.apply(e, t, o); + } + }; + window.Object.defineProperties = new Proxy(window.Object.defineProperties, e); + }(); + Object.defineProperty(Window.prototype.toString, "545a0289c2a1afd8dd9039c82074c2b7", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "545a0289c2a1afd8dd9039c82074c2b7" due to: ' + e); + } + }, + "!function(){const s={apply:(c,e,n)=>(n[0]?.adSlots&&(n[0].adSlots=[]),n[1]?.success&&(n[1].success=new Proxy(n[1].success,s)),Reflect.apply(c,e,n))};window.Object.assign=new Proxy(window.Object.assign,s)}();": ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["7c9eb641391ed7a82e455b87f3672582"] === e) return; + !function() { + const e = { + apply: (o, t, n1)=>{ + var _n_, _n_1; + return ((_n_ = n1[0]) === null || _n_ === void 0 ? void 0 : _n_.adSlots) && (n1[0].adSlots = []), ((_n_1 = n1[1]) === null || _n_1 === void 0 ? void 0 : _n_1.success) && (n1[1].success = new Proxy(n1[1].success, e)), Reflect.apply(o, t, n1); + } + }; + window.Object.assign = new Proxy(window.Object.assign, e); + }(); + Object.defineProperty(Window.prototype.toString, "7c9eb641391ed7a82e455b87f3672582", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "7c9eb641391ed7a82e455b87f3672582" due to: ' + e); + } + }, + "\"use strict\"; window.MutationObserver = new Proxy(window.MutationObserver, { construct(Target, Args) { let Stringified = Args[0].toString(); if (Stringified.includes('cs:') && Stringified.includes('gl:') && Stringified.includes('ne:') && Stringified.includes('dg:')) { return Reflect.construct(Target, [() => {}]); } return Reflect.construct(Target, Args); } });": ()=>{ + try { + const e = "done"; + if (Window.prototype.toString.c287d35369268f7ace0d483cc8ca2199 === e) return; + window.MutationObserver = new Proxy(window.MutationObserver, { + construct (e, c) { + let t = c[0].toString(); + return t.includes("cs:") && t.includes("gl:") && t.includes("ne:") && t.includes("dg:") ? Reflect.construct(e, [ + ()=>{} + ]) : Reflect.construct(e, c); + } + }); + Object.defineProperty(Window.prototype.toString, "c287d35369268f7ace0d483cc8ca2199", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "c287d35369268f7ace0d483cc8ca2199" due to: ' + e); + } + }, + '(()=>{const e=document.documentElement;new MutationObserver((()=>{const e=document.querySelector(\'body > div[role="dialog"].neon-border-purple > p.text-center + button.neon-button-purple\');e&&e.textContent.includes("I Understand")&&e.click()})).observe(e,{attributes:!0,childList:!0,subtree:!0})})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["7ff1ec00ee1e83864c8bcaba82126a50"] === e) return; + (()=>{ + const e = document.documentElement; + new MutationObserver(()=>{ + const e = document.querySelector('body > div[role="dialog"].neon-border-purple > p.text-center + button.neon-button-purple'); + e && e.textContent.includes("I Understand") && e.click(); + }).observe(e, { + attributes: !0, + childList: !0, + subtree: !0 + }); + })(); + Object.defineProperty(Window.prototype.toString, "7ff1ec00ee1e83864c8bcaba82126a50", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "7ff1ec00ee1e83864c8bcaba82126a50" due to: ' + e); + } + }, + 'document.cookie="popup=9999999999999; path=/;";': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString.dd5fb4eeed8b7505e5767b7045cb23cc === e) return; + document.cookie = "popup=9999999999999; path=/;"; + Object.defineProperty(Window.prototype.toString, "dd5fb4eeed8b7505e5767b7045cb23cc", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "dd5fb4eeed8b7505e5767b7045cb23cc" due to: ' + e); + } + }, + 'document.cookie="overlay-geschenk=donotshowfor7days; path=/;";': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString.c244d6b503d07944e92dae676220ac14 === e) return; + document.cookie = "overlay-geschenk=donotshowfor7days; path=/;"; + Object.defineProperty(Window.prototype.toString, "c244d6b503d07944e92dae676220ac14", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "c244d6b503d07944e92dae676220ac14" due to: ' + e); + } + }, + 'document.cookie="popupSubscription=1; path=/;";': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["07e3ab9b26da8896b57fb83067364723"] === e) return; + document.cookie = "popupSubscription=1; path=/;"; + Object.defineProperty(Window.prototype.toString, "07e3ab9b26da8896b57fb83067364723", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "07e3ab9b26da8896b57fb83067364723" due to: ' + e); + } + }, + 'document.cookie="hide_footer_login_layer=T; path=/;";': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["6610b2172699f352e936bdda56179645"] === e) return; + document.cookie = "hide_footer_login_layer=T; path=/;"; + Object.defineProperty(Window.prototype.toString, "6610b2172699f352e936bdda56179645", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "6610b2172699f352e936bdda56179645" due to: ' + e); + } + }, + "(()=>{const t=document,e=new MutationObserver((()=>{const t=document.querySelector('fluent-button[data-test-id=\"continue-reading-button\"]');t&&(t.click(),e.disconnect())}));e.observe(t,{attributes:!0,childList:!0,subtree:!0}),setTimeout((()=>{e.disconnect()}),1e4)})();": ()=>{ + try { + const e = "done"; + if (Window.prototype.toString.b74fcea5833a534a963b7d4a15fb3a8f === e) return; + (()=>{ + const e = document, t = new MutationObserver(()=>{ + const e = document.querySelector('fluent-button[data-test-id="continue-reading-button"]'); + e && (e.click(), t.disconnect()); + }); + t.observe(e, { + attributes: !0, + childList: !0, + subtree: !0 + }), setTimeout(()=>{ + t.disconnect(); + }, 1e4); + })(); + Object.defineProperty(Window.prototype.toString, "b74fcea5833a534a963b7d4a15fb3a8f", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "b74fcea5833a534a963b7d4a15fb3a8f" due to: ' + e); + } + }, + '!function(){const t={apply:(t,e,n)=>{if(n[0]&&"function"==typeof n[0])try{if(n[0].toString().includes("LOGIN_FORCE_TIME"))return}catch(t){console.trace(t)}return Reflect.apply(t,e,n)}},e=new Proxy(window.setTimeout,t);Object.defineProperty(window,"setTimeout",{set:function(){},get:function(){return e}})}();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString.af15a185bba3bf6f247f74549465a83e === e) return; + !function() { + const e = { + apply: (e, t, n1)=>{ + if (n1[0] && "function" == typeof n1[0]) try { + if (n1[0].toString().includes("LOGIN_FORCE_TIME")) return; + } catch (e) { + console.trace(e); + } + return Reflect.apply(e, t, n1); + } + }, t = new Proxy(window.setTimeout, e); + Object.defineProperty(window, "setTimeout", { + set: function() {}, + get: function() { + return t; + } + }); + }(); + Object.defineProperty(Window.prototype.toString, "af15a185bba3bf6f247f74549465a83e", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "af15a185bba3bf6f247f74549465a83e" due to: ' + e); + } + }, + "(function(){window.setTimeout=new Proxy(window.setTimeout,{apply:(a,b,c)=>c&&c[0]&&/SkipMsg\\(\\)/.test(c[0].toString())&&c[1]?(c[1]=1,Reflect.apply(a,b,c)):Reflect.apply(a,b,c)})})();": ()=>{ + try { + const e = "done"; + if (Window.prototype.toString.ddae51deac37af19fec2771965b890e1 === e) return; + window.setTimeout = new Proxy(window.setTimeout, { + apply: (e, t, o)=>o && o[0] && /SkipMsg\(\)/.test(o[0].toString()) && o[1] ? (o[1] = 1, Reflect.apply(e, t, o)) : Reflect.apply(e, t, o) + }); + Object.defineProperty(Window.prototype.toString, "ddae51deac37af19fec2771965b890e1", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "ddae51deac37af19fec2771965b890e1" due to: ' + e); + } + }, + '(function(){var a=new Date,b=a.getTime();document.cookie="ips4_bacalltoactionpopup="+b})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["21f664952df8e1eaf1fb9a92db8b174e"] === e) return; + !function() { + var e = (new Date).getTime(); + document.cookie = "ips4_bacalltoactionpopup=" + e; + }(); + Object.defineProperty(Window.prototype.toString, "21f664952df8e1eaf1fb9a92db8b174e", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "21f664952df8e1eaf1fb9a92db8b174e" due to: ' + e); + } + }, + "if (window.PushManager) { window.PushManager.prototype.subscribe = function () { return { then: function (func) { } }; }; }": ()=>{ + try { + const e = "done"; + if (Window.prototype.toString.f271f5a04b96c738d8491cb877889952 === e) return; + window.PushManager && (window.PushManager.prototype.subscribe = function() { + return { + then: function(e) {} + }; + }); + Object.defineProperty(Window.prototype.toString, "f271f5a04b96c738d8491cb877889952", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "f271f5a04b96c738d8491cb877889952" due to: ' + e); + } + }, + '(()=>{const t={construct:(t,e,n)=>{const r=e[0],o=r?.toString(),c=o?.includes("e[0].intersectionRatio");return c&&(e[0]=()=>{}),Reflect.construct(t,e,n)}};window.IntersectionObserver=new Proxy(window.IntersectionObserver,t)})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString.c12b1283487b21a0e823718579c18ede === e) return; + (()=>{ + const e = { + construct: (e, t, r)=>{ + const n1 = t[0], o = n1 === null || n1 === void 0 ? void 0 : n1.toString(), c = o === null || o === void 0 ? void 0 : o.includes("e[0].intersectionRatio"); + return c && (t[0] = ()=>{}), Reflect.construct(e, t, r); + } + }; + window.IntersectionObserver = new Proxy(window.IntersectionObserver, e); + })(); + Object.defineProperty(Window.prototype.toString, "c12b1283487b21a0e823718579c18ede", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "c12b1283487b21a0e823718579c18ede" due to: ' + e); + } + }, + '(function(){var b=document.addEventListener;document.addEventListener=function(c,a,d){if(a&&-1==a.toString().indexOf("adsBlocked"))return b(c,a,d)}.bind(window)})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["62c4837e2d6ffab7f90fde5590cc73ab"] === e) return; + !function() { + var e = document.addEventListener; + document.addEventListener = (function(t, n1, r) { + if (n1 && -1 == n1.toString().indexOf("adsBlocked")) return e(t, n1, r); + }).bind(window); + }(); + Object.defineProperty(Window.prototype.toString, "62c4837e2d6ffab7f90fde5590cc73ab", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "62c4837e2d6ffab7f90fde5590cc73ab" due to: ' + e); + } + }, + '(function(b){Object.defineProperty(Element.prototype,"innerHTML",{get:function(){return b.get.call(this)},set:function(a){/^(?:<([abisuq]) id="[^"]*"><\\/\\1>)*$/.test(a)||b.set.call(this,a)},enumerable:!0,configurable:!0})})(Object.getOwnPropertyDescriptor(Element.prototype,"innerHTML"));': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString.a45ed61db8e971a6cfde1b21ffc65573 === e) return; + !function(e) { + Object.defineProperty(Element.prototype, "innerHTML", { + get: function() { + return e.get.call(this); + }, + set: function(t) { + /^(?:<([abisuq]) id="[^"]*"><\/\1>)*$/.test(t) || e.set.call(this, t); + }, + enumerable: !0, + configurable: !0 + }); + }(Object.getOwnPropertyDescriptor(Element.prototype, "innerHTML")); + Object.defineProperty(Window.prototype.toString, "a45ed61db8e971a6cfde1b21ffc65573", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "a45ed61db8e971a6cfde1b21ffc65573" due to: ' + e); + } + }, + '(function(a){Object.defineProperty(window,"upManager",{get:function(){return{push:a,register:a,fireNow:a,start:a}},set:function(a){if(!(a instanceof Error))throw Error();}})})(function(){});': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString.e7cde92d3ed85b2159f3eefcc50b7ab6 === e) return; + !function(e) { + Object.defineProperty(window, "upManager", { + get: function() { + return { + push: e, + register: e, + fireNow: e, + start: e + }; + }, + set: function(e) { + if (!(e instanceof Error)) throw Error(); + } + }); + }(function() {}); + Object.defineProperty(Window.prototype.toString, "e7cde92d3ed85b2159f3eefcc50b7ab6", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "e7cde92d3ed85b2159f3eefcc50b7ab6" due to: ' + e); + } + }, + '(function(){var b=XMLHttpRequest.prototype.open,c=/[/.@](piguiqproxy\\.com|rcdn\\.pro|amgload\\.net|dsn-fishki\\.ru|v6t39t\\.ru|greencuttlefish\\.com|rgy1wk\\.ru|vt4dlx\\.ru|d38dub\\.ru)[:/]/i;XMLHttpRequest.prototype.open=function(d,a){if("GET"===d&&c.test(a))this.send=function(){return null},this.setRequestHeader=function(){return null},console.log("AG has blocked request: ",a);else return b.apply(this,arguments)}})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["8d3f556a4543374ea8319bc03583025f"] === e) return; + !function() { + var e = XMLHttpRequest.prototype.open, t = /[/.@](piguiqproxy\.com|rcdn\.pro|amgload\.net|dsn-fishki\.ru|v6t39t\.ru|greencuttlefish\.com|rgy1wk\.ru|vt4dlx\.ru|d38dub\.ru)[:/]/i; + XMLHttpRequest.prototype.open = function(r, o) { + if ("GET" !== r || !t.test(o)) return e.apply(this, arguments); + this.send = function() { + return null; + }, this.setRequestHeader = function() { + return null; + }, console.log("AG has blocked request: ", o); + }; + }(); + Object.defineProperty(Window.prototype.toString, "8d3f556a4543374ea8319bc03583025f", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "8d3f556a4543374ea8319bc03583025f" due to: ' + e); + } + }, + '(function(){var b=XMLHttpRequest.prototype.open,c=/[/.@](piguiqproxy\\.com|rcdn\\.pro|amgload\\.net|dsn-fishki\\.ru|v6t39t\\.ru|greencuttlefish\\.com|rgy1wk\\.ru|vt4dlx\\.ru|d38dub\\.ru|csp-oz66pp\\.ru|ok9ydq\\.ru|kingoablc\\.com)[:/]/i;XMLHttpRequest.prototype.open=function(d,a){if("GET"===d&&c.test(a))this.send=function(){return null},this.setRequestHeader=function(){return null},console.log("AG has blocked request: ",a);else return b.apply(this,arguments)}})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["22514194ad8441cc56e68716b1f75f69"] === e) return; + !function() { + var e = XMLHttpRequest.prototype.open, t = /[/.@](piguiqproxy\.com|rcdn\.pro|amgload\.net|dsn-fishki\.ru|v6t39t\.ru|greencuttlefish\.com|rgy1wk\.ru|vt4dlx\.ru|d38dub\.ru|csp-oz66pp\.ru|ok9ydq\.ru|kingoablc\.com)[:/]/i; + XMLHttpRequest.prototype.open = function(r, o) { + if ("GET" !== r || !t.test(o)) return e.apply(this, arguments); + this.send = function() { + return null; + }, this.setRequestHeader = function() { + return null; + }, console.log("AG has blocked request: ", o); + }; + }(); + Object.defineProperty(Window.prototype.toString, "22514194ad8441cc56e68716b1f75f69", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "22514194ad8441cc56e68716b1f75f69" due to: ' + e); + } + }, + '(()=>{const e={apply:(e,t,n)=>{const o=Reflect.apply(e,t,n);try{o instanceof HTMLIFrameElement&&""===o.src&&o.contentWindow&&(o.contentWindow.fetch=window.fetch,o.contentWindow.getComputedStyle=window.getComputedStyle)}catch(e){}return o}};Node.prototype.appendChild=new Proxy(Node.prototype.appendChild,e)})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["67bc47480648ae9a1b1c43e313bc2166"] === e) return; + (()=>{ + const e = { + apply: (e, t, o)=>{ + const n1 = Reflect.apply(e, t, o); + try { + n1 instanceof HTMLIFrameElement && "" === n1.src && n1.contentWindow && (n1.contentWindow.fetch = window.fetch, n1.contentWindow.getComputedStyle = window.getComputedStyle); + } catch (e) {} + return n1; + } + }; + Node.prototype.appendChild = new Proxy(Node.prototype.appendChild, e); + })(); + Object.defineProperty(Window.prototype.toString, "67bc47480648ae9a1b1c43e313bc2166", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "67bc47480648ae9a1b1c43e313bc2166" due to: ' + e); + } + }, + '(()=>{const e=()=>{},t=function(){return this},n=()=>null,o=()=>[],r=new Map,i=new Map,s=new Map,a=new Map,d=new Map,l=new Map,g=function(e,t){return d.has(e)||d.set(e,new Set),d.get(e).add(t),this},c=function(e,t){return!!d.has(e)&&d.get(e).delete(t)},p=(e,t)=>new Promise((n=>{requestAnimationFrame((()=>{const o=[0,0],r=d.get(e)||[],i=Array.from(r);for(let e=0;e{if(!e)return;const t=e.getSlotElementId();if(!document.getElementById(t))return p("rewardedSlotGranted",e),void setTimeout((()=>p("rewardedSlotClosed",e)),5e3);const n=document.getElementById(t);n&&n.appendChild(document.createElement("div")),(e=>{const t=document.getElementById(e.getSlotElementId());for(;t?.lastChild;)t.lastChild.remove()})(e),(e=>{const t=`google_ads_iframe_${e.getId()}`;document.getElementById(t)?.remove();const n=document.getElementById(e.getSlotElementId());if(n){const e=document.createElement("iframe");e.id=t,e.srcdoc="",e.style="position:absolute; width:0; height:0; left:0; right:0; z-index:-1; border:0",e.setAttribute("width",0),e.setAttribute("height",0),e.setAttribute("data-load-complete",!0),e.setAttribute("data-google-container-id",!0),e.setAttribute("sandbox",""),n.appendChild(e)}})(e),p("slotRenderEnded",e),p("slotRequested",e),p("slotResponseReceived",e),p("slotOnload",e),p("impressionViewable",e)},u={addEventListener:g,removeEventListener:c,enableSyncLoading:e,setRefreshUnfilledSlots:e,getSlots:o},y={addEventListener:g,removeEventListener:c,setContent:e};function f(){}function E(){}f.prototype.display=e,f.prototype.get=n,f.prototype.set=t,f.prototype.setClickUrl=t,f.prototype.setTagForChildDirectedTreatment=t,f.prototype.setTargeting=t,f.prototype.updateTargetingFromMap=t,E.prototype.addSize=t,E.prototype.build=n;const h=e=>{if("string"==typeof e)return[e];try{return Array.prototype.flat.call(e)}catch{}return[]},b=(e,n,o)=>{if(i.has(o))return document.getElementById(o)?.remove(),i.get(o);const d=new Map,g=new Map,c=new Set,p={advertiserId:void 0,campaignId:void 0,creativeId:void 0,creativeTemplateId:void 0,lineItemId:void 0},m=[{getHeight:()=>2,getWidth:()=>2}],u=(s.get(e)||0)+1;s.set(e,u);const y=`${e}_${u}`;let f="",E=null;const b=new Set,S={addService:e=>(b.add(e),S),clearCategoryExclusions:t,clearTargeting(e){void 0===e?g.clear():g.delete(e)},defineSizeMapping(e){return a.set(o,e),this},get:e=>d.get(e),getAdUnitPath:()=>e,getAttributeKeys:()=>Array.from(d.keys()),getCategoryExclusions:()=>Array.from(c),getClickUrl:()=>f,getCollapseEmptyDiv:()=>E,getContentUrl:()=>"",getDivStartsCollapsed:()=>null,getDomId:()=>o,getEscapedQemQueryId:()=>"",getFirstLook:()=>0,getId:()=>y,getHtml:()=>"",getName:()=>y,getOutOfPage:()=>!1,getResponseInformation:()=>p,getServices:()=>Array.from(b),getSizes:()=>m,getSlotElementId:()=>o,getSlotId:()=>S,getTargeting:e=>g.get(e)||l.get(e)||[],getTargetingKeys:()=>Array.from(new Set(Array.of(...l.keys(),...g.keys()))),getTargetingMap:()=>Object.assign(Object.fromEntries(l.entries()),Object.fromEntries(g.entries())),set:(e,t)=>(d.set(e,t),S),setCategoryExclusion:e=>(c.add(e),S),setClickUrl:e=>(f=e,S),setCollapseEmptyDiv:e=>(E=!!e,S),setSafeFrameConfig:t,setTagForChildDirectedTreatment:t,setTargeting:(e,t)=>(g.set(e,h(t)),S),toString:()=>y,updateTargetingFromMap:e=>(((e,t)=>{if("object"==typeof t)for(const n in t)Object.prototype.hasOwnProperty.call(t,n)&&e.set(n,h(t[n]))})(g,e),S)};return r.set(e,S),i.set(o,S),a.set(o,n),S},S={addEventListener:g,removeEventListener:c,clear:e,clearCategoryExclusions:t,clearTagForChildDirectedTreatment:t,clearTargeting(e){void 0===e?l.clear():l.delete(e)},collapseEmptyDivs:e,defineOutOfPagePassback:()=>new f,definePassback:()=>new f,disableInitialLoad:e,display:e,enableAsyncRendering:e,enableLazyLoad:e,enableSingleRequest:e,enableSyncRendering:e,enableVideoAds:e,get:n,getAttributeKeys:o,getTargeting:o,getTargetingKeys:o,getSlots:o,isInitialLoadDisabled:()=>!0,refresh:e,set:t,setCategoryExclusion:t,setCentering:e,setCookieOptions:t,setForceSafeFrame:t,setLocation:t,setPrivacySettings:t,setPublisherProvidedId:t,setRequestNonPersonalizedAds:t,setSafeFrameConfig:t,setTagForChildDirectedTreatment:t,setTargeting:t,setVideoContent:t,updateCorrelator:e},{googletag:v={}}=window,{cmd:C=[]}=v;for(v.apiReady=!0,v.cmd=[],v.cmd.push=e=>{try{e()}catch(e){console.trace(e)}return 1},v.companionAds=()=>u,v.content=()=>y,v.defineOutOfPageSlot=b,v.defineSlot=b,v.destroySlots=function(){r.clear(),i.clear()},v.disablePublisherConsole=e,v.display=function(e){let t;t=e?.getSlotElementId?e.getSlotElementId():e?.nodeType?e.id:String(e),m(i.get(t))},v.enableServices=e,v.getVersion=()=>"",v.pubads=()=>S,v.pubadsReady=!0,v.setAdIframeTitle=e,v.sizeMapping=()=>new E,v.enums={OutOfPageFormat:{REWARDED:"REWARDED"}},window.googletag=v;0!==C.length;)v.cmd.push(C.shift())})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["3fed16eb400f779de1afec5bc42b57fc"] === e) return; + (()=>{ + const e = ()=>{}, t = function() { + return this; + }, n1 = ()=>null, r = ()=>[], o = new Map, i1 = new Map, a = new Map, s = new Map, d = new Map, l = new Map, g = function(e, t) { + return d.has(e) || d.set(e, new Set), d.get(e).add(t), this; + }, c = function(e, t) { + return !!d.has(e) && d.get(e).delete(t); + }, p = (e, t)=>new Promise((n1)=>{ + requestAnimationFrame(()=>{ + const r = [ + 0, + 0 + ], o = d.get(e) || [], i1 = Array.from(o); + for(let e = 0; e < i1.length; e += 1)i1[e]({ + isEmpty: !0, + size: r, + slot: t + }); + n1(); + }); + }), m = { + addEventListener: g, + removeEventListener: c, + enableSyncLoading: e, + setRefreshUnfilledSlots: e, + getSlots: r + }, u = { + addEventListener: g, + removeEventListener: c, + setContent: e + }; + function f() {} + function y() {} + f.prototype.display = e, f.prototype.get = n1, f.prototype.set = t, f.prototype.setClickUrl = t, f.prototype.setTagForChildDirectedTreatment = t, f.prototype.setTargeting = t, f.prototype.updateTargetingFromMap = t, y.prototype.addSize = t, y.prototype.build = n1; + const b = (e)=>{ + if ("string" == typeof e) return [ + e + ]; + try { + return Array.prototype.flat.call(e); + } catch {} + return []; + }, h = (e, n1, r)=>{ + var _document_getElementById; + if (i1.has(r)) return (_document_getElementById = document.getElementById(r)) === null || _document_getElementById === void 0 ? void 0 : _document_getElementById.remove(), i1.get(r); + const d = new Map, g = new Map, c = new Set, p = { + advertiserId: void 0, + campaignId: void 0, + creativeId: void 0, + creativeTemplateId: void 0, + lineItemId: void 0 + }, m = [ + { + getHeight: ()=>2, + getWidth: ()=>2 + } + ], u = (a.get(e) || 0) + 1; + a.set(e, u); + const f = `${e}_${u}`; + let y = "", h = null; + const E = new Set, S = { + addService: (e)=>(E.add(e), S), + clearCategoryExclusions: t, + clearTargeting (e) { + void 0 === e ? g.clear() : g.delete(e); + }, + defineSizeMapping (e) { + return s.set(r, e), this; + }, + get: (e)=>d.get(e), + getAdUnitPath: ()=>e, + getAttributeKeys: ()=>Array.from(d.keys()), + getCategoryExclusions: ()=>Array.from(c), + getClickUrl: ()=>y, + getCollapseEmptyDiv: ()=>h, + getContentUrl: ()=>"", + getDivStartsCollapsed: ()=>null, + getDomId: ()=>r, + getEscapedQemQueryId: ()=>"", + getFirstLook: ()=>0, + getId: ()=>f, + getHtml: ()=>"", + getName: ()=>f, + getOutOfPage: ()=>!1, + getResponseInformation: ()=>p, + getServices: ()=>Array.from(E), + getSizes: ()=>m, + getSlotElementId: ()=>r, + getSlotId: ()=>S, + getTargeting: (e)=>g.get(e) || l.get(e) || [], + getTargetingKeys: ()=>Array.from(new Set(Array.of(...l.keys(), ...g.keys()))), + getTargetingMap: ()=>Object.assign(Object.fromEntries(l.entries()), Object.fromEntries(g.entries())), + set: (e, t)=>(d.set(e, t), S), + setCategoryExclusion: (e)=>(c.add(e), S), + setClickUrl: (e)=>(y = e, S), + setCollapseEmptyDiv: (e)=>(h = !!e, S), + setSafeFrameConfig: t, + setTagForChildDirectedTreatment: t, + setTargeting: (e, t)=>(g.set(e, b(t)), S), + toString: ()=>f, + updateTargetingFromMap: (e)=>(((e, t)=>{ + if ("object" == typeof t) for(const n1 in t)Object.prototype.hasOwnProperty.call(t, n1) && e.set(n1, b(t[n1])); + })(g, e), S) + }; + return o.set(e, S), i1.set(r, S), s.set(r, n1), S; + }, E = { + addEventListener: g, + removeEventListener: c, + clear: e, + clearCategoryExclusions: t, + clearTagForChildDirectedTreatment: t, + clearTargeting (e) { + void 0 === e ? l.clear() : l.delete(e); + }, + collapseEmptyDivs: e, + defineOutOfPagePassback: ()=>new f, + definePassback: ()=>new f, + disableInitialLoad: e, + display: e, + enableAsyncRendering: e, + enableLazyLoad: e, + enableSingleRequest: e, + enableSyncRendering: e, + enableVideoAds: e, + get: n1, + getAttributeKeys: r, + getTargeting: r, + getTargetingKeys: r, + getSlots: r, + isInitialLoadDisabled: ()=>!0, + refresh: e, + set: t, + setCategoryExclusion: t, + setCentering: e, + setCookieOptions: t, + setForceSafeFrame: t, + setLocation: t, + setPrivacySettings: t, + setPublisherProvidedId: t, + setRequestNonPersonalizedAds: t, + setSafeFrameConfig: t, + setTagForChildDirectedTreatment: t, + setTargeting: t, + setVideoContent: t, + updateCorrelator: e + }, { googletag: S = {} } = window, { cmd: v = [] } = S; + for(S.apiReady = !0, S.cmd = [], S.cmd.push = (e)=>{ + try { + e(); + } catch (e) { + console.trace(e); + } + return 1; + }, S.companionAds = ()=>m, S.content = ()=>u, S.defineOutOfPageSlot = h, S.defineSlot = h, S.destroySlots = function() { + o.clear(), i1.clear(); + }, S.disablePublisherConsole = e, S.display = function(e) { + let t; + t = (e === null || e === void 0 ? void 0 : e.getSlotElementId) ? e.getSlotElementId() : (e === null || e === void 0 ? void 0 : e.nodeType) ? e.id : String(e), ((e)=>{ + if (!e) return; + const t = e.getSlotElementId(); + if (!document.getElementById(t)) return p("rewardedSlotGranted", e), void setTimeout(()=>p("rewardedSlotClosed", e), 5e3); + const n1 = document.getElementById(t); + n1 && n1.appendChild(document.createElement("div")), ((e)=>{ + const t = document.getElementById(e.getSlotElementId()); + for(; t === null || t === void 0 ? void 0 : t.lastChild;)t.lastChild.remove(); + })(e), ((e)=>{ + var _document_getElementById; + const t = `google_ads_iframe_${e.getId()}`; + (_document_getElementById = document.getElementById(t)) === null || _document_getElementById === void 0 ? void 0 : _document_getElementById.remove(); + const n1 = document.getElementById(e.getSlotElementId()); + if (n1) { + const e = document.createElement("iframe"); + e.id = t, e.srcdoc = "", e.style = "position:absolute; width:0; height:0; left:0; right:0; z-index:-1; border:0", e.setAttribute("width", 0), e.setAttribute("height", 0), e.setAttribute("data-load-complete", !0), e.setAttribute("data-google-container-id", !0), e.setAttribute("sandbox", ""), n1.appendChild(e); + } + })(e), p("slotRenderEnded", e), p("slotRequested", e), p("slotResponseReceived", e), p("slotOnload", e), p("impressionViewable", e); + })(i1.get(t)); + }, S.enableServices = e, S.getVersion = ()=>"", S.pubads = ()=>E, S.pubadsReady = !0, S.setAdIframeTitle = e, S.sizeMapping = ()=>new y, S.enums = { + OutOfPageFormat: { + REWARDED: "REWARDED" + } + }, window.googletag = S; 0 !== v.length;)S.cmd.push(v.shift()); + })(); + Object.defineProperty(Window.prototype.toString, "3fed16eb400f779de1afec5bc42b57fc", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "3fed16eb400f779de1afec5bc42b57fc" due to: ' + e); + } + }, + '(()=>{window.GADS={init:function(n){n&&"function"==typeof n.onFinish&&n.onFinish()}};})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString.c2ffc94b6ce8e97f2c432d64690cfc9d === e) return; + window.GADS = { + init: function(e) { + e && "function" == typeof e.onFinish && e.onFinish(); + } + }; + Object.defineProperty(Window.prototype.toString, "c2ffc94b6ce8e97f2c432d64690cfc9d", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "c2ffc94b6ce8e97f2c432d64690cfc9d" due to: ' + e); + } + }, + '(()=>{const a=function(a){"function"==typeof a&&a()};window.aiptag={adplayer:"",cmd:[]},window.aiptag.cmd.player=[],window.aiptag.cmd.display=[],window.aiptag.cmd.push=a,window.aiptag.cmd.player.push=a,window.aiptag.cmd.display.push=a,window.aipDisplayTag={display:function(){}},window.aipPlayer=function(a){a&&a.AIP_COMPLETE&&(this.startPreRoll=a.AIP_COMPLETE)}})();': ()=>{ + try { + const a = "done"; + if (Window.prototype.toString["8e9df515585941ac85187baf28cedac1"] === a) return; + (()=>{ + const a = function(a) { + "function" == typeof a && a(); + }; + window.aiptag = { + adplayer: "", + cmd: [] + }, window.aiptag.cmd.player = [], window.aiptag.cmd.display = [], window.aiptag.cmd.push = a, window.aiptag.cmd.player.push = a, window.aiptag.cmd.display.push = a, window.aipDisplayTag = { + display: function() {} + }, window.aipPlayer = function(a) { + a && a.AIP_COMPLETE && (this.startPreRoll = a.AIP_COMPLETE); + }; + })(); + Object.defineProperty(Window.prototype.toString, "8e9df515585941ac85187baf28cedac1", { + value: a, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (a) { + console.error('Error executing AG js rule with uniqueId "8e9df515585941ac85187baf28cedac1" due to: ' + a); + } + }, + '(()=>{const e={breakStatus:"done"},o=["beforeReward","adViewed","adBreakDone"];window.adsbygoogle=window.adsbygoogle||[],window.adsbygoogle.push=function(d){var a;d&&"object"==typeof d&&(a=d,o.every((e=>e in a&&"function"==typeof a[e])))&&(d.beforeReward(),d.adViewed(),d.adBreakDone(e))}})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["36fd3167269f896e4009a009ae54edb3"] === e) return; + (()=>{ + const e = { + breakStatus: "done" + }, o = [ + "beforeReward", + "adViewed", + "adBreakDone" + ]; + window.adsbygoogle = window.adsbygoogle || [], window.adsbygoogle.push = function(r) { + var d; + r && "object" == typeof r && (d = r, o.every((e)=>e in d && "function" == typeof d[e])) && (r.beforeReward(), r.adViewed(), r.adBreakDone(e)); + }; + })(); + Object.defineProperty(Window.prototype.toString, "36fd3167269f896e4009a009ae54edb3", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "36fd3167269f896e4009a009ae54edb3" due to: ' + e); + } + }, + '(()=>{const r={apply:(r,e,t)=>{try{const r=(new Error).stack,e=t[0];if(r.includes("adBlockingDetected")&&e?.adFailurePercentage)return 0}catch(r){}return Reflect.apply(r,e,t)}};window.Array.prototype.push=new Proxy(window.Array.prototype.push,r)})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["2569876940a174e979811de8e9ef4610"] === e) return; + (()=>{ + const e = { + apply: (e, r, t)=>{ + try { + const e = (new Error).stack, r = t[0]; + if (e.includes("adBlockingDetected") && (r === null || r === void 0 ? void 0 : r.adFailurePercentage)) return 0; + } catch (e) {} + return Reflect.apply(e, r, t); + } + }; + window.Array.prototype.push = new Proxy(window.Array.prototype.push, e); + })(); + Object.defineProperty(Window.prototype.toString, "2569876940a174e979811de8e9ef4610", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "2569876940a174e979811de8e9ef4610" due to: ' + e); + } + }, + '(()=>{let e;const t={apply:(t,n,o)=>(o[0]?.behavior?.controlType&&o[0]?.initialItems&&"function"==typeof o[0].update&&(e=o[0].update,o[0].update=function(){this.update=e}),Reflect.apply(t,n,o))};window.Object.keys=new Proxy(window.Object.keys,t)})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString.ca0d0ab35fc86cd11d58ae07707d23fa === e) return; + (()=>{ + let e; + const t = { + apply: (t, o, a)=>{ + var _a__behavior, _a_, _a_1; + return ((_a_ = a[0]) === null || _a_ === void 0 ? void 0 : (_a__behavior = _a_.behavior) === null || _a__behavior === void 0 ? void 0 : _a__behavior.controlType) && ((_a_1 = a[0]) === null || _a_1 === void 0 ? void 0 : _a_1.initialItems) && "function" == typeof a[0].update && (e = a[0].update, a[0].update = function() { + this.update = e; + }), Reflect.apply(t, o, a); + } + }; + window.Object.keys = new Proxy(window.Object.keys, t); + })(); + Object.defineProperty(Window.prototype.toString, "ca0d0ab35fc86cd11d58ae07707d23fa", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "ca0d0ab35fc86cd11d58ae07707d23fa" due to: ' + e); + } + }, + '(()=>{const e={apply:(e,n,t)=>{const o=t[1];return o&&["adBlockingDetected","assessAdBlocking"].includes(o)&&t[2]&&"function"==typeof t[2].value&&(t[2].value=()=>{}),Reflect.apply(e,n,t)}};window.Object.defineProperty=new Proxy(window.Object.defineProperty,e)})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString.dd013aac8504d0cebb16580d054020f6 === e) return; + (()=>{ + const e = { + apply: (e, t, o)=>{ + const d = o[1]; + return d && [ + "adBlockingDetected", + "assessAdBlocking" + ].includes(d) && o[2] && "function" == typeof o[2].value && (o[2].value = ()=>{}), Reflect.apply(e, t, o); + } + }; + window.Object.defineProperty = new Proxy(window.Object.defineProperty, e); + })(); + Object.defineProperty(Window.prototype.toString, "dd013aac8504d0cebb16580d054020f6", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "dd013aac8504d0cebb16580d054020f6" due to: ' + e); + } + }, + '(()=>{window.adsbygoogle=window.adsbygoogle||[],window.adsbygoogle.loaded=!0,window.adsbygoogle.push=o=>{if("function"==typeof o?.params?.google_ad_loaded_callback)try{o.params.google_ad_loaded_callback()}catch(o){}};})();': ()=>{ + try { + const o = "done"; + if (Window.prototype.toString["8789bcbfab97b9bd3093b265e84dcf3d"] === o) return; + window.adsbygoogle = window.adsbygoogle || [], window.adsbygoogle.loaded = !0, window.adsbygoogle.push = (o)=>{ + var _o_params; + if ("function" == typeof (o === null || o === void 0 ? void 0 : (_o_params = o.params) === null || _o_params === void 0 ? void 0 : _o_params.google_ad_loaded_callback)) try { + o.params.google_ad_loaded_callback(); + } catch (o) {} + }; + Object.defineProperty(Window.prototype.toString, "8789bcbfab97b9bd3093b265e84dcf3d", { + value: o, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (o) { + console.error('Error executing AG js rule with uniqueId "8789bcbfab97b9bd3093b265e84dcf3d" due to: ' + o); + } + }, + "(()=>{window.detectIncognito=()=>new Promise((e=>e({isPrivate:!0})));})();": ()=>{ + try { + const e = "done"; + if (Window.prototype.toString.b8746b82569fc49e330a8e697f35c050 === e) return; + window.detectIncognito = ()=>new Promise((e)=>e({ + isPrivate: !0 + })); + Object.defineProperty(Window.prototype.toString, "b8746b82569fc49e330a8e697f35c050", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "b8746b82569fc49e330a8e697f35c050" due to: ' + e); + } + }, + '(()=>{const e={apply:(e,p,t)=>(!0===t[0]&&(t[0]=!1),Reflect.apply(e,p,t))},p={apply:(p,t,a)=>("__updateState"===a[1]&&a[2]&&a[2].value&&(a[2].value=new Proxy(a[2].value,e)),Reflect.apply(p,t,a))};window.Object.defineProperty=new Proxy(window.Object.defineProperty,p)})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["7c7972b55daaed8f85903876788453e9"] === e) return; + (()=>{ + const e = { + apply: (e, t, r)=>(!0 === r[0] && (r[0] = !1), Reflect.apply(e, t, r)) + }, t = { + apply: (t, r, o)=>("__updateState" === o[1] && o[2] && o[2].value && (o[2].value = new Proxy(o[2].value, e)), Reflect.apply(t, r, o)) + }; + window.Object.defineProperty = new Proxy(window.Object.defineProperty, t); + })(); + Object.defineProperty(Window.prototype.toString, "7c7972b55daaed8f85903876788453e9", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "7c7972b55daaed8f85903876788453e9" due to: ' + e); + } + }, + '(()=>{const e={apply:(e,t,n)=>{const o=n[0];if(o&&o.status.includes("success"))for(const e in n[0])"1"===n[0][e]?n[0][e]="0":1===n[0][e]&&(n[0][e]=0);return Reflect.apply(e,t,n)}},t=["adblockEnabled","=!!parseInt(","disable_adb"],n={apply:(n,o,s)=>{const p=s[0];return"function"==typeof p&&t.some((e=>p.toString().includes(e)))&&(s[0]=new Proxy(s[0],e)),Reflect.apply(n,o,s)}};window.Promise.prototype.then=new Proxy(window.Promise.prototype.then,n)})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["363a12f3db4852d23e4d57b5c84f4d68"] === e) return; + (()=>{ + const e = { + apply: (e, t, o)=>{ + const n1 = o[0]; + if (n1 && n1.status.includes("success")) for(const e in o[0])"1" === o[0][e] ? o[0][e] = "0" : 1 === o[0][e] && (o[0][e] = 0); + return Reflect.apply(e, t, o); + } + }, t = [ + "adblockEnabled", + "=!!parseInt(", + "disable_adb" + ], o = { + apply: (o, n1, r)=>{ + const d = r[0]; + return "function" == typeof d && t.some((e)=>d.toString().includes(e)) && (r[0] = new Proxy(r[0], e)), Reflect.apply(o, n1, r); + } + }; + window.Promise.prototype.then = new Proxy(window.Promise.prototype.then, o); + })(); + Object.defineProperty(Window.prototype.toString, "363a12f3db4852d23e4d57b5c84f4d68", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "363a12f3db4852d23e4d57b5c84f4d68" due to: ' + e); + } + }, + '(()=>{const t={apply:(t,n,e)=>{if(e[0]&&null===e[0].html?.detected&&"function"==typeof e[0].html?.instance?.start&&"function"==typeof e[0].env?.instance?.start&&"function"==typeof e[0].http?.instance?.start){const t=function(){Object.keys(this).forEach((t=>{"boolean"==typeof this[t]&&(this[t]=!1)}))};["html","env","http"].forEach((n=>{e[0][n].instance.start=t}))}return Reflect.apply(t,n,e)}};window.Object.keys=new Proxy(window.Object.keys,t)})();': ()=>{ + try { + const t = "done"; + if (Window.prototype.toString["8e5af140bb8ff6dfac87d2aa8a7181a7"] === t) return; + (()=>{ + const t = { + apply: (t, e, n1)=>{ + var _n__html, _n__html_instance, _n__html1, _n__env_instance, _n__env, _n__http_instance, _n__http; + if (n1[0] && null === ((_n__html = n1[0].html) === null || _n__html === void 0 ? void 0 : _n__html.detected) && "function" == typeof ((_n__html1 = n1[0].html) === null || _n__html1 === void 0 ? void 0 : (_n__html_instance = _n__html1.instance) === null || _n__html_instance === void 0 ? void 0 : _n__html_instance.start) && "function" == typeof ((_n__env = n1[0].env) === null || _n__env === void 0 ? void 0 : (_n__env_instance = _n__env.instance) === null || _n__env_instance === void 0 ? void 0 : _n__env_instance.start) && "function" == typeof ((_n__http = n1[0].http) === null || _n__http === void 0 ? void 0 : (_n__http_instance = _n__http.instance) === null || _n__http_instance === void 0 ? void 0 : _n__http_instance.start)) { + const t = function() { + Object.keys(this).forEach((t)=>{ + "boolean" == typeof this[t] && (this[t] = !1); + }); + }; + [ + "html", + "env", + "http" + ].forEach((e)=>{ + n1[0][e].instance.start = t; + }); + } + return Reflect.apply(t, e, n1); + } + }; + window.Object.keys = new Proxy(window.Object.keys, t); + })(); + Object.defineProperty(Window.prototype.toString, "8e5af140bb8ff6dfac87d2aa8a7181a7", { + value: t, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (t) { + console.error('Error executing AG js rule with uniqueId "8e5af140bb8ff6dfac87d2aa8a7181a7" due to: ' + t); + } + }, + "(()=>{document.addEventListener('DOMContentLoaded',()=>{var el=document.body; var ce=document.createElement('div'); if(el) { el.appendChild(ce); ce.setAttribute(\"id\", \"QGSBETJjtZkYH\"); }})})();": ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["660d8dc0098c8febc0f6d884977e6d4e"] === e) return; + document.addEventListener("DOMContentLoaded", ()=>{ + var e = document.body, t = document.createElement("div"); + if (e) { + e.appendChild(t); + t.setAttribute("id", "QGSBETJjtZkYH"); + } + }); + Object.defineProperty(Window.prototype.toString, "660d8dc0098c8febc0f6d884977e6d4e", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "660d8dc0098c8febc0f6d884977e6d4e" due to: ' + e); + } + }, + '(()=>{document.addEventListener(\'DOMContentLoaded\',()=>{const e=document.querySelector("#widescreen1");if(e){const t=document.createElement("div");t.setAttribute("id","google_ads_iframe_"),e.appendChild(t)}})})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["44c722190e3d03dbed05660dc5040600"] === e) return; + document.addEventListener("DOMContentLoaded", ()=>{ + const e = document.querySelector("#widescreen1"); + if (e) { + const t = document.createElement("div"); + t.setAttribute("id", "google_ads_iframe_"), e.appendChild(t); + } + }); + Object.defineProperty(Window.prototype.toString, "44c722190e3d03dbed05660dc5040600", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "44c722190e3d03dbed05660dc5040600" due to: ' + e); + } + }, + '(()=>{const n=window.String.prototype.includes,o={apply:(o,t,i)=>{const c=i[0];return!(!i||!n.call(c,"function onclick(lczxsusin)"))||Reflect.apply(o,t,i)}};window.String.prototype.includes=new Proxy(window.String.prototype.includes,o)})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["2e3a208e2520b56c4a151edf4ed886f4"] === e) return; + (()=>{ + const e = window.String.prototype.includes, t = { + apply: (t, o, n1)=>{ + const r = n1[0]; + return !(!n1 || !e.call(r, "function onclick(lczxsusin)")) || Reflect.apply(t, o, n1); + } + }; + window.String.prototype.includes = new Proxy(window.String.prototype.includes, t); + })(); + Object.defineProperty(Window.prototype.toString, "2e3a208e2520b56c4a151edf4ed886f4", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "2e3a208e2520b56c4a151edf4ed886f4" due to: ' + e); + } + }, + '(()=>{const e=new Set(["fimg","faimg","fbmg","fcmg","fdmg","femg","ffmg","fgmg","fjmg","fkmg"]),t={apply:(t,c,n)=>{const s=n[2];if(s){const t=Object.keys(s).length;if(t>1&&t<20)for(let t in s)if(e.has(t)&&!0===n[2][t])try{n[2][t]=!1}catch(e){console.trace(e)}else if(!0===s[t])try{const e=(new Error).stack;/NodeList\\.forEach|(|blob):[\\s\\S]{1,500}$/.test(e)&&(s[t]=!1)}catch(e){console.trace(e)}}return Reflect.apply(t,c,n)}};window.Object.assign=new Proxy(window.Object.assign,t)})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["26f59c9e189170e8d303a40a632b2e28"] === e) return; + (()=>{ + const e = new Set([ + "fimg", + "faimg", + "fbmg", + "fcmg", + "fdmg", + "femg", + "ffmg", + "fgmg", + "fjmg", + "fkmg" + ]), t = { + apply: (t, o, n1)=>{ + const r = n1[2]; + if (r) { + const t = Object.keys(r).length; + if (t > 1 && t < 20) { + for(let t in r)if (e.has(t) && !0 === n1[2][t]) try { + n1[2][t] = !1; + } catch (e) { + console.trace(e); + } + else if (!0 === r[t]) try { + const e = (new Error).stack; + /NodeList\.forEach|(|blob):[\s\S]{1,500}$/.test(e) && (r[t] = !1); + } catch (e) { + console.trace(e); + } + } + } + return Reflect.apply(t, o, n1); + } + }; + window.Object.assign = new Proxy(window.Object.assign, t); + })(); + Object.defineProperty(Window.prototype.toString, "26f59c9e189170e8d303a40a632b2e28", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "26f59c9e189170e8d303a40a632b2e28" due to: ' + e); + } + }, + '(()=>{const e={apply:(e,t,p)=>{const o=p[1];return o&&"string"==typeof o&&o.match(/pagead2\\.googlesyndication\\.com|google.*\\.js|\\/.*?\\/.*?ad.*?\\.js|\\.(shop|quest|autos)\\/.*?\\.(js|php|html)/)&&(t.prevent=!0),Reflect.apply(e,t,p)}};window.XMLHttpRequest.prototype.open=new Proxy(window.XMLHttpRequest.prototype.open,e);const t={apply:(e,t,p)=>{if(!t.prevent)return Reflect.apply(e,t,p)}};window.XMLHttpRequest.prototype.send=new Proxy(window.XMLHttpRequest.prototype.send,t)})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString.c7605ee2684a2146beda3b04ccfa8bec === e) return; + (()=>{ + const e = { + apply: (e, t, o)=>{ + const p = o[1]; + return p && "string" == typeof p && p.match(/pagead2\.googlesyndication\.com|google.*\.js|\/.*?\/.*?ad.*?\.js|\.(shop|quest|autos)\/.*?\.(js|php|html)/) && (t.prevent = !0), Reflect.apply(e, t, o); + } + }; + window.XMLHttpRequest.prototype.open = new Proxy(window.XMLHttpRequest.prototype.open, e); + const t = { + apply: (e, t, o)=>{ + if (!t.prevent) return Reflect.apply(e, t, o); + } + }; + window.XMLHttpRequest.prototype.send = new Proxy(window.XMLHttpRequest.prototype.send, t); + })(); + Object.defineProperty(Window.prototype.toString, "c7605ee2684a2146beda3b04ccfa8bec", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "c7605ee2684a2146beda3b04ccfa8bec" due to: ' + e); + } + }, + '(()=>{window.vhit=!0;const t=/free-download-form|\'\\),_0x|\\)\\]\\(function\\(_0x|,Array\\[_0x|function\\(_0x.*\\){const _0x.*\\[_0x|adblock|function Boolean\\(\\) \\{\\s*\\[native code\\]|=>\\{const _0x|undefined\\?new\\.target:|detectAdblock|===!0\\}/,e={apply:async(t,e,o)=>{const n=o[0];return"boolean"==typeof n&&!0===n&&(o[0]=!1),"string"==typeof n&&"blocked"===n&&(o[0]=""),await new Promise((t=>setTimeout(t,2e3))),Reflect.apply(t,e,o)}},o={apply:(o,n,r)=>{const i=r[0];return"function"==typeof i&&t.test(i.toString())&&(r[0]=new Proxy(r[0],e)),Reflect.apply(o,n,r)}};window.Promise.prototype.then=new Proxy(window.Promise.prototype.then,o);const n=async t=>{t.preventDefault();const e=t.currentTarget;"function"==typeof window.vhit?.report&&await window.vhit.report(),e.form.requestSubmit(e)};window.addEventListener("load",(()=>{const t=document.querySelector("form#submit-form button#submit-button");if(t){const e=t.cloneNode(!0);t.parentNode.replaceChild(e,t),e.removeAttribute("disabled"),e.textContent="Continue",e.addEventListener("click",n)}}))})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString.f85025076e463ddc0dfe66ff2a54b9cf === e) return; + (()=>{ + window.vhit = !0; + const e = /free-download-form|'\),_0x|\)\]\(function\(_0x|,Array\[_0x|function\(_0x.*\){const _0x.*\[_0x|adblock|function Boolean\(\) \{\s*\[native code\]|=>\{const _0x|undefined\?new\.target:|detectAdblock|===!0\}/, t = { + apply: async (e, t, o)=>{ + const n1 = o[0]; + return "boolean" == typeof n1 && !0 === n1 && (o[0] = !1), "string" == typeof n1 && "blocked" === n1 && (o[0] = ""), await new Promise((e)=>setTimeout(e, 2e3)), Reflect.apply(e, t, o); + } + }, o = { + apply: (o, n1, r)=>{ + const i1 = r[0]; + return "function" == typeof i1 && e.test(i1.toString()) && (r[0] = new Proxy(r[0], t)), Reflect.apply(o, n1, r); + } + }; + window.Promise.prototype.then = new Proxy(window.Promise.prototype.then, o); + const n1 = async (e)=>{ + var _window_vhit; + e.preventDefault(); + const t = e.currentTarget; + "function" == typeof ((_window_vhit = window.vhit) === null || _window_vhit === void 0 ? void 0 : _window_vhit.report) && await window.vhit.report(), t.form.requestSubmit(t); + }; + window.addEventListener("load", ()=>{ + const e = document.querySelector("form#submit-form button#submit-button"); + if (e) { + const t = e.cloneNode(!0); + e.parentNode.replaceChild(t, e), t.removeAttribute("disabled"), t.textContent = "Continue", t.addEventListener("click", n1); + } + }); + })(); + Object.defineProperty(Window.prototype.toString, "f85025076e463ddc0dfe66ff2a54b9cf", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "f85025076e463ddc0dfe66ff2a54b9cf" due to: ' + e); + } + }, + '(()=>{const t={apply:(t,o,e)=>{try{const t=e[0];t&&"object"==typeof t&&Object.prototype.hasOwnProperty.call(t,"failed_hosts")&&Object.prototype.hasOwnProperty.call(t,"blocked")&&(t.failed_hosts="",t.blocked=!1)}catch(t){}return Reflect.apply(t,o,e)}};window.JSON.stringify=new Proxy(window.JSON.stringify,t)})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["1503dc258e7809ec4d938941a16df979"] === e) return; + (()=>{ + const e = { + apply: (e, t, o)=>{ + try { + const e = o[0]; + e && "object" == typeof e && Object.prototype.hasOwnProperty.call(e, "failed_hosts") && Object.prototype.hasOwnProperty.call(e, "blocked") && (e.failed_hosts = "", e.blocked = !1); + } catch (e) {} + return Reflect.apply(e, t, o); + } + }; + window.JSON.stringify = new Proxy(window.JSON.stringify, e); + })(); + Object.defineProperty(Window.prototype.toString, "1503dc258e7809ec4d938941a16df979", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "1503dc258e7809ec4d938941a16df979" due to: ' + e); + } + }, + '(()=>{const o=!1,t=Reflect.apply,e=Object.hasOwn,r=Array.isArray,n=Promise.prototype.then,l=Boolean,i=JSON.stringify,s=new Proxy(l,{apply:(o,e,r)=>(!0===r[0]&&(r[0]=!1),t(o,e,r))});window.Promise.prototype.then=new Proxy(n,{apply:(o,e,r)=>(r[0]===l&&(r[0]=s),t(o,e,r))}),window.JSON.stringify=new Proxy(i,{apply:(n,l,i)=>{try{const o=i[0];null!==o&&"object"==typeof o&&!r(o)&&e(o,"blocked")&&e(o,"failed_hosts")&&(i[0]={...o,blocked:!1,path:"clean",dom_hits:0,dom_control_blocked:!1,target_hits:0,target_timeouts:0,control_hits:0,control_timeouts:0,network_control_blocked:!1,forged_hits:0,forgery_voided:!1,tamper:"",failed_hosts:""})}catch(t){o}return t(n,l,i)}})})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString.f4484bab84a05eb6a0713bacb2881845 === e) return; + (()=>{ + const e = Reflect.apply, o = Object.hasOwn, t = Array.isArray, r = Promise.prototype.then, n1 = Boolean, a = JSON.stringify, i1 = new Proxy(n1, { + apply: (o, t, r)=>(!0 === r[0] && (r[0] = !1), e(o, t, r)) + }); + window.Promise.prototype.then = new Proxy(r, { + apply: (o, t, r)=>(r[0] === n1 && (r[0] = i1), e(o, t, r)) + }), window.JSON.stringify = new Proxy(a, { + apply: (r, n1, a)=>{ + try { + const e = a[0]; + null !== e && "object" == typeof e && !t(e) && o(e, "blocked") && o(e, "failed_hosts") && (a[0] = { + ...e, + blocked: !1, + path: "clean", + dom_hits: 0, + dom_control_blocked: !1, + target_hits: 0, + target_timeouts: 0, + control_hits: 0, + control_timeouts: 0, + network_control_blocked: !1, + forged_hits: 0, + forgery_voided: !1, + tamper: "", + failed_hosts: "" + }); + } catch (e) {} + return e(r, n1, a); + } + }); + })(); + Object.defineProperty(Window.prototype.toString, "f4484bab84a05eb6a0713bacb2881845", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "f4484bab84a05eb6a0713bacb2881845" due to: ' + e); + } + }, + '(()=>{const e=()=>{document.querySelectorAll(".chakra-portal").forEach((e=>{e.querySelector(\'.chakra-modal__overlay[style*="opacity"]\')&&e.setAttribute("style","display: none !important;")}))},t=()=>{},a=function(t,a){const r={name:t,listener:a};requestAnimationFrame((()=>{try{"rewardedSlotGranted"===r.name&&setTimeout(e,2e3),r.listener()}catch(e){}}))};window.googletag={cmd:[],pubads:()=>({addEventListener:a,removeEventListener:t,refresh:t,getTargeting:()=>[],setTargeting:t,disableInitialLoad:t,enableSingleRequest:t,collapseEmptyDivs:t,getSlots:t}),defineSlot:()=>({addService(){}}),defineOutOfPageSlot:t,enableServices:t,display:t,enums:{OutOfPageFormat:{REWARDED:1}}},googletag.cmd.push=e=>{try{e()}catch(e){}return 1}})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["788553a11ab6cd27600ce601f07d7af8"] === e) return; + (()=>{ + const e = ()=>{ + document.querySelectorAll(".chakra-portal").forEach((e)=>{ + e.querySelector('.chakra-modal__overlay[style*="opacity"]') && e.setAttribute("style", "display: none !important;"); + }); + }, t = ()=>{}, r = function(t, r) { + const a = { + name: t, + listener: r + }; + requestAnimationFrame(()=>{ + try { + "rewardedSlotGranted" === a.name && setTimeout(e, 2e3), a.listener(); + } catch (e) {} + }); + }; + window.googletag = { + cmd: [], + pubads: ()=>({ + addEventListener: r, + removeEventListener: t, + refresh: t, + getTargeting: ()=>[], + setTargeting: t, + disableInitialLoad: t, + enableSingleRequest: t, + collapseEmptyDivs: t, + getSlots: t + }), + defineSlot: ()=>({ + addService () {} + }), + defineOutOfPageSlot: t, + enableServices: t, + display: t, + enums: { + OutOfPageFormat: { + REWARDED: 1 + } + } + }, googletag.cmd.push = (e)=>{ + try { + e(); + } catch (e) {} + return 1; + }; + })(); + Object.defineProperty(Window.prototype.toString, "788553a11ab6cd27600ce601f07d7af8", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "788553a11ab6cd27600ce601f07d7af8" due to: ' + e); + } + }, + '(()=>{document.addEventListener(\'DOMContentLoaded\',()=>{if(window.CryptoJSAesJson&&window.CryptoJSAesJson.decrypt){const e=document.createElement("link");function t(){const t=document.querySelector(".entry-header.header");return parseInt(t.getAttribute("data-id"))}e.setAttribute("rel","stylesheet"),e.setAttribute("media","all"),e.setAttribute("href","/wp-content/cache/autoptimize/css/autoptimize_92c5b1cf0217cba9b3fab27d39f320b9.css"),document.head.appendChild(e);const r=3,n=5,o=13,a="07";let c="",i="";const d=1,l=6,g=1,s=5,u=2,p=8,m=8,A=(t,e)=>parseInt(t.toString()+e.toString()),b=(t,e,r)=>t.toString()+e.toString()+r.toString(),S=()=>{const e=document.querySelectorAll(".reading-content .page-break img").length;let c=parseInt((t()+A(o,a))*r-e);return c=A(2*n+1,c),c},h=()=>{const e=document.querySelectorAll(".reading-content .page-break img").length;let r=parseInt((t()+A(p,m))*(2*d)-e-(2*d*2+1));return r=b(2*l+g+g+1,c,r),r},y=()=>{const e=document.querySelectorAll(".reading-content .page-break img").length;return b(t()+2*s*2,i,e*(2*u))},f=(t,e)=>CryptoJSAesJson.decrypt(t,e);let k=document.querySelectorAll(".reading-content .page-break img");k.forEach((t=>{const e=t.getAttribute("id"),r=f(e,S().toString());t.setAttribute("id",r)})),k=document.querySelectorAll(".reading-content .page-break img"),k.forEach((t=>{const e=t.getAttribute("id"),r=parseInt(e.replace(/image-(\\d+)[a-z]+/i,"$1"));document.querySelectorAll(".reading-content .page-break")[r].appendChild(t)})),k=document.querySelectorAll(".reading-content .page-break img"),k.forEach((t=>{const e=t.getAttribute("id"),r=e.slice(-1);c+=r,t.setAttribute("id",e.slice(0,-1))})),k=document.querySelectorAll(".reading-content .page-break img"),k.forEach((t=>{const e=t.getAttribute("dta"),r=f(e,h().toString());t.setAttribute("dta",r)})),k=document.querySelectorAll(".reading-content .page-break img"),k.forEach((t=>{const e=t.getAttribute("dta").slice(-2);i+=e,t.removeAttribute("dta")})),k.forEach((t=>{var e=t.getAttribute("data-src"),r=f(e,y().toString());t.setAttribute("data-src",r)})),k.forEach((t=>{t.classList.add("wp-manga-chapter-img","img-responsive","lazyload","effect-fade")}))}})})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["793501cfe6b6465e5f629489b079c172"] === e) return; + document.addEventListener("DOMContentLoaded", ()=>{ + if (window.CryptoJSAesJson && window.CryptoJSAesJson.decrypt) { + const t = document.createElement("link"); + function e() { + const e = document.querySelector(".entry-header.header"); + return parseInt(e.getAttribute("data-id")); + } + t.setAttribute("rel", "stylesheet"), t.setAttribute("media", "all"), t.setAttribute("href", "/wp-content/cache/autoptimize/css/autoptimize_92c5b1cf0217cba9b3fab27d39f320b9.css"), document.head.appendChild(t); + const r = 3, n1 = 5, o = 13, c = "07"; + let a = "", i1 = ""; + const d = 1, l = 6, u = 1, g = 5, s = 2, b = 8, p = 8, m = (e, t)=>parseInt(e.toString() + t.toString()), A = (e, t, r)=>e.toString() + t.toString() + r.toString(), f = ()=>{ + const t = document.querySelectorAll(".reading-content .page-break img").length; + let a = parseInt((e() + m(o, c)) * r - t); + return a = m(2 * n1 + 1, a), a; + }, S = ()=>{ + const t = document.querySelectorAll(".reading-content .page-break img").length; + let r = parseInt((e() + m(b, p)) * (2 * d) - t - (2 * d * 2 + 1)); + return r = A(2 * l + u + u + 1, a, r), r; + }, y = ()=>{ + const t = document.querySelectorAll(".reading-content .page-break img").length; + return A(e() + 2 * g * 2, i1, t * (2 * s)); + }, h = (e, t)=>CryptoJSAesJson.decrypt(e, t); + let q = document.querySelectorAll(".reading-content .page-break img"); + q.forEach((e)=>{ + const t = e.getAttribute("id"), r = h(t, f().toString()); + e.setAttribute("id", r); + }), q = document.querySelectorAll(".reading-content .page-break img"), q.forEach((e)=>{ + const t = e.getAttribute("id"), r = parseInt(t.replace(/image-(\d+)[a-z]+/i, "$1")); + document.querySelectorAll(".reading-content .page-break")[r].appendChild(e); + }), q = document.querySelectorAll(".reading-content .page-break img"), q.forEach((e)=>{ + const t = e.getAttribute("id"), r = t.slice(-1); + a += r, e.setAttribute("id", t.slice(0, -1)); + }), q = document.querySelectorAll(".reading-content .page-break img"), q.forEach((e)=>{ + const t = e.getAttribute("dta"), r = h(t, S().toString()); + e.setAttribute("dta", r); + }), q = document.querySelectorAll(".reading-content .page-break img"), q.forEach((e)=>{ + const t = e.getAttribute("dta").slice(-2); + i1 += t, e.removeAttribute("dta"); + }), q.forEach((e)=>{ + var t = e.getAttribute("data-src"), r = h(t, y().toString()); + e.setAttribute("data-src", r); + }), q.forEach((e)=>{ + e.classList.add("wp-manga-chapter-img", "img-responsive", "lazyload", "effect-fade"); + }); + } + }); + Object.defineProperty(Window.prototype.toString, "793501cfe6b6465e5f629489b079c172", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "793501cfe6b6465e5f629489b079c172" due to: ' + e); + } + }, + '(()=>{const e=new Map,t=function(){},o=t;o.prototype.dispose=t,o.prototype.setNetwork=t,o.prototype.resize=t,o.prototype.setServer=t,o.prototype.setLogLevel=t,o.prototype.newContext=function(){return this},o.prototype.setParameter=t,o.prototype.addEventListener=function(t,o){t&&(console.debug(`Type: ${t}, callback: ${o}`),e.set(t,o))},o.prototype.removeEventListener=t,o.prototype.setProfile=t,o.prototype.setCapability=t,o.prototype.setVideoAsset=t,o.prototype.setSiteSection=t,o.prototype.addKeyValue=t,o.prototype.addTemporalSlot=t,o.prototype.registerCustomPlayer=t,o.prototype.setVideoDisplaySize=t,o.prototype.setContentVideoElement=t,o.prototype.registerVideoDisplayBase=t,o.prototype.submitRequest=function(){const t={type:tv.freewheel.SDK.EVENT_SLOT_ENDED},o=e.get("EVENT_SLOT_ENDED");o&&setTimeout((()=>{try{o(t)}catch(e){console.error(e)}}),1)},window.tv={freewheel:{SDK:{Ad:t,AdManager:o,AdListener:t,_instanceQueue:{},setLogLevel:t,EVENT_SLOT_ENDED:"EVENT_SLOT_ENDED"}}}})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["75be2f053259701edcb277b5ff24cd28"] === e) return; + (()=>{ + const e = new Map, t = function() {}, o = t; + o.prototype.dispose = t, o.prototype.setNetwork = t, o.prototype.resize = t, o.prototype.setServer = t, o.prototype.setLogLevel = t, o.prototype.newContext = function() { + return this; + }, o.prototype.setParameter = t, o.prototype.addEventListener = function(t, o) { + t && (console.debug(`Type: ${t}, callback: ${o}`), e.set(t, o)); + }, o.prototype.removeEventListener = t, o.prototype.setProfile = t, o.prototype.setCapability = t, o.prototype.setVideoAsset = t, o.prototype.setSiteSection = t, o.prototype.addKeyValue = t, o.prototype.addTemporalSlot = t, o.prototype.registerCustomPlayer = t, o.prototype.setVideoDisplaySize = t, o.prototype.setContentVideoElement = t, o.prototype.registerVideoDisplayBase = t, o.prototype.submitRequest = function() { + const t = { + type: tv.freewheel.SDK.EVENT_SLOT_ENDED + }, o = e.get("EVENT_SLOT_ENDED"); + o && setTimeout(()=>{ + try { + o(t); + } catch (e) { + console.error(e); + } + }, 1); + }, window.tv = { + freewheel: { + SDK: { + Ad: t, + AdManager: o, + AdListener: t, + _instanceQueue: {}, + setLogLevel: t, + EVENT_SLOT_ENDED: "EVENT_SLOT_ENDED" + } + } + }; + })(); + Object.defineProperty(Window.prototype.toString, "75be2f053259701edcb277b5ff24cd28", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "75be2f053259701edcb277b5ff24cd28" due to: ' + e); + } + }, + '(()=>{const e=Object.getOwnPropertyDescriptor(Element.prototype,"innerHTML").set,t=Object.getOwnPropertyDescriptor(Element.prototype,"innerHTML").get;Object.defineProperty(Element.prototype,"innerHTML",{get(){return t.call(this)},set(t){if(t?.includes?.("disable Adblock"))return;e.call(this,t)}})})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["272813737cd339fd9b635273bcbc7485"] === e) return; + (()=>{ + const e = Object.getOwnPropertyDescriptor(Element.prototype, "innerHTML").set, t = Object.getOwnPropertyDescriptor(Element.prototype, "innerHTML").get; + Object.defineProperty(Element.prototype, "innerHTML", { + get () { + return t.call(this); + }, + set (t) { + var _t_includes; + (t === null || t === void 0 ? void 0 : (_t_includes = t.includes) === null || _t_includes === void 0 ? void 0 : _t_includes.call(t, "disable Adblock")) || e.call(this, t); + } + }); + })(); + Object.defineProperty(Window.prototype.toString, "272813737cd339fd9b635273bcbc7485", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "272813737cd339fd9b635273bcbc7485" due to: ' + e); + } + }, + '(()=>{const t=/free-download-form|\'\\),_0x|\\)\\]\\(function\\(_0x|=>\\{return/,e={apply:(t,e,o)=>{const n=o[0];"boolean"==typeof n&&!0===n&&(o[0]=!1),setTimeout((()=>Reflect.apply(t,e,o)),2e3)}},o={apply:(o,n,r)=>{const i=r[0];return"function"==typeof i&&t.test(i.toString())&&(r[0]=new Proxy(r[0],e)),Reflect.apply(o,n,r)}};window.Promise.prototype.then=new Proxy(window.Promise.prototype.then,o);const n=async t=>{t.preventDefault();const e=t.currentTarget;"function"==typeof window.vhit?.report&&await window.vhit.report(),e.form.requestSubmit(e)};window.addEventListener("load",(()=>{const t=document.querySelector("form#go-link button#link-button");if(t){const e=t.cloneNode(!0);t.parentNode.replaceChild(e,t),e.removeAttribute("disabled"),e.addEventListener("click",n)}}))})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["352a8e829f13921ee700e5e67451dada"] === e) return; + (()=>{ + const e = /free-download-form|'\),_0x|\)\]\(function\(_0x|=>\{return/, t = { + apply: (e, t, o)=>{ + const n1 = o[0]; + "boolean" == typeof n1 && !0 === n1 && (o[0] = !1), setTimeout(()=>Reflect.apply(e, t, o), 2e3); + } + }, o = { + apply: (o, n1, r)=>{ + const i1 = r[0]; + return "function" == typeof i1 && e.test(i1.toString()) && (r[0] = new Proxy(r[0], t)), Reflect.apply(o, n1, r); + } + }; + window.Promise.prototype.then = new Proxy(window.Promise.prototype.then, o); + const n1 = async (e)=>{ + var _window_vhit; + e.preventDefault(); + const t = e.currentTarget; + "function" == typeof ((_window_vhit = window.vhit) === null || _window_vhit === void 0 ? void 0 : _window_vhit.report) && await window.vhit.report(), t.form.requestSubmit(t); + }; + window.addEventListener("load", ()=>{ + const e = document.querySelector("form#go-link button#link-button"); + if (e) { + const t = e.cloneNode(!0); + e.parentNode.replaceChild(t, e), t.removeAttribute("disabled"), t.addEventListener("click", n1); + } + }); + })(); + Object.defineProperty(Window.prototype.toString, "352a8e829f13921ee700e5e67451dada", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "352a8e829f13921ee700e5e67451dada" due to: ' + e); + } + }, + '(()=>{let e=!0;const t=()=>{e=!0},r={apply:(r,s,n)=>{if(!e)return Reflect.apply(r,s,n);try{const o=n[0];if(o?.request?.body){let e=o.request.body;if(e?.includes(\'"event_type":"end"\')&&e?.includes(\'"client_timestamp":\'))return e=e.replace(/"client_timestamp":\\d+/,`"client_timestamp":${Date.now()+6e4}`),o.request.body=e,void setTimeout(()=>{Reflect.apply(r,s,n)},2e3);if(e?.includes(\'"event_type":"error"\'))return}if(o?.request?.url?.includes("/stream/v1/channels/"))return void setTimeout(()=>{Reflect.apply(r,s,n),e=!1,setTimeout(t,6e5)},4e3)}catch(e){}return Reflect.apply(r,s,n)}};window.Worker.prototype.postMessage=new Proxy(window.Worker.prototype.postMessage,r)})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString.c72ba64bb6de276c5955d880eac9ae87 === e) return; + (()=>{ + let e = !0; + const t = ()=>{ + e = !0; + }, r = { + apply: (r, o, n1)=>{ + if (!e) return Reflect.apply(r, o, n1); + try { + var _c_request, _c_request_url, _c_request1; + const c = n1[0]; + if (c === null || c === void 0 ? void 0 : (_c_request = c.request) === null || _c_request === void 0 ? void 0 : _c_request.body) { + let e = c.request.body; + if ((e === null || e === void 0 ? void 0 : e.includes('"event_type":"end"')) && (e === null || e === void 0 ? void 0 : e.includes('"client_timestamp":'))) return e = e.replace(/"client_timestamp":\d+/, `"client_timestamp":${Date.now() + 6e4}`), c.request.body = e, void setTimeout(()=>{ + Reflect.apply(r, o, n1); + }, 2e3); + if (e === null || e === void 0 ? void 0 : e.includes('"event_type":"error"')) return; + } + if (c === null || c === void 0 ? void 0 : (_c_request1 = c.request) === null || _c_request1 === void 0 ? void 0 : (_c_request_url = _c_request1.url) === null || _c_request_url === void 0 ? void 0 : _c_request_url.includes("/stream/v1/channels/")) return void setTimeout(()=>{ + Reflect.apply(r, o, n1), e = !1, setTimeout(t, 6e5); + }, 4e3); + } catch (e) {} + return Reflect.apply(r, o, n1); + } + }; + window.Worker.prototype.postMessage = new Proxy(window.Worker.prototype.postMessage, r); + })(); + Object.defineProperty(Window.prototype.toString, "c72ba64bb6de276c5955d880eac9ae87", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "c72ba64bb6de276c5955d880eac9ae87" due to: ' + e); + } + }, + '(()=>{const e=window.Promise,o={construct:(o,t,n)=>t[0]&&t[0]?.toString()?.includes("[!1,!1,!1,!1]")&&t[0]?.toString()?.includes(".responseText")?e.resolve(!1):Reflect.construct(o,t,n)},t=new Proxy(window.Promise,o);Object.defineProperty(window,"Promise",{set:e=>{},get:()=>t})})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["4e4e57eff747aed19b1eb6c7b2758126"] === e) return; + (()=>{ + const e = window.Promise, t = { + construct: (t, o, r)=>{ + var _o__toString, _o_, _o__toString1, _o_1; + return o[0] && ((_o_ = o[0]) === null || _o_ === void 0 ? void 0 : (_o__toString = _o_.toString()) === null || _o__toString === void 0 ? void 0 : _o__toString.includes("[!1,!1,!1,!1]")) && ((_o_1 = o[0]) === null || _o_1 === void 0 ? void 0 : (_o__toString1 = _o_1.toString()) === null || _o__toString1 === void 0 ? void 0 : _o__toString1.includes(".responseText")) ? e.resolve(!1) : Reflect.construct(t, o, r); + } + }, o = new Proxy(window.Promise, t); + Object.defineProperty(window, "Promise", { + set: (e)=>{}, + get: ()=>o + }); + })(); + Object.defineProperty(Window.prototype.toString, "4e4e57eff747aed19b1eb6c7b2758126", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "4e4e57eff747aed19b1eb6c7b2758126" due to: ' + e); + } + }, + "(()=>{window.viAPItag={init(){}}})();": ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["88012e776a891c545cc6e77db0f643af"] === e) return; + window.viAPItag = { + init () {} + }; + Object.defineProperty(Window.prototype.toString, "88012e776a891c545cc6e77db0f643af", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "88012e776a891c545cc6e77db0f643af" due to: ' + e); + } + }, + '(()=>{document.addEventListener("DOMContentLoaded",(()=>{ "function"==typeof ViewModelBase&&"object"==typeof ViewModelBase.prototype&&"function"==typeof ViewModelBase.prototype.LoadBrandAdAsync&&(ViewModelBase.prototype.LoadBrandAdAsync=function(){}) }));})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString.ac3452ef83db17c4e84323d15083a03b === e) return; + document.addEventListener("DOMContentLoaded", ()=>{ + "function" == typeof ViewModelBase && "object" == typeof ViewModelBase.prototype && "function" == typeof ViewModelBase.prototype.LoadBrandAdAsync && (ViewModelBase.prototype.LoadBrandAdAsync = function() {}); + }); + Object.defineProperty(Window.prototype.toString, "ac3452ef83db17c4e84323d15083a03b", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "ac3452ef83db17c4e84323d15083a03b" due to: ' + e); + } + }, + '(()=>{document.addEventListener("DOMContentLoaded",(()=>{ var a=document.querySelectorAll("ins.adsbygoogle");a.length&&a.forEach(a=>{var b=document.createElement("iframe");b.style="display: none !important;",a.setAttribute("data-ad-status","filled"),a.appendChild(b)}) }));})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["81b55e3b01cb8f931036cccb4d1056b6"] === e) return; + document.addEventListener("DOMContentLoaded", ()=>{ + var e = document.querySelectorAll("ins.adsbygoogle"); + e.length && e.forEach((e)=>{ + var t = document.createElement("iframe"); + t.style = "display: none !important;", e.setAttribute("data-ad-status", "filled"), e.appendChild(t); + }); + }); + Object.defineProperty(Window.prototype.toString, "81b55e3b01cb8f931036cccb4d1056b6", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "81b55e3b01cb8f931036cccb4d1056b6" due to: ' + e); + } + }, + '(function(){window.adnPopConfig={zoneId:"149"}})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString.cdb400a346ffb8cf37f33a522644f2cb === e) return; + window.adnPopConfig = { + zoneId: "149" + }; + Object.defineProperty(Window.prototype.toString, "cdb400a346ffb8cf37f33a522644f2cb", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "cdb400a346ffb8cf37f33a522644f2cb" due to: ' + e); + } + }, + '(()=>{const t={apply:(t,e,o)=>{try{const t=e,o=t?.[0];t&&t.length>0&&t.length<10&&"string"==typeof o&&o?.includes?.("-bait-")&&(e=[])}catch(t){}return Reflect.apply(t,e,o)}};window.Array.prototype.some=new Proxy(window.Array.prototype.some,t)})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString.ac633d86bc395ade3c178ab74b9477d7 === e) return; + (()=>{ + const e = { + apply: (e, t, r)=>{ + try { + var _r_includes; + const e = t, r = e === null || e === void 0 ? void 0 : e[0]; + e && e.length > 0 && e.length < 10 && "string" == typeof r && (r === null || r === void 0 ? void 0 : (_r_includes = r.includes) === null || _r_includes === void 0 ? void 0 : _r_includes.call(r, "-bait-")) && (t = []); + } catch (e) {} + return Reflect.apply(e, t, r); + } + }; + window.Array.prototype.some = new Proxy(window.Array.prototype.some, e); + })(); + Object.defineProperty(Window.prototype.toString, "ac633d86bc395ade3c178ab74b9477d7", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "ac633d86bc395ade3c178ab74b9477d7" due to: ' + e); + } + }, + '!function(){window.adsbygoogle={loaded:!0,push:function(){"undefined"===typeof this.length&&(this.length=0,this.length+=1)}}}();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["065d3c28da0404a4fdfd569932271571"] === e) return; + window.adsbygoogle = { + loaded: !0, + push: function() { + void 0 === this.length && (this.length = 0, this.length += 1); + } + }; + Object.defineProperty(Window.prototype.toString, "065d3c28da0404a4fdfd569932271571", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "065d3c28da0404a4fdfd569932271571" due to: ' + e); + } + }, + '(()=>{document.addEventListener("DOMContentLoaded",(()=>{ var b=new MutationObserver(function(){try{for(var a,d=function(c){for(var a="",d=0;d`,h=document.querySelector("body > *"),j=document.querySelectorAll(".phpbb-ads-center > .adsbygoogle");h&&j.length&&(!h.querySelector("iframe#aswift_0")&&h.insertAdjacentHTML("afterend",g),j.forEach(a=>{a.querySelector("iframe#aswift_0")||(a.parentNode.style.height="200px",a.parentNode.style.width="200px",a.parentNode.innerHTML=g)}))}var k=document.querySelector(".page-body"),l=document.querySelectorAll(".adsbygoogle, .phpbb-ads-center");k&&!k.innerText.includes("deactivating your Ad-Blocker")&&l.length&&(l.forEach(a=>{a.remove()}),b.disconnect())}catch(a){}});b.observe(document,{childList:!0,subtree:!0}),setTimeout(function(){b.disconnect()},1E4) }));})();': ()=>{ + try { + const a = "done"; + if (Window.prototype.toString["802366024dd441867900263826a1b687"] === a) return; + document.addEventListener("DOMContentLoaded", ()=>{ + var a = new MutationObserver(function() { + try { + for(var e, t = function(a) { + for(var e = "", t = 0; t < a; t++)e += "0123456789".charAt(Math.floor(10 * Math.random())); + return e; + }, i1 = document.querySelectorAll(".adsbygoogle, script[data-ad-client]"), o = 0; o < i1.length; o++)if (i1[o].getAttribute("data-ad-client")) { + e = i1[o].getAttribute("data-ad-client"); + break; + } + if (e) { + var r = ``, p = document.querySelector("body > *"), n1 = document.querySelectorAll(".phpbb-ads-center > .adsbygoogle"); + p && n1.length && (!p.querySelector("iframe#aswift_0") && p.insertAdjacentHTML("afterend", r), n1.forEach((a)=>{ + a.querySelector("iframe#aswift_0") || (a.parentNode.style.height = "200px", a.parentNode.style.width = "200px", a.parentNode.innerHTML = r); + })); + } + var d = document.querySelector(".page-body"), l = document.querySelectorAll(".adsbygoogle, .phpbb-ads-center"); + d && !d.innerText.includes("deactivating your Ad-Blocker") && l.length && (l.forEach((a)=>{ + a.remove(); + }), a.disconnect()); + } catch (e) {} + }); + a.observe(document, { + childList: !0, + subtree: !0 + }), setTimeout(function() { + a.disconnect(); + }, 1e4); + }); + Object.defineProperty(Window.prototype.toString, "802366024dd441867900263826a1b687", { + value: a, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (a) { + console.error('Error executing AG js rule with uniqueId "802366024dd441867900263826a1b687" due to: ' + a); + } + }, + '(()=>{const e=Object.getOwnPropertyDescriptor(Element.prototype,"innerHTML").set,t=Object.getOwnPropertyDescriptor(Element.prototype,"innerHTML").get;Object.defineProperty(Element.prototype,"innerHTML",{get(){return t.call(this)},set(t){if(t?.includes?.("disable your adblocker"))throw new Error;e.call(this,t)}})})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["96cd53fdc3f56d04903d4a180e507d95"] === e) return; + (()=>{ + const e = Object.getOwnPropertyDescriptor(Element.prototype, "innerHTML").set, t = Object.getOwnPropertyDescriptor(Element.prototype, "innerHTML").get; + Object.defineProperty(Element.prototype, "innerHTML", { + get () { + return t.call(this); + }, + set (t) { + var _t_includes; + if (t === null || t === void 0 ? void 0 : (_t_includes = t.includes) === null || _t_includes === void 0 ? void 0 : _t_includes.call(t, "disable your adblocker")) throw new Error; + e.call(this, t); + } + }); + })(); + Object.defineProperty(Window.prototype.toString, "96cd53fdc3f56d04903d4a180e507d95", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "96cd53fdc3f56d04903d4a180e507d95" due to: ' + e); + } + }, + '(()=>{const e={apply:(e,o,t)=>(null===t[0]&&(t[0]={isUserSubscriber:!0}),Reflect.apply(e,o,t))},o={apply:(o,t,n)=>{const r=n[0];return"function"==typeof r&&r.toString().includes("AdBlockDetector")&&(n[0]=()=>{}),"function"==typeof r&&r.toString().includes("Preroll Ad")&&(n[0]=new Proxy(n[0],e)),Reflect.apply(o,t,n)}};window.Promise.prototype.then=new Proxy(window.Promise.prototype.then,o)})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["785fddde2c2648fbf7b3c872780aab8f"] === e) return; + (()=>{ + const e = { + apply: (e, t, o)=>(null === o[0] && (o[0] = { + isUserSubscriber: !0 + }), Reflect.apply(e, t, o)) + }, t = { + apply: (t, o, r)=>{ + const n1 = r[0]; + return "function" == typeof n1 && n1.toString().includes("AdBlockDetector") && (r[0] = ()=>{}), "function" == typeof n1 && n1.toString().includes("Preroll Ad") && (r[0] = new Proxy(r[0], e)), Reflect.apply(t, o, r); + } + }; + window.Promise.prototype.then = new Proxy(window.Promise.prototype.then, t); + })(); + Object.defineProperty(Window.prototype.toString, "785fddde2c2648fbf7b3c872780aab8f", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "785fddde2c2648fbf7b3c872780aab8f" due to: ' + e); + } + }, + '(()=>{const e=Object.getOwnPropertyDescriptor(Element.prototype,"innerHTML").set,t=Object.getOwnPropertyDescriptor(Element.prototype,"innerHTML").get;Object.defineProperty(Element.prototype,"innerHTML",{get(){return t.call(this)},set(t){if(t?.includes?.("allow adblock"))throw new Error;e.call(this,t)}})})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["27477abfbce9ce3be4dd5c5e090561b7"] === e) return; + (()=>{ + const e = Object.getOwnPropertyDescriptor(Element.prototype, "innerHTML").set, t = Object.getOwnPropertyDescriptor(Element.prototype, "innerHTML").get; + Object.defineProperty(Element.prototype, "innerHTML", { + get () { + return t.call(this); + }, + set (t) { + var _t_includes; + if (t === null || t === void 0 ? void 0 : (_t_includes = t.includes) === null || _t_includes === void 0 ? void 0 : _t_includes.call(t, "allow adblock")) throw new Error; + e.call(this, t); + } + }); + })(); + Object.defineProperty(Window.prototype.toString, "27477abfbce9ce3be4dd5c5e090561b7", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "27477abfbce9ce3be4dd5c5e090561b7" due to: ' + e); + } + }, + "window.adsbygoogle = { loaded: !0 };": ()=>{ + try { + const e = "done"; + if (Window.prototype.toString.df4e0801aa685812f605b6558f08d2df === e) return; + window.adsbygoogle = { + loaded: !0 + }; + Object.defineProperty(Window.prototype.toString, "df4e0801aa685812f605b6558f08d2df", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "df4e0801aa685812f605b6558f08d2df" due to: ' + e); + } + }, + '(()=>{const t={apply:(t,r,e)=>{try{const t=e[0];t?.matches?.(\'[class^="b_ad"]\')&&(e[0]=document.querySelector("#b_results .b_algo"))}catch(t){}return Reflect.apply(t,r,e)}};window.Array.prototype.push=new Proxy(window.Array.prototype.push,t)})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["090ddb6ae838bb8f2e9f32783f4a3f91"] === e) return; + (()=>{ + const e = { + apply: (e, r, t)=>{ + try { + var _e_matches; + const e = t[0]; + (e === null || e === void 0 ? void 0 : (_e_matches = e.matches) === null || _e_matches === void 0 ? void 0 : _e_matches.call(e, '[class^="b_ad"]')) && (t[0] = document.querySelector("#b_results .b_algo")); + } catch (e) {} + return Reflect.apply(e, r, t); + } + }; + window.Array.prototype.push = new Proxy(window.Array.prototype.push, e); + })(); + Object.defineProperty(Window.prototype.toString, "090ddb6ae838bb8f2e9f32783f4a3f91", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "090ddb6ae838bb8f2e9f32783f4a3f91" due to: ' + e); + } + }, + '(()=>{const e={apply:(e,t,n)=>{const o=Reflect.apply(e,t,n);try{o instanceof HTMLIFrameElement&&""===o.src&&o.contentWindow&&(o.contentWindow.Element.prototype.querySelectorAll=window.Element.prototype.querySelectorAll)}catch(e){}return o}};Node.prototype.appendChild=new Proxy(Node.prototype.appendChild,e)})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["30bbe571a0d19393740111580aa75056"] === e) return; + (()=>{ + const e = { + apply: (e, t, o)=>{ + const r = Reflect.apply(e, t, o); + try { + r instanceof HTMLIFrameElement && "" === r.src && r.contentWindow && (r.contentWindow.Element.prototype.querySelectorAll = window.Element.prototype.querySelectorAll); + } catch (e) {} + return r; + } + }; + Node.prototype.appendChild = new Proxy(Node.prototype.appendChild, e); + })(); + Object.defineProperty(Window.prototype.toString, "30bbe571a0d19393740111580aa75056", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "30bbe571a0d19393740111580aa75056" due to: ' + e); + } + }, + '(()=>{const e={apply:(e,t,l)=>{try{const e=l[0];e?.includes(".b_ad")?l[0]="#b_results .b_algo:not([style]):first-child":e?.includes(".b_restorableLink")&&(l[0]=".b_algo:not([style]):first-child")}catch(e){}return Reflect.apply(e,t,l)}};window.Element.prototype.querySelectorAll=new Proxy(window.Element.prototype.querySelectorAll,e)})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["3f9349499c12f0de6fc9e5d54f2f664f"] === e) return; + (()=>{ + const e = { + apply: (e, t, r)=>{ + try { + const e = r[0]; + (e === null || e === void 0 ? void 0 : e.includes(".b_ad")) ? r[0] = "#b_results .b_algo:not([style]):first-child" : (e === null || e === void 0 ? void 0 : e.includes(".b_restorableLink")) && (r[0] = ".b_algo:not([style]):first-child"); + } catch (e) {} + return Reflect.apply(e, t, r); + } + }; + window.Element.prototype.querySelectorAll = new Proxy(window.Element.prototype.querySelectorAll, e); + })(); + Object.defineProperty(Window.prototype.toString, "3f9349499c12f0de6fc9e5d54f2f664f", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "3f9349499c12f0de6fc9e5d54f2f664f" due to: ' + e); + } + }, + '(()=>{const t=/^.?(Sponsored|广告).?$/,e=new Set,o={apply:(o,n,r)=>{try{const o=r[0];o&&"string"==typeof o&&t.test(o.trim())&&e.add(n.canvas)}catch(t){}return Reflect.apply(o,n,r)}};window.CanvasRenderingContext2D.prototype.fillText=new Proxy(window.CanvasRenderingContext2D.prototype.fillText,o);const n=new Set,r={apply:(t,o,r)=>{try{if(e.has(o)){const e=Reflect.apply(t,o,r);return n.add(e),e}}catch(t){}return Reflect.apply(t,o,r)}};window.HTMLCanvasElement.prototype.toDataURL=new Proxy(window.HTMLCanvasElement.prototype.toDataURL,r);const a={apply:(t,e,o)=>{try{r=o[0],Array.from(n).some((t=>r.includes(t)))&&(o[0]=o[0].replace(/(^\\..+?):/,".b_algo:has($1){display:none!important;}$1:"))}catch(t){}var r;return Reflect.apply(t,e,o)}};window.Document.prototype.createTextNode=new Proxy(window.Document.prototype.createTextNode,a)})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString.f9b35df46321d2fbbc6f2fa5a8ce976a === e) return; + (()=>{ + const e = /^.?(Sponsored|广告).?$/, t = new Set, o = { + apply: (o, n1, r)=>{ + try { + const o = r[0]; + o && "string" == typeof o && e.test(o.trim()) && t.add(n1.canvas); + } catch (e) {} + return Reflect.apply(o, n1, r); + } + }; + window.CanvasRenderingContext2D.prototype.fillText = new Proxy(window.CanvasRenderingContext2D.prototype.fillText, o); + const n1 = new Set, r = { + apply: (e, o, r)=>{ + try { + if (t.has(o)) { + const t = Reflect.apply(e, o, r); + return n1.add(t), t; + } + } catch (e) {} + return Reflect.apply(e, o, r); + } + }; + window.HTMLCanvasElement.prototype.toDataURL = new Proxy(window.HTMLCanvasElement.prototype.toDataURL, r); + const a = { + apply: (e, t, o)=>{ + try { + r = o[0], Array.from(n1).some((e)=>r.includes(e)) && (o[0] = o[0].replace(/(^\..+?):/, ".b_algo:has($1){display:none!important;}$1:")); + } catch (e) {} + var r; + return Reflect.apply(e, t, o); + } + }; + window.Document.prototype.createTextNode = new Proxy(window.Document.prototype.createTextNode, a); + })(); + Object.defineProperty(Window.prototype.toString, "f9b35df46321d2fbbc6f2fa5a8ce976a", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "f9b35df46321d2fbbc6f2fa5a8ce976a" due to: ' + e); + } + }, + "(function(){var b=window.setInterval;window.setInterval=function(a,c){if(!/e\\.display=='hidden'[\\s\\S]*?e\\.visibility=='none'/.test(a.toString()))return b(a,c)}.bind(window)})();": ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["799170846df78b2e8c6f8f1ecbe9f9ab"] === e) return; + !function() { + var e = window.setInterval; + window.setInterval = (function(t, n1) { + if (!/e\.display=='hidden'[\s\S]*?e\.visibility=='none'/.test(t.toString())) return e(t, n1); + }).bind(window); + }(); + Object.defineProperty(Window.prototype.toString, "799170846df78b2e8c6f8f1ecbe9f9ab", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "799170846df78b2e8c6f8f1ecbe9f9ab" due to: ' + e); + } + }, + "window.$tieE3 = true;": ()=>{ + try { + const e = "done"; + if (Window.prototype.toString.abf848581aab7ee411a3a190d6305e9f === e) return; + window.$tieE3 = !0; + Object.defineProperty(Window.prototype.toString, "abf848581aab7ee411a3a190d6305e9f", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "abf848581aab7ee411a3a190d6305e9f" due to: ' + e); + } + }, + "window.Advertisement = 1;": ()=>{ + try { + const e = "done"; + if (Window.prototype.toString.a77fad03c24e228b97652a46d1fa5f22 === e) return; + window.Advertisement = 1; + Object.defineProperty(Window.prototype.toString, "a77fad03c24e228b97652a46d1fa5f22", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "a77fad03c24e228b97652a46d1fa5f22" due to: ' + e); + } + }, + "window.adsEnabled = true;": ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["62d14321dc3e190666318c2f0ddfdcac"] === e) return; + window.adsEnabled = !0; + Object.defineProperty(Window.prototype.toString, "62d14321dc3e190666318c2f0ddfdcac", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "62d14321dc3e190666318c2f0ddfdcac" due to: ' + e); + } + }, + "window.uabpdl = window.uabInject = true;": ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["33d2335f47a6a24e15dbab294084b29d"] === e) return; + window.uabpdl = window.uabInject = !0; + Object.defineProperty(Window.prototype.toString, "33d2335f47a6a24e15dbab294084b29d", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "33d2335f47a6a24e15dbab294084b29d" due to: ' + e); + } + }, + "window.detector_active = true;": ()=>{ + try { + const e = "done"; + if (Window.prototype.toString.fff6b1a1e7573bdc8801939be0d52c55 === e) return; + window.detector_active = !0; + Object.defineProperty(Window.prototype.toString, "fff6b1a1e7573bdc8801939be0d52c55", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "fff6b1a1e7573bdc8801939be0d52c55" due to: ' + e); + } + }, + "window.Adv_ab = false;": ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["5601052c8ba773fc21566b0dfbe3e078"] === e) return; + window.Adv_ab = !1; + Object.defineProperty(Window.prototype.toString, "5601052c8ba773fc21566b0dfbe3e078", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "5601052c8ba773fc21566b0dfbe3e078" due to: ' + e); + } + }, + "window.adsEnabled=!0;": ()=>{ + try { + const e = "done"; + if (Window.prototype.toString.be54fb20467f57c75acee13f527620e5 === e) return; + window.adsEnabled = !0; + Object.defineProperty(Window.prototype.toString, "be54fb20467f57c75acee13f527620e5", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "be54fb20467f57c75acee13f527620e5" due to: ' + e); + } + }, + '(function(a){setTimeout=function(){var b="function"==typeof arguments[0]?Function.prototype.toString.call(arguments[0]):"string"==typeof arguments[0]?arguments[0]:String(arguments[0]);return/\\[(_0x[a-z0-9]{4,})\\[\\d+\\]\\][\\[\\(]\\1\\[\\d+\\]/.test(b)?NaN:a.apply(window,arguments)}.bind();Object.defineProperty(setTimeout,"name",{value:a.name});setTimeout.toString=Function.prototype.toString.bind(a)})(setTimeout);': ()=>{ + try { + const t = "done"; + if (Window.prototype.toString.d51de922f2ef3a82152acd709db8a549 === t) return; + !function(t) { + setTimeout = (function() { + var e = "function" == typeof arguments[0] ? Function.prototype.toString.call(arguments[0]) : "string" == typeof arguments[0] ? arguments[0] : String(arguments[0]); + return /\[(_0x[a-z0-9]{4,})\[\d+\]\][\[\(]\1\[\d+\]/.test(e) ? NaN : t.apply(window, arguments); + }).bind(); + Object.defineProperty(setTimeout, "name", { + value: t.name + }); + setTimeout.toString = Function.prototype.toString.bind(t); + }(setTimeout); + Object.defineProperty(Window.prototype.toString, "d51de922f2ef3a82152acd709db8a549", { + value: t, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (t) { + console.error('Error executing AG js rule with uniqueId "d51de922f2ef3a82152acd709db8a549" due to: ' + t); + } + }, + '(function(b,c){setTimeout=function(){var a=arguments[0];if("function"==typeof a&&/^function [A-Za-z]{1,2}\\(\\)\\s*\\{([A-Za-z])\\|\\|\\(\\1=!0,[\\s\\S]{1,13}\\(\\)\\)\\}$/.test(c.call(a)))throw"Adguard stopped a script execution.";return b.apply(window,arguments)}})(setTimeout,Function.prototype.toString);': ()=>{ + try { + const t = "done"; + if (Window.prototype.toString["41822b6439a26cd50f44b208e1bad083"] === t) return; + !function(t, e) { + setTimeout = function() { + var o = arguments[0]; + if ("function" == typeof o && /^function [A-Za-z]{1,2}\(\)\s*\{([A-Za-z])\|\|\(\1=!0,[\s\S]{1,13}\(\)\)\}$/.test(e.call(o))) throw "Adguard stopped a script execution."; + return t.apply(window, arguments); + }; + }(setTimeout, Function.prototype.toString); + Object.defineProperty(Window.prototype.toString, "41822b6439a26cd50f44b208e1bad083", { + value: t, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (t) { + console.error('Error executing AG js rule with uniqueId "41822b6439a26cd50f44b208e1bad083" due to: ' + t); + } + }, + "window.sessionStorage.loadedAds = 3;": ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["73f1b4fc791cbf3105708cabf5b1db21"] === e) return; + window.sessionStorage.loadedAds = 3; + Object.defineProperty(Window.prototype.toString, "73f1b4fc791cbf3105708cabf5b1db21", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "73f1b4fc791cbf3105708cabf5b1db21" due to: ' + e); + } + }, + "(function() { window.xRds = false; window.frg = true; window.frag = true; })();": ()=>{ + try { + const e = "done"; + if (Window.prototype.toString.baafa2147233f1a8add3836529d4779e === e) return; + !function() { + window.xRds = !1; + window.frg = !0; + window.frag = !0; + }(); + Object.defineProperty(Window.prototype.toString, "baafa2147233f1a8add3836529d4779e", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "baafa2147233f1a8add3836529d4779e" due to: ' + e); + } + }, + "window.canABP = true;": ()=>{ + try { + const e = "done"; + if (Window.prototype.toString.b1d0f666ef36ca7989b62d00b88a8084 === e) return; + window.canABP = !0; + Object.defineProperty(Window.prototype.toString, "b1d0f666ef36ca7989b62d00b88a8084", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "b1d0f666ef36ca7989b62d00b88a8084" due to: ' + e); + } + }, + "var _st = window.setTimeout; window.setTimeout = function(a, b) { if(!/displayAdBlockedVideo/.test(a)){ _st(a,b);}};": ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["2ac41d844f1f8bd49b7778aeb6e0c2cc"] === e) return; + var _st = window.setTimeout; + window.setTimeout = function(e, t) { + /displayAdBlockedVideo/.test(e) || _st(e, t); + }; + Object.defineProperty(Window.prototype.toString, "2ac41d844f1f8bd49b7778aeb6e0c2cc", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "2ac41d844f1f8bd49b7778aeb6e0c2cc" due to: ' + e); + } + }, + 'document.cookie="popunder=1; path=/;";': ()=>{ + try { + const c = "done"; + if (Window.prototype.toString.cc60c320cd31f7c797cace7d0a8f787a === c) return; + document.cookie = "popunder=1; path=/;"; + Object.defineProperty(Window.prototype.toString, "cc60c320cd31f7c797cace7d0a8f787a", { + value: c, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (c) { + console.error('Error executing AG js rule with uniqueId "cc60c320cd31f7c797cace7d0a8f787a" due to: ' + c); + } + }, + '(()=>{const e={apply:(e,t,c)=>{try{const e=c[1],t=c[2];"redirectToAdblockDetected"===e&&"function"==typeof t?.value&&(c[2].value=()=>{})}catch(e){}return Reflect.apply(e,t,c)}};window.Object.defineProperty=new Proxy(window.Object.defineProperty,e)})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["069a24db4a5d4560bb9968124b35e82a"] === e) return; + (()=>{ + const e = { + apply: (e, t, r)=>{ + try { + const e = r[1], t = r[2]; + "redirectToAdblockDetected" === e && "function" == typeof (t === null || t === void 0 ? void 0 : t.value) && (r[2].value = ()=>{}); + } catch (e) {} + return Reflect.apply(e, t, r); + } + }; + window.Object.defineProperty = new Proxy(window.Object.defineProperty, e); + })(); + Object.defineProperty(Window.prototype.toString, "069a24db4a5d4560bb9968124b35e82a", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "069a24db4a5d4560bb9968124b35e82a" due to: ' + e); + } + }, + "(()=>{const e={apply:(e,r,t)=>{try{const e=r[0];e?.adTree&&(r.shift(),t=[])}catch(e){console.trace(e)}return Reflect.apply(e,r,t)}};window.Array.prototype.splice=new Proxy(window.Array.prototype.splice,e)})();": ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["2fa6b0fc3f291729ed8dab8e63b1df26"] === e) return; + (()=>{ + const e = { + apply: (e, r, t)=>{ + try { + const e = r[0]; + (e === null || e === void 0 ? void 0 : e.adTree) && (r.shift(), t = []); + } catch (e) { + console.trace(e); + } + return Reflect.apply(e, r, t); + } + }; + window.Array.prototype.splice = new Proxy(window.Array.prototype.splice, e); + })(); + Object.defineProperty(Window.prototype.toString, "2fa6b0fc3f291729ed8dab8e63b1df26", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "2fa6b0fc3f291729ed8dab8e63b1df26" due to: ' + e); + } + }, + "!function(){if(location.pathname.indexOf(\"/iframe/player\")===-1){Object.defineProperty(Object.prototype, 'kununu_mul', { get: function(){ throw null; }, set: function(){ throw null; }});}}();": ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["0024181b43199be4e6f6d4dc8cace28f"] === e) return; + -1 === location.pathname.indexOf("/iframe/player") && Object.defineProperty(Object.prototype, "kununu_mul", { + get: function() { + throw null; + }, + set: function() { + throw null; + } + }); + Object.defineProperty(Window.prototype.toString, "0024181b43199be4e6f6d4dc8cace28f", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "0024181b43199be4e6f6d4dc8cace28f" due to: ' + e); + } + }, + '!function(){const r={apply:(r,o,e)=>(e[0]?.includes?.("{}")&&(e[0]="\\n"),Reflect.apply(r,o,e))};window.DOMParser.prototype.parseFromString=new Proxy(window.DOMParser.prototype.parseFromString,r)}();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["631aed795dd7ba8bffc8ac13694e2216"] === e) return; + !function() { + const e = { + apply: (e, a, r)=>{ + var _r__includes, _r_; + return ((_r_ = r[0]) === null || _r_ === void 0 ? void 0 : (_r__includes = _r_.includes) === null || _r__includes === void 0 ? void 0 : _r__includes.call(_r_, "{}")) && (r[0] = '\n'), Reflect.apply(e, a, r); + } + }; + window.DOMParser.prototype.parseFromString = new Proxy(window.DOMParser.prototype.parseFromString, e); + }(); + Object.defineProperty(Window.prototype.toString, "631aed795dd7ba8bffc8ac13694e2216", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "631aed795dd7ba8bffc8ac13694e2216" due to: ' + e); + } + }, + '(()=>{window.googletag={cmd:[],apiReady:!0,getVersion:function(){return"202609010101"}};window.pbjs={getConsentMetadata(){}};})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString.d6d22db8f380b5777ac50c35fa683d54 === e) return; + (()=>{ + window.googletag = { + cmd: [], + apiReady: !0, + getVersion: function() { + return "202609010101"; + } + }; + window.pbjs = { + getConsentMetadata () {} + }; + })(); + Object.defineProperty(Window.prototype.toString, "d6d22db8f380b5777ac50c35fa683d54", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "d6d22db8f380b5777ac50c35fa683d54" due to: ' + e); + } + }, + '!function(){const e={apply:(e,t,n)=>{if("prg"!==t?.id)return Reflect.apply(e,t,n);const o=Reflect.apply(e,t,n);return Object.defineProperty(o,"top",{value:500}),o}};window.Element.prototype.getBoundingClientRect=new Proxy(window.Element.prototype.getBoundingClientRect,e)}();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["8de36e4bf3b484248c14b692ab7d0b97"] === e) return; + !function() { + const e = { + apply: (e, t, n1)=>{ + if ("prg" !== (t === null || t === void 0 ? void 0 : t.id)) return Reflect.apply(e, t, n1); + const o = Reflect.apply(e, t, n1); + return Object.defineProperty(o, "top", { + value: 500 + }), o; + } + }; + window.Element.prototype.getBoundingClientRect = new Proxy(window.Element.prototype.getBoundingClientRect, e); + }(); + Object.defineProperty(Window.prototype.toString, "8de36e4bf3b484248c14b692ab7d0b97", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "8de36e4bf3b484248c14b692ab7d0b97" due to: ' + e); + } + }, + "window.atob = function() { };": ()=>{ + try { + const e = "done"; + if (Window.prototype.toString.bd6f7fef7248ea934c306654651e8882 === e) return; + window.atob = function() {}; + Object.defineProperty(Window.prototype.toString, "bd6f7fef7248ea934c306654651e8882", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "bd6f7fef7248ea934c306654651e8882" due to: ' + e); + } + }, + "window.canABP = window.canRunAds = window.canCheckAds = true;": ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["7fa951f734c0ba707fc4893dc83b1a38"] === e) return; + window.canABP = window.canRunAds = window.canCheckAds = !0; + Object.defineProperty(Window.prototype.toString, "7fa951f734c0ba707fc4893dc83b1a38", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "7fa951f734c0ba707fc4893dc83b1a38" due to: ' + e); + } + }, + "window.canRun = true;": ()=>{ + try { + const e = "done"; + if (Window.prototype.toString.cb7e5a7f0c3e95af411eb95c880d423d === e) return; + window.canRun = !0; + Object.defineProperty(Window.prototype.toString, "cb7e5a7f0c3e95af411eb95c880d423d", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "cb7e5a7f0c3e95af411eb95c880d423d" due to: ' + e); + } + }, + 'window.googleToken = "no";': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["14f3ab7c380717fd60634b54e8ee9403"] === e) return; + window.googleToken = "no"; + Object.defineProperty(Window.prototype.toString, "14f3ab7c380717fd60634b54e8ee9403", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "14f3ab7c380717fd60634b54e8ee9403" due to: ' + e); + } + }, + "(()=>{window.com_adswizz_synchro_decorateUrl=(a)=>a;})();": ()=>{ + try { + const e = "done"; + if (Window.prototype.toString.e98a98ef2962b13e300d81c08a1652e0 === e) return; + window.com_adswizz_synchro_decorateUrl = (e)=>e; + Object.defineProperty(Window.prototype.toString, "e98a98ef2962b13e300d81c08a1652e0", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "e98a98ef2962b13e300d81c08a1652e0" due to: ' + e); + } + }, + '(()=>{document.addEventListener(\'DOMContentLoaded\',()=>{var a=document.querySelector("body");document.location.hostname.includes("skmedix.pl")&&a&&a.insertAdjacentHTML("beforeend",\'
\')})})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["931980a2c6180f6edbcd6f228a2db536"] === e) return; + document.addEventListener("DOMContentLoaded", ()=>{ + var e = document.querySelector("body"); + document.location.hostname.includes("skmedix.pl") && e && e.insertAdjacentHTML("beforeend", '
'); + }); + Object.defineProperty(Window.prototype.toString, "931980a2c6180f6edbcd6f228a2db536", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "931980a2c6180f6edbcd6f228a2db536" due to: ' + e); + } + }, + '(()=>{document.addEventListener("DOMContentLoaded",(()=>{ setTimeout(function() { if(typeof show_game_iframe === "function") { show_game_iframe(); } }, 1000); }));})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["66e1a81529963f50c62391d4d9356ef0"] === e) return; + document.addEventListener("DOMContentLoaded", ()=>{ + setTimeout(function() { + "function" == typeof show_game_iframe && show_game_iframe(); + }, 1e3); + }); + Object.defineProperty(Window.prototype.toString, "66e1a81529963f50c62391d4d9356ef0", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "66e1a81529963f50c62391d4d9356ef0" due to: ' + e); + } + }, + '(()=>{window.sas_idmnet=window.sas_idmnet||{};Object.assign(sas_idmnet,{releaseVideo:function(a){if("object"==typeof videoInit&&"function"==typeof videoInit.start)try{videoInit.start(a,n)}catch(a){}},release:function(){},placementsList:function(){}});const a=function(a,b){if(a&&a.push)for(a.push=b;a.length;)b(a.shift())},b=function(a){try{a()}catch(a){console.error(a)}};"complete"===document.readyState?a(sas_idmnet.cmd,b):window.addEventListener("load",()=>{a(sas_idmnet.cmd,b)})})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["35966fc2cd75edd8c085792a4413cc08"] === e) return; + (()=>{ + window.sas_idmnet = window.sas_idmnet || {}; + Object.assign(sas_idmnet, { + releaseVideo: function(e) { + if ("object" == typeof videoInit && "function" == typeof videoInit.start) try { + videoInit.start(e, n); + } catch (e) {} + }, + release: function() {}, + placementsList: function() {} + }); + const e = function(e, t) { + if (e && e.push) for(e.push = t; e.length;)t(e.shift()); + }, t = function(e) { + try { + e(); + } catch (e) { + console.error(e); + } + }; + "complete" === document.readyState ? e(sas_idmnet.cmd, t) : window.addEventListener("load", ()=>{ + e(sas_idmnet.cmd, t); + }); + })(); + Object.defineProperty(Window.prototype.toString, "35966fc2cd75edd8c085792a4413cc08", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "35966fc2cd75edd8c085792a4413cc08" due to: ' + e); + } + }, + "!function(){window.YLHH={bidder:{startAuction:function(){}}};}();": ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["609bede022cc082da833f6d8f49bff77"] === e) return; + window.YLHH = { + bidder: { + startAuction: function() {} + } + }; + Object.defineProperty(Window.prototype.toString, "609bede022cc082da833f6d8f49bff77", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "609bede022cc082da833f6d8f49bff77" due to: ' + e); + } + }, + "(function(){var c=window.setTimeout;window.setTimeout=function(f,g){return g===1e3&&/#kam-ban-player/.test(f.toString())&&(g*=0.01),c.apply(this,arguments)}.bind(window)})();": ()=>{ + try { + const t = "done"; + if (Window.prototype.toString["4706a9dfd57dc72a9584b54986a27381"] === t) return; + !function() { + var t = window.setTimeout; + window.setTimeout = (function(e, o) { + return 1e3 === o && /#kam-ban-player/.test(e.toString()) && (o *= .01), t.apply(this, arguments); + }).bind(window); + }(); + Object.defineProperty(Window.prototype.toString, "4706a9dfd57dc72a9584b54986a27381", { + value: t, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (t) { + console.error('Error executing AG js rule with uniqueId "4706a9dfd57dc72a9584b54986a27381" due to: ' + t); + } + }, + "Object.defineProperty(Object.prototype,'getCreativeId',{value:()=>{}});": ()=>{ + try { + const e = "done"; + if (Window.prototype.toString.bb1e9134a8b4e3c7a0b399a46c02c14b === e) return; + Object.defineProperty(Object.prototype, "getCreativeId", { + value: ()=>{} + }); + Object.defineProperty(Window.prototype.toString, "bb1e9134a8b4e3c7a0b399a46c02c14b", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "bb1e9134a8b4e3c7a0b399a46c02c14b" due to: ' + e); + } + }, + '(()=>{const t=Object.getOwnPropertyDescriptor,e={apply:(e,n,r)=>{const o=r[0];if(o?.toString?.()?.includes("EventTarget")){const e=t(o,"addEventListener");e?.set?.toString&&(e.set.toString=function(){}),e?.get?.toString&&(e.get.toString=function(){})}return Reflect.apply(e,n,r)}};window.Object.getOwnPropertyDescriptors=new Proxy(window.Object.getOwnPropertyDescriptors,e)})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString.f5e04b1e897644b8741f5724e8210233 === e) return; + (()=>{ + const e = Object.getOwnPropertyDescriptor, t = { + apply: (t, r, n1)=>{ + var _o_toString, _o_toString1; + const o = n1[0]; + if (o === null || o === void 0 ? void 0 : (_o_toString1 = o.toString) === null || _o_toString1 === void 0 ? void 0 : (_o_toString = _o_toString1.call(o)) === null || _o_toString === void 0 ? void 0 : _o_toString.includes("EventTarget")) { + var _t_set, _t_get; + const t = e(o, "addEventListener"); + (t === null || t === void 0 ? void 0 : (_t_set = t.set) === null || _t_set === void 0 ? void 0 : _t_set.toString) && (t.set.toString = function() {}), (t === null || t === void 0 ? void 0 : (_t_get = t.get) === null || _t_get === void 0 ? void 0 : _t_get.toString) && (t.get.toString = function() {}); + } + return Reflect.apply(t, r, n1); + } + }; + window.Object.getOwnPropertyDescriptors = new Proxy(window.Object.getOwnPropertyDescriptors, t); + })(); + Object.defineProperty(Window.prototype.toString, "f5e04b1e897644b8741f5724e8210233", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "f5e04b1e897644b8741f5724e8210233" due to: ' + e); + } + }, + '(()=>{const t={apply:(t,e,o)=>{try{o[0]?.toString().includes("detected:")&&(o[0]=()=>{})}catch(t){}return Reflect.apply(t,e,o)}};window.Promise.prototype.then=new Proxy(window.Promise.prototype.then,t)})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString.ac9f18746f9845e03b66324b7876d5d0 === e) return; + (()=>{ + const e = { + apply: (e, t, o)=>{ + try { + var _o_; + ((_o_ = o[0]) === null || _o_ === void 0 ? void 0 : _o_.toString().includes("detected:")) && (o[0] = ()=>{}); + } catch (e) {} + return Reflect.apply(e, t, o); + } + }; + window.Promise.prototype.then = new Proxy(window.Promise.prototype.then, e); + })(); + Object.defineProperty(Window.prototype.toString, "ac9f18746f9845e03b66324b7876d5d0", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "ac9f18746f9845e03b66324b7876d5d0" due to: ' + e); + } + }, + '(()=>{const t={apply:(t,p,e)=>{try{e.length>0&&("visibility"===e[0]||e[0]?.startsWith?.("shim:"))&&1===e[1]&&(e[1]=0)}catch(t){}return Reflect.apply(t,p,e)}};window.Map.prototype.set=new Proxy(window.Map.prototype.set,t)})();': ()=>{ + try { + const t = "done"; + if (Window.prototype.toString["9a27a7df929713b79f8cf294289dcc27"] === t) return; + (()=>{ + const t = { + apply: (t, e, r)=>{ + try { + var _r__startsWith, _r_; + r.length > 0 && ("visibility" === r[0] || ((_r_ = r[0]) === null || _r_ === void 0 ? void 0 : (_r__startsWith = _r_.startsWith) === null || _r__startsWith === void 0 ? void 0 : _r__startsWith.call(_r_, "shim:"))) && 1 === r[1] && (r[1] = 0); + } catch (t) {} + return Reflect.apply(t, e, r); + } + }; + window.Map.prototype.set = new Proxy(window.Map.prototype.set, t); + })(); + Object.defineProperty(Window.prototype.toString, "9a27a7df929713b79f8cf294289dcc27", { + value: t, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (t) { + console.error('Error executing AG js rule with uniqueId "9a27a7df929713b79f8cf294289dcc27" due to: ' + t); + } + }, + '(()=>{const t={apply:(t,r,e)=>{let o=r;try{const t=o?.length;t&&t>10&&t<30&&(n=o,Array.isArray(n)&&0!==n.length&&n.some((t=>"function"==typeof t&&!!t.toString().includes("ABDetector"))))&&(o=[])}catch(t){}var n;return Reflect.apply(t,o,e)}};window.Array.prototype.map=new Proxy(window.Array.prototype.map,t)})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["6ec2adf2cbc34cfc38ddca7a4f5a95ee"] === e) return; + (()=>{ + const e = { + apply: (e, t, r)=>{ + let c = t; + try { + const e = c === null || c === void 0 ? void 0 : c.length; + e && e > 10 && e < 30 && (o = c, Array.isArray(o) && 0 !== o.length && o.some((e)=>"function" == typeof e && !!e.toString().includes("ABDetector"))) && (c = []); + } catch (e) {} + var o; + return Reflect.apply(e, c, r); + } + }; + window.Array.prototype.map = new Proxy(window.Array.prototype.map, e); + })(); + Object.defineProperty(Window.prototype.toString, "6ec2adf2cbc34cfc38ddca7a4f5a95ee", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "6ec2adf2cbc34cfc38ddca7a4f5a95ee" due to: ' + e); + } + }, + '(()=>{const t=new Set(["VP","w3","JW"]),e=/\\{return\\(.{1,5}\\)\\(\\)===.\\..\\}/,n={apply:(t,n,r)=>{if("function"!=typeof t)return Reflect.apply(t,n,r);const p=t.toString();return e.test(p)&&(t=function(){return!1}),Reflect.apply(t,n,r)}},r={apply:(t,e,r)=>{let p=Reflect.apply(t,e,r);return"function"==typeof p&&(p=new Proxy(p,n)),p}},p={apply:(e,n,p)=>{try{const o=p[1],c=p[2]?.get;if(!o||"function"!=typeof c)return Reflect.apply(e,n,p);t.has(o)&&/^\\(\\)=>.$/.test(c.toString())?p[2].get=function(){return function(){return!1}}:"A"===o&&c.toString().includes("()=>i")&&(p[2].get=new Proxy(p[2].get,r))}catch(t){}return Reflect.apply(e,n,p)}};Object.defineProperty=new Proxy(Object.defineProperty,p)})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["419ecd20b58c82c1446f3eefaac9ae3b"] === e) return; + (()=>{ + const e = new Set([ + "VP", + "w3", + "JW" + ]), t = /\{return\(.{1,5}\)\(\)===.\..\}/, r = { + apply: (e, r, n1)=>{ + if ("function" != typeof e) return Reflect.apply(e, r, n1); + const c = e.toString(); + return t.test(c) && (e = function() { + return !1; + }), Reflect.apply(e, r, n1); + } + }, n1 = { + apply: (e, t, n1)=>{ + let c = Reflect.apply(e, t, n1); + return "function" == typeof c && (c = new Proxy(c, r)), c; + } + }, c = { + apply: (t, r, c)=>{ + try { + var _c_; + const o = c[1], f = (_c_ = c[2]) === null || _c_ === void 0 ? void 0 : _c_.get; + if (!o || "function" != typeof f) return Reflect.apply(t, r, c); + e.has(o) && /^\(\)=>.$/.test(f.toString()) ? c[2].get = function() { + return function() { + return !1; + }; + } : "A" === o && f.toString().includes("()=>i") && (c[2].get = new Proxy(c[2].get, n1)); + } catch (e) {} + return Reflect.apply(t, r, c); + } + }; + Object.defineProperty = new Proxy(Object.defineProperty, c); + })(); + Object.defineProperty(Window.prototype.toString, "419ecd20b58c82c1446f3eefaac9ae3b", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "419ecd20b58c82c1446f3eefaac9ae3b" due to: ' + e); + } + }, + "window.uabpInject = function() {};": ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["2809f16b065b7f9160467af78eee1331"] === e) return; + window.uabpInject = function() {}; + Object.defineProperty(Window.prototype.toString, "2809f16b065b7f9160467af78eee1331", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "2809f16b065b7f9160467af78eee1331" due to: ' + e); + } + }, + "(function(){var b=window.setTimeout;window.setTimeout=function(a,c){if(!/checkAds\\(\\);/.test(a.toString()))return b(a,c)};})();": ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["140cb9c461f230aead2587075c4c3389"] === e) return; + !function() { + var e = window.setTimeout; + window.setTimeout = function(t, o) { + if (!/checkAds\(\);/.test(t.toString())) return e(t, o); + }; + }(); + Object.defineProperty(Window.prototype.toString, "140cb9c461f230aead2587075c4c3389", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "140cb9c461f230aead2587075c4c3389" due to: ' + e); + } + }, + "window.adblock = true;": ()=>{ + try { + const a = "done"; + if (Window.prototype.toString.a512aca8faf6bfd74f571200978abea9 === a) return; + window.adblock = !0; + Object.defineProperty(Window.prototype.toString, "a512aca8faf6bfd74f571200978abea9", { + value: a, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (a) { + console.error('Error executing AG js rule with uniqueId "a512aca8faf6bfd74f571200978abea9" due to: ' + a); + } + }, + "window.ads_unblocked = true;": ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["786bc16fd657931f3a0d027130de4773"] === e) return; + window.ads_unblocked = !0; + Object.defineProperty(Window.prototype.toString, "786bc16fd657931f3a0d027130de4773", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "786bc16fd657931f3a0d027130de4773" due to: ' + e); + } + }, + '(()=>{const t={apply:(t,e,o)=>{try{const t=e;t&&"object"==typeof t&&t.context?.bidRequestId&&(e={})}catch(t){}return Reflect.apply(t,e,o)}};window.Object.prototype.hasOwnProperty=new Proxy(window.Object.prototype.hasOwnProperty,t)})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["34e4fe8cb80172726ed88130c50a490c"] === e) return; + (()=>{ + const e = { + apply: (e, t, o)=>{ + try { + var _e_context; + const e = t; + e && "object" == typeof e && ((_e_context = e.context) === null || _e_context === void 0 ? void 0 : _e_context.bidRequestId) && (t = {}); + } catch (e) {} + return Reflect.apply(e, t, o); + } + }; + window.Object.prototype.hasOwnProperty = new Proxy(window.Object.prototype.hasOwnProperty, e); + })(); + Object.defineProperty(Window.prototype.toString, "34e4fe8cb80172726ed88130c50a490c", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "34e4fe8cb80172726ed88130c50a490c" due to: ' + e); + } + }, + '!function(){const r={apply:(r,o,e)=>(e[0]?.includes?.("")&&(e[0]=""),Reflect.apply(r,o,e))};window.DOMParser.prototype.parseFromString=new Proxy(window.DOMParser.prototype.parseFromString,r)}();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["877dd0aed94e4d29a83c4c3327d544f8"] === e) return; + !function() { + const e = { + apply: (e, r, o)=>{ + var _o__includes, _o_; + return ((_o_ = o[0]) === null || _o_ === void 0 ? void 0 : (_o__includes = _o_.includes) === null || _o__includes === void 0 ? void 0 : _o__includes.call(_o_, "")) && (o[0] = ""), Reflect.apply(e, r, o); + } + }; + window.DOMParser.prototype.parseFromString = new Proxy(window.DOMParser.prototype.parseFromString, e); + }(); + Object.defineProperty(Window.prototype.toString, "877dd0aed94e4d29a83c4c3327d544f8", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "877dd0aed94e4d29a83c4c3327d544f8" due to: ' + e); + } + }, + "window.adsOk = !0;": ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["58f079e742093da39c91a591e99389ce"] === e) return; + window.adsOk = !0; + Object.defineProperty(Window.prototype.toString, "58f079e742093da39c91a591e99389ce", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "58f079e742093da39c91a591e99389ce" due to: ' + e); + } + }, + "window.ads_ok = true;": ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["6038ece558032e1fa11a8e02beb32499"] === e) return; + window.ads_ok = !0; + Object.defineProperty(Window.prototype.toString, "6038ece558032e1fa11a8e02beb32499", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "6038ece558032e1fa11a8e02beb32499" due to: ' + e); + } + }, + '(()=>{const t={construct:(t,n,o)=>{const e=n[0],s=e?.toString(),c=s?.includes("await this.whenGDPRClosed()");return c&&(n[0]=t=>t(!0)),Reflect.construct(t,n,o)}};window.Promise=new Proxy(window.Promise,t)})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["2def40885e045b3521a04fe19856fe24"] === e) return; + (()=>{ + const e = { + construct: (e, t, o)=>{ + const r = t[0], n1 = r === null || r === void 0 ? void 0 : r.toString(), i1 = n1 === null || n1 === void 0 ? void 0 : n1.includes("await this.whenGDPRClosed()"); + return i1 && (t[0] = (e)=>e(!0)), Reflect.construct(e, t, o); + } + }; + window.Promise = new Proxy(window.Promise, e); + })(); + Object.defineProperty(Window.prototype.toString, "2def40885e045b3521a04fe19856fe24", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "2def40885e045b3521a04fe19856fe24" due to: ' + e); + } + }, + "(function(){var b=window.setTimeout;window.setTimeout=function(a,c){if(!/notDetectedBy/.test(a.toString()))return b(a,c)};})();": ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["2eed1ef0d478b67cb9b988fd355d6582"] === e) return; + !function() { + var e = window.setTimeout; + window.setTimeout = function(t, o) { + if (!/notDetectedBy/.test(t.toString())) return e(t, o); + }; + }(); + Object.defineProperty(Window.prototype.toString, "2eed1ef0d478b67cb9b988fd355d6582", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "2eed1ef0d478b67cb9b988fd355d6582" due to: ' + e); + } + }, + "window.adBlockTest = true;": ()=>{ + try { + const e = "done"; + if (Window.prototype.toString.ea236b492fa35d17f8aeddec6c38ef4a === e) return; + window.adBlockTest = !0; + Object.defineProperty(Window.prototype.toString, "ea236b492fa35d17f8aeddec6c38ef4a", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "ea236b492fa35d17f8aeddec6c38ef4a" due to: ' + e); + } + }, + '(function(){var b=XMLHttpRequest.prototype.open,c=/ib\\.adnxs\\.com/i;XMLHttpRequest.prototype.open=function(d,a){if("POST"===d&&c.test(a))this.send=function(){return null},this.setRequestHeader=function(){return null},console.log("AG has blocked request: ",a);else return b.apply(this,arguments)}})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["14b2658c5d58ff999b0f841402be6327"] === e) return; + !function() { + var e = XMLHttpRequest.prototype.open, t = /ib\.adnxs\.com/i; + XMLHttpRequest.prototype.open = function(o, n1) { + if ("POST" !== o || !t.test(n1)) return e.apply(this, arguments); + this.send = function() { + return null; + }, this.setRequestHeader = function() { + return null; + }, console.log("AG has blocked request: ", n1); + }; + }(); + Object.defineProperty(Window.prototype.toString, "14b2658c5d58ff999b0f841402be6327", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "14b2658c5d58ff999b0f841402be6327" due to: ' + e); + } + }, + '(()=>{if(!location.href.includes("/player.php?url="))return;const a=new URLSearchParams(location.search).get("url");a&&location.assign(a)})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString.a9a1e83dfb5f1117af5ce4dfbce68798 === e) return; + (()=>{ + if (!location.href.includes("/player.php?url=")) return; + const e = new URLSearchParams(location.search).get("url"); + e && location.assign(e); + })(); + Object.defineProperty(Window.prototype.toString, "a9a1e83dfb5f1117af5ce4dfbce68798", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "a9a1e83dfb5f1117af5ce4dfbce68798" due to: ' + e); + } + }, + '(()=>{window.addEventListener("load",(()=>{"object"==typeof window.player&&"function"==typeof window.player.trigger&&window.player.trigger("playlistComplete")}));})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["777ecb0cee36adcb947f146ce7e592d2"] === e) return; + window.addEventListener("load", ()=>{ + "object" == typeof window.player && "function" == typeof window.player.trigger && window.player.trigger("playlistComplete"); + }); + Object.defineProperty(Window.prototype.toString, "777ecb0cee36adcb947f146ce7e592d2", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "777ecb0cee36adcb947f146ce7e592d2" due to: ' + e); + } + }, + '!function(){if(location.pathname.includes("/source/playerads")){var b=new MutationObserver(function(){var a=document.querySelector(\'script[type="text/javascript"]\');a&&a.textContent.includes(\'"ads": [\')&&(b.disconnect(),a.textContent=a.textContent.replace(/("ads": \\[\\{)[\\s\\S]*?(\\}\\])/,"$1$2"))});b.observe(document,{childList:!0,subtree:!0})}}();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString.aae0d51166190a469962b4394ad11852 === e) return; + !function() { + if (location.pathname.includes("/source/playerads")) { + var e = new MutationObserver(function() { + var t = document.querySelector('script[type="text/javascript"]'); + t && t.textContent.includes('"ads": [') && (e.disconnect(), t.textContent = t.textContent.replace(/("ads": \[\{)[\s\S]*?(\}\])/, "$1$2")); + }); + e.observe(document, { + childList: !0, + subtree: !0 + }); + } + }(); + Object.defineProperty(Window.prototype.toString, "aae0d51166190a469962b4394ad11852", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "aae0d51166190a469962b4394ad11852" due to: ' + e); + } + }, + "clientSide.player.play(true);": ()=>{ + try { + const e = "done"; + if (Window.prototype.toString.a5b3c4cf6ebf6b65e649d4696be29d38 === e) return; + clientSide.player.play(!0); + Object.defineProperty(Window.prototype.toString, "a5b3c4cf6ebf6b65e649d4696be29d38", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "a5b3c4cf6ebf6b65e649d4696be29d38" due to: ' + e); + } + }, + '(()=>{if(location.href.includes("/embed/?link=")){const i=new URL(location.href).searchParams.get("link");if(i)try{location.assign(i)}catch(i){}}})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["70f2ca47c305ca62ef161409642baaae"] === e) return; + (()=>{ + if (location.href.includes("/embed/?link=")) { + const e = new URL(location.href).searchParams.get("link"); + if (e) try { + location.assign(e); + } catch (e) {} + } + })(); + Object.defineProperty(Window.prototype.toString, "70f2ca47c305ca62ef161409642baaae", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "70f2ca47c305ca62ef161409642baaae" due to: ' + e); + } + }, + "(function(){Object.defineProperty(window, 'ExoLoader', { get: function() { return; } }); var c=document.addEventListener;document.addEventListener=function(a,b,d,e){\"getexoloader\"!=a&&-1==b.toString().indexOf('loader')&&c(a,b,d,e)}.bind(document);})();": ()=>{ + try { + const e = "done"; + if (Window.prototype.toString.a8d7f5b4e27b5a94d3b0c3528bdccb9c === e) return; + !function() { + Object.defineProperty(window, "ExoLoader", { + get: function() {} + }); + var e = document.addEventListener; + document.addEventListener = (function(t, n1, o, d) { + "getexoloader" != t && -1 == n1.toString().indexOf("loader") && e(t, n1, o, d); + }).bind(document); + }(); + Object.defineProperty(Window.prototype.toString, "a8d7f5b4e27b5a94d3b0c3528bdccb9c", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "a8d7f5b4e27b5a94d3b0c3528bdccb9c" due to: ' + e); + } + }, + '(()=>{let t=!1;const e=window.setTimeout,n={apply:(n,o,c)=>{try{c[0]?.toString?.().includes("thisArg.dispatchEvent")&&(t=!0,e((()=>{t=!1}),50))}catch(t){}return Reflect.apply(n,o,c)}};window.setTimeout=new Proxy(window.setTimeout,n);const o=new Set(["readystatechange","load","loadend"]),c={construct:(e,n,c)=>{try{const e=n[0];if(t&&o.has(e)&&location.href.includes("/video/"))return new ProgressEvent(e)}catch(t){}return Reflect.construct(e,n,c)}};window.Event=new Proxy(window.Event,c)})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString.d370c894efefb5cb0c8a577175abd0b6 === e) return; + (()=>{ + let e = !1; + const t = window.setTimeout, n1 = { + apply: (n1, o, r)=>{ + try { + var _r__toString, _r_; + ((_r_ = r[0]) === null || _r_ === void 0 ? void 0 : (_r__toString = _r_.toString) === null || _r__toString === void 0 ? void 0 : _r__toString.call(_r_).includes("thisArg.dispatchEvent")) && (e = !0, t(()=>{ + e = !1; + }, 50)); + } catch (e) {} + return Reflect.apply(n1, o, r); + } + }; + window.setTimeout = new Proxy(window.setTimeout, n1); + const o = new Set([ + "readystatechange", + "load", + "loadend" + ]), r = { + construct: (t, n1, r)=>{ + try { + const t = n1[0]; + if (e && o.has(t) && location.href.includes("/video/")) return new ProgressEvent(t); + } catch (e) {} + return Reflect.construct(t, n1, r); + } + }; + window.Event = new Proxy(window.Event, r); + })(); + Object.defineProperty(Window.prototype.toString, "d370c894efefb5cb0c8a577175abd0b6", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "d370c894efefb5cb0c8a577175abd0b6" due to: ' + e); + } + }, + '((e,t)=>{const n={apply:(n,o,r)=>{try{const s=r[1];if(!s)return Reflect.apply(n,o,r);const c=typeof s;if("string"===c&&s.includes?.(t)){const t=new URL(s);t.searchParams.delete(e);const n=t.href.replace("%2CCuepointPlaylist","");r[1]=n}else if("object"===c&&s instanceof URL&&s.href?.includes?.(t)){s.searchParams.delete(e);const t=s.href.replace("%2CCuepointPlaylist","");r[1]=t}}catch(e){}return Reflect.apply(n,o,r)}};window.XMLHttpRequest.prototype.open=new Proxy(window.XMLHttpRequest.prototype.open,n)})("deviceAdInsertionTypeOverride","/GetPlaybackResources?");': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["5f0cb8ad699e93dee39f5abf0dfec256"] === e) return; + ((e, t)=>{ + const r = { + apply: (r, o, n1)=>{ + try { + var _c_includes, _c_href_includes, _c_href; + const c = n1[1]; + if (!c) return Reflect.apply(r, o, n1); + const a = typeof c; + if ("string" === a && ((_c_includes = c.includes) === null || _c_includes === void 0 ? void 0 : _c_includes.call(c, t))) { + const t = new URL(c); + t.searchParams.delete(e); + const r = t.href.replace("%2CCuepointPlaylist", ""); + n1[1] = r; + } else if ("object" === a && c instanceof URL && ((_c_href = c.href) === null || _c_href === void 0 ? void 0 : (_c_href_includes = _c_href.includes) === null || _c_href_includes === void 0 ? void 0 : _c_href_includes.call(_c_href, t))) { + c.searchParams.delete(e); + const t = c.href.replace("%2CCuepointPlaylist", ""); + n1[1] = t; + } + } catch (e) {} + return Reflect.apply(r, o, n1); + } + }; + window.XMLHttpRequest.prototype.open = new Proxy(window.XMLHttpRequest.prototype.open, r); + })("deviceAdInsertionTypeOverride", "/GetPlaybackResources?"); + Object.defineProperty(Window.prototype.toString, "5f0cb8ad699e93dee39f5abf0dfec256", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "5f0cb8ad699e93dee39f5abf0dfec256" due to: ' + e); + } + }, + '(()=>{if(window.self!==window.top)try{if("object"==typeof localStorage)return}catch(a){delete window.localStorage,window.localStorage={setItem(){},getItem(){},removeItem(){},clear(){}}}})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["6c5874d9ea24235e4a8490028ce09e66"] === e) return; + (()=>{ + if (window.self !== window.top) try { + if ("object" == typeof localStorage) return; + } catch (e) { + delete window.localStorage, window.localStorage = { + setItem () {}, + getItem () {}, + removeItem () {}, + clear () {} + }; + } + })(); + Object.defineProperty(Window.prototype.toString, "6c5874d9ea24235e4a8490028ce09e66", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "6c5874d9ea24235e4a8490028ce09e66" due to: ' + e); + } + }, + '(()=>{const e=JSON.parse,t=Response.prototype.json,r=new WeakSet,s=e=>null!==e&&"object"==typeof e,a=e=>{if(!Array.isArray(e))return[];const t=e=>"number"==typeof e||"string"==typeof e&&""!==e.trim()?Number(e):NaN,r=e.filter(s).map(({start:e,end:r})=>({start:t(e),end:t(r)})).filter(({start:e,end:t})=>Number.isFinite(e)&&Number.isFinite(t)&&e>=0&&t>e).sort((e,t)=>e.start-t.start),a=[];for(const e of r){const t=a.at(-1);t&&e.start<=t.end?t.end=Math.max(t.end,e.end):a.push(e)}return a},n=(e,t)=>e.reduce((e,{start:r,end:s})=>e+Math.max(0,Math.min(s,t)-r),0),i=(e,t)=>e.reduce((e,{start:r,end:s})=>s<=t+1e-6?e+s-r:e,0),o=e=>"urn:com:philo:event:ad:regions"===e?.uri||"string"==typeof e?.messageData&&e.messageData.includes(\'"ad_breaks"\'),u=(t,r)=>{if(!Array.isArray(t.periods)||!t.periods.every(s))return!1;const u=[];for(const r of t.periods)if(Array.isArray(r.eventStreams))for(const t of r.eventStreams)if(o(t)&&"string"==typeof t.messageData)try{const r=Reflect.apply(e,JSON,[t.messageData]);u.push(...a(r?.ad_breaks))}catch{}const d=a(u);return!!d.length&&(t.periods=t.periods.filter((e,t)=>!(e=>Array.isArray(e.adaptationSets)&&e.adaptationSets.some(e=>"string"==typeof e?.timeline?.segmentURLTemplate&&e.timeline.segmentURLTemplate.includes("/ad/")))(e)),t.periods.forEach((e,t)=>{if(Number.isFinite(e.startTime)){const t=e.startTime;e.startTime=t-i(d,t)}"index"in e&&(e.index=t),Array.isArray(e.eventStreams)&&(e.eventStreams=e.eventStreams.filter((e,t)=>!o(e)))}),Number.isFinite(t.duration)&&(t.duration-=n(d,t.duration)),!0)},d=(e,t)=>{if(!e||"object"!=typeof e||r.has(e))return e;const o=u(e),d=(e=>{if(!s(e.url_to_thumbs)||Array.isArray(e.url_to_thumbs)||!Array.isArray(e.ad_breaks))return!1;const t=a(e.ad_breaks);if(!t.length)return!1;for(const r of Object.keys(e.url_to_thumbs)){if(r.includes("/ad/")){delete e.url_to_thumbs[r];continue}const s=e.url_to_thumbs[r];if(Array.isArray(s))for(const e of s)if(Number.isFinite(e?.pt)){const r=e.pt;e.pt=r-i(t,r)}}return delete e.ad_breaks,Number.isFinite(e.available_duration_seconds)&&(e.available_duration_seconds-=n(t,e.available_duration_seconds)),!0})(e);return(o||d)&&r.add(e),e},c={apply:(e,t,r)=>{const s=Reflect.apply(e,t,r);try{return d(s)}catch(e){return s}}};JSON.parse=new Proxy(e,c);const p={apply:async(e,t,r)=>{const s=await Reflect.apply(e,t,r);try{return d(s)}catch(e){return s}}};Response.prototype.json=new Proxy(t,p)})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString.cde9bb8af864ebcfcb79d446284c6e7e === e) return; + (()=>{ + const e = JSON.parse, t = Response.prototype.json, r = new WeakSet, a = (e)=>null !== e && "object" == typeof e, s = (e)=>{ + if (!Array.isArray(e)) return []; + const t = (e)=>"number" == typeof e || "string" == typeof e && "" !== e.trim() ? Number(e) : NaN, r = e.filter(a).map(({ start: e, end: r })=>({ + start: t(e), + end: t(r) + })).filter(({ start: e, end: t })=>Number.isFinite(e) && Number.isFinite(t) && e >= 0 && t > e).sort((e, t)=>e.start - t.start), s = []; + for (const e of r){ + const t = s.at(-1); + t && e.start <= t.end ? t.end = Math.max(t.end, e.end) : s.push(e); + } + return s; + }, n1 = (e, t)=>e.reduce((e, { start: r, end: a })=>e + Math.max(0, Math.min(a, t) - r), 0), o = (e, t)=>e.reduce((e, { start: r, end: a })=>a <= t + 1e-6 ? e + a - r : e, 0), i1 = (e)=>"urn:com:philo:event:ad:regions" === (e === null || e === void 0 ? void 0 : e.uri) || "string" == typeof (e === null || e === void 0 ? void 0 : e.messageData) && e.messageData.includes('"ad_breaks"'), c = (t, r)=>{ + if (!Array.isArray(t.periods) || !t.periods.every(a)) return !1; + const c = []; + for (const r of t.periods)if (Array.isArray(r.eventStreams)) { + for (const t of r.eventStreams)if (i1(t) && "string" == typeof t.messageData) try { + const r = Reflect.apply(e, JSON, [ + t.messageData + ]); + c.push(...s(r === null || r === void 0 ? void 0 : r.ad_breaks)); + } catch {} + } + const d = s(c); + return !!d.length && (t.periods = t.periods.filter((e, t)=>!((e)=>Array.isArray(e.adaptationSets) && e.adaptationSets.some((e)=>{ + var _e_timeline; + return "string" == typeof (e === null || e === void 0 ? void 0 : (_e_timeline = e.timeline) === null || _e_timeline === void 0 ? void 0 : _e_timeline.segmentURLTemplate) && e.timeline.segmentURLTemplate.includes("/ad/"); + }))(e)), t.periods.forEach((e, t)=>{ + if (Number.isFinite(e.startTime)) { + const t = e.startTime; + e.startTime = t - o(d, t); + } + "index" in e && (e.index = t), Array.isArray(e.eventStreams) && (e.eventStreams = e.eventStreams.filter((e, t)=>!i1(e))); + }), Number.isFinite(t.duration) && (t.duration -= n1(d, t.duration)), !0); + }, d = (e, t)=>{ + if (!e || "object" != typeof e || r.has(e)) return e; + const i1 = c(e), d = ((e)=>{ + if (!a(e.url_to_thumbs) || Array.isArray(e.url_to_thumbs) || !Array.isArray(e.ad_breaks)) return !1; + const t = s(e.ad_breaks); + if (!t.length) return !1; + for (const r of Object.keys(e.url_to_thumbs)){ + if (r.includes("/ad/")) { + delete e.url_to_thumbs[r]; + continue; + } + const a = e.url_to_thumbs[r]; + if (Array.isArray(a)) { + for (const e of a)if (Number.isFinite(e === null || e === void 0 ? void 0 : e.pt)) { + const r = e.pt; + e.pt = r - o(t, r); + } + } + } + return delete e.ad_breaks, Number.isFinite(e.available_duration_seconds) && (e.available_duration_seconds -= n1(t, e.available_duration_seconds)), !0; + })(e); + return (i1 || d) && r.add(e), e; + }, u = { + apply: (e, t, r)=>{ + const a = Reflect.apply(e, t, r); + try { + return d(a); + } catch (e) { + return a; + } + } + }; + JSON.parse = new Proxy(e, u); + const p = { + apply: async (e, t, r)=>{ + const a = await Reflect.apply(e, t, r); + try { + return d(a); + } catch (e) { + return a; + } + } + }; + Response.prototype.json = new Proxy(t, p); + })(); + Object.defineProperty(Window.prototype.toString, "cde9bb8af864ebcfcb79d446284c6e7e", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "cde9bb8af864ebcfcb79d446284c6e7e" due to: ' + e); + } + }, + '(()=>{const e={cmpConsentVendors:",s2657,",event:"cmpEvent"},n=()=>{setTimeout((()=>{"function"==typeof window.dataLayer?.push&&window.dataLayer.push(e)}),1e3)};"loading"===document.readyState?window.addEventListener("load",n):n()})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString.f4e87ab01db8b24094d849d15976f257 === e) return; + (()=>{ + const e = { + cmpConsentVendors: ",s2657,", + event: "cmpEvent" + }, t = ()=>{ + setTimeout(()=>{ + var _window_dataLayer; + "function" == typeof ((_window_dataLayer = window.dataLayer) === null || _window_dataLayer === void 0 ? void 0 : _window_dataLayer.push) && window.dataLayer.push(e); + }, 1e3); + }; + "loading" === document.readyState ? window.addEventListener("load", t) : t(); + })(); + Object.defineProperty(Window.prototype.toString, "f4e87ab01db8b24094d849d15976f257", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "f4e87ab01db8b24094d849d15976f257" due to: ' + e); + } + }, + '(()=>{const t={apply:(t,e,n)=>{try{const t=n[0];7e3===n[1]&&"function"==typeof t&&t.toString().includes("[native code]")&&(n[1]=0)}catch(t){}return Reflect.apply(t,e,n)}};window.setTimeout=new Proxy(window.setTimeout,t);const e=window.EventTarget.prototype.addEventListener,n={apply:(t,n,o)=>{try{if("DOMContentLoaded"===o[0]){const t=document.querySelector(\'body > iframe[src="javascript:false"]\');t&&(t.contentWindow.setTimeout=window.setTimeout,EventTarget.prototype.addEventListener=e)}}catch(t){}return Reflect.apply(t,n,o)}};window.EventTarget.prototype.addEventListener=new Proxy(window.EventTarget.prototype.addEventListener,n)})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString.b9bcf247e4a2f78b10edbe73e7065dc7 === e) return; + (()=>{ + const e = { + apply: (e, t, o)=>{ + try { + const e = o[0]; + 7e3 === o[1] && "function" == typeof e && e.toString().includes("[native code]") && (o[1] = 0); + } catch (e) {} + return Reflect.apply(e, t, o); + } + }; + window.setTimeout = new Proxy(window.setTimeout, e); + const t = window.EventTarget.prototype.addEventListener, o = { + apply: (e, o, n1)=>{ + try { + if ("DOMContentLoaded" === n1[0]) { + const e = document.querySelector('body > iframe[src="javascript:false"]'); + e && (e.contentWindow.setTimeout = window.setTimeout, EventTarget.prototype.addEventListener = t); + } + } catch (e) {} + return Reflect.apply(e, o, n1); + } + }; + window.EventTarget.prototype.addEventListener = new Proxy(window.EventTarget.prototype.addEventListener, o); + })(); + Object.defineProperty(Window.prototype.toString, "b9bcf247e4a2f78b10edbe73e7065dc7", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "b9bcf247e4a2f78b10edbe73e7065dc7" due to: ' + e); + } + }, + "(()=>{const r={apply:(r,t,p)=>{try{if(p[0]?.isAffiliate)return}catch(r){}return Reflect.apply(r,t,p)}};window.Array.prototype.push=new Proxy(window.Array.prototype.push,r)})();": ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["6b25d47adf4d5da91c359dc2fe2f3012"] === e) return; + (()=>{ + const e = { + apply: (e, r, t)=>{ + try { + var _t_; + if ((_t_ = t[0]) === null || _t_ === void 0 ? void 0 : _t_.isAffiliate) return; + } catch (e) {} + return Reflect.apply(e, r, t); + } + }; + window.Array.prototype.push = new Proxy(window.Array.prototype.push, e); + })(); + Object.defineProperty(Window.prototype.toString, "6b25d47adf4d5da91c359dc2fe2f3012", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "6b25d47adf4d5da91c359dc2fe2f3012" due to: ' + e); + } + }, + '(()=>{const t={apply:(t,e,o)=>{try{const t=o[0];t?.matches?.("azuki-reader")&&!0===t?.showAd&&Object.defineProperty(o[0],"showAd",{value:!1})}catch(t){}return Reflect.apply(t,e,o)}};window.Function.prototype.bind=new Proxy(window.Function.prototype.bind,t)})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString.d1f854731b5f25e5cd38f2df757a118b === e) return; + (()=>{ + const e = { + apply: (e, t, o)=>{ + try { + var _e_matches; + const e = o[0]; + (e === null || e === void 0 ? void 0 : (_e_matches = e.matches) === null || _e_matches === void 0 ? void 0 : _e_matches.call(e, "azuki-reader")) && !0 === (e === null || e === void 0 ? void 0 : e.showAd) && Object.defineProperty(o[0], "showAd", { + value: !1 + }); + } catch (e) {} + return Reflect.apply(e, t, o); + } + }; + window.Function.prototype.bind = new Proxy(window.Function.prototype.bind, e); + })(); + Object.defineProperty(Window.prototype.toString, "d1f854731b5f25e5cd38f2df757a118b", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "d1f854731b5f25e5cd38f2df757a118b" due to: ' + e); + } + }, + '(()=>{if(location.href.includes("/watch.php?id=")){const i=location.href.replace("watch.php","video.php");location.assign(i)}})();': ()=>{ + try { + const c = "done"; + if (Window.prototype.toString["84c67320f2cd3cf804a18044c1387f4a"] === c) return; + (()=>{ + if (location.href.includes("/watch.php?id=")) { + const c = location.href.replace("watch.php", "video.php"); + location.assign(c); + } + })(); + Object.defineProperty(Window.prototype.toString, "84c67320f2cd3cf804a18044c1387f4a", { + value: c, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (c) { + console.error('Error executing AG js rule with uniqueId "84c67320f2cd3cf804a18044c1387f4a" due to: ' + c); + } + }, + '(()=>{document.addEventListener("DOMContentLoaded",(()=>{"function"==typeof showgame&&showgame()}));})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["60639f622c0aeeaed4d3c6402add6364"] === e) return; + document.addEventListener("DOMContentLoaded", ()=>{ + "function" == typeof showgame && showgame(); + }); + Object.defineProperty(Window.prototype.toString, "60639f622c0aeeaed4d3c6402add6364", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "60639f622c0aeeaed4d3c6402add6364" due to: ' + e); + } + }, + '(()=>{const e=Object.getOwnPropertyDescriptor(Element.prototype,"innerHTML").set,t=Object.getOwnPropertyDescriptor(Element.prototype,"innerHTML").get;Object.defineProperty(Element.prototype,"innerHTML",{get(){const e=t.call(this);return e.includes("delete window")?"":e},set(t){e.call(this,t)}})})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString.e233c6aa26d14c122933ca24bb028498 === e) return; + (()=>{ + const e = Object.getOwnPropertyDescriptor(Element.prototype, "innerHTML").set, t = Object.getOwnPropertyDescriptor(Element.prototype, "innerHTML").get; + Object.defineProperty(Element.prototype, "innerHTML", { + get () { + const e = t.call(this); + return e.includes("delete window") ? "" : e; + }, + set (t) { + e.call(this, t); + } + }); + })(); + Object.defineProperty(Window.prototype.toString, "e233c6aa26d14c122933ca24bb028498", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "e233c6aa26d14c122933ca24bb028498" due to: ' + e); + } + }, + '(()=>{document.addEventListener("DOMContentLoaded",(()=>{"function"==typeof getfull&&getfull()}));})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["45e2ee4fbb5fd647b76cf34c6f5c7222"] === e) return; + document.addEventListener("DOMContentLoaded", ()=>{ + "function" == typeof getfull && getfull(); + }); + Object.defineProperty(Window.prototype.toString, "45e2ee4fbb5fd647b76cf34c6f5c7222", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "45e2ee4fbb5fd647b76cf34c6f5c7222" due to: ' + e); + } + }, + '(()=>{let e=!1;const l={apply:async(e,l,o)=>{const r=o[0];return!1===r?.rewardAllowed&&(o[0].rewardAllowed=!0),Reflect.apply(e,l,o)}},o={apply:(o,r,t)=>{const n=t[0]?.pokiAdsCompleted;return!e&&n&&n[0]?.toString()?.includes("rewardAllowed")&&(n[0]=new Proxy(n[0],l),e=!0),Reflect.apply(o,r,t)}};window.Object.keys=new Proxy(window.Object.keys,o)})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["85cbf457d7f9be26230706564eebecbe"] === e) return; + (()=>{ + let e = !1; + const r = { + apply: async (e, r, t)=>{ + const o = t[0]; + return !1 === (o === null || o === void 0 ? void 0 : o.rewardAllowed) && (t[0].rewardAllowed = !0), Reflect.apply(e, r, t); + } + }, t = { + apply: (t, o, n1)=>{ + var _n_, _c__toString, _c_; + const c = (_n_ = n1[0]) === null || _n_ === void 0 ? void 0 : _n_.pokiAdsCompleted; + return !e && c && ((_c_ = c[0]) === null || _c_ === void 0 ? void 0 : (_c__toString = _c_.toString()) === null || _c__toString === void 0 ? void 0 : _c__toString.includes("rewardAllowed")) && (c[0] = new Proxy(c[0], r), e = !0), Reflect.apply(t, o, n1); + } + }; + window.Object.keys = new Proxy(window.Object.keys, t); + })(); + Object.defineProperty(Window.prototype.toString, "85cbf457d7f9be26230706564eebecbe", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "85cbf457d7f9be26230706564eebecbe" due to: ' + e); + } + }, + '(()=>{window.Pogo=window.Pogo||{},window.Pogo.cmd=[],window.Pogo.cmd.push=o=>{"function"==typeof o&&o()},window.Pogo.getVideoTag=(o,w)=>{w&&"function"==typeof w&&w()};})();': ()=>{ + try { + const o = "done"; + if (Window.prototype.toString.f1975fac6cc2feb528947114b7201f11 === o) return; + window.Pogo = window.Pogo || {}, window.Pogo.cmd = [], window.Pogo.cmd.push = (o)=>{ + "function" == typeof o && o(); + }, window.Pogo.getVideoTag = (o, e)=>{ + e && "function" == typeof e && e(); + }; + Object.defineProperty(Window.prototype.toString, "f1975fac6cc2feb528947114b7201f11", { + value: o, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (o) { + console.error('Error executing AG js rule with uniqueId "f1975fac6cc2feb528947114b7201f11" due to: ' + o); + } + }, + "(()=>{const n=[];n.push=n=>{try{n()}catch(n){console.error(n)}},window.adsNinja=window.adsNinja||{queue:n}})();": ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["4893d02be5a2a7c0f59287a47260c7b0"] === e) return; + (()=>{ + const e = []; + e.push = (e)=>{ + try { + e(); + } catch (e) { + console.error(e); + } + }, window.adsNinja = window.adsNinja || { + queue: e + }; + })(); + Object.defineProperty(Window.prototype.toString, "4893d02be5a2a7c0f59287a47260c7b0", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "4893d02be5a2a7c0f59287a47260c7b0" due to: ' + e); + } + }, + '(()=>{window.Bolt={on:(o,n,i)=>{"precontent_ad_video"===o&&"AD_COMPLETE"===n&&"function"==typeof i&&i()},BOLT_AD_COMPLETE:"AD_COMPLETE",BOLT_AD_ERROR:"AD_ERROR"},window.ramp=window.ramp||{},window.ramp.addUnits=()=>Promise.resolve(),window.ramp.displayUnits=()=>{setTimeout((()=>{"function"==typeof window.ramp.onPlayerReady&&window.ramp.onPlayerReady()}),1)};})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["13196ca8ba80be48cb3a530394beced8"] === e) return; + window.Bolt = { + on: (e, o, n1)=>{ + "precontent_ad_video" === e && "AD_COMPLETE" === o && "function" == typeof n1 && n1(); + }, + BOLT_AD_COMPLETE: "AD_COMPLETE", + BOLT_AD_ERROR: "AD_ERROR" + }, window.ramp = window.ramp || {}, window.ramp.addUnits = ()=>Promise.resolve(), window.ramp.displayUnits = ()=>{ + setTimeout(()=>{ + "function" == typeof window.ramp.onPlayerReady && window.ramp.onPlayerReady(); + }, 1); + }; + Object.defineProperty(Window.prototype.toString, "13196ca8ba80be48cb3a530394beced8", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "13196ca8ba80be48cb3a530394beced8" due to: ' + e); + } + }, + '(()=>{const e={apply:(e,t,o)=>(o[0]=!0,Reflect.apply(e,t,o))};let t,o=!1;Object.defineProperty(window,"ig",{get:function(){return"function"!=typeof t?.RetentionRewardedVideo?.prototype?.rewardedVideoResult||o||(t.RetentionRewardedVideo.prototype.rewardedVideoResult=new Proxy(t.RetentionRewardedVideo.prototype.rewardedVideoResult,e),o=!0),t},set:function(e){t=e}})})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["49064caba0f35708edea647b43d9260f"] === e) return; + (()=>{ + const e = { + apply: (e, t, o)=>(o[0] = !0, Reflect.apply(e, t, o)) + }; + let t, o = !1; + Object.defineProperty(window, "ig", { + get: function() { + var _t_RetentionRewardedVideo_prototype, _t_RetentionRewardedVideo; + return "function" != typeof (t === null || t === void 0 ? void 0 : (_t_RetentionRewardedVideo = t.RetentionRewardedVideo) === null || _t_RetentionRewardedVideo === void 0 ? void 0 : (_t_RetentionRewardedVideo_prototype = _t_RetentionRewardedVideo.prototype) === null || _t_RetentionRewardedVideo_prototype === void 0 ? void 0 : _t_RetentionRewardedVideo_prototype.rewardedVideoResult) || o || (t.RetentionRewardedVideo.prototype.rewardedVideoResult = new Proxy(t.RetentionRewardedVideo.prototype.rewardedVideoResult, e), o = !0), t; + }, + set: function(e) { + t = e; + } + }); + })(); + Object.defineProperty(Window.prototype.toString, "49064caba0f35708edea647b43d9260f", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "49064caba0f35708edea647b43d9260f" due to: ' + e); + } + }, + '(()=>{let e,n=!1;const o=function(){};Object.defineProperty(window,"videojs",{get:function(){return e},set:function(t){e=t,!n&&e&&"function"==typeof e.registerPlugin&&(n=!0,e.registerPlugin("skipIma3Unskippable",o))}}),window.SlotTypeEnum={},window.ANAWeb=function(){},window.ANAWeb.prototype.createVideoSlot=function(){return Promise.resolve()},window.ANAWeb.prototype.createSlot=function(){},window.ANAWeb.VideoPlayerType={},window.ANAWeb.VideoPlacementType={InStream:1},window.ANAWeb.AdPosition={AboveTheFold:1},window.ANAWeb.PlaybackMethod={ClickSoundOn:1},window.addEventListener("load",(function(){document.dispatchEvent(new CustomEvent("ANAReady"))}))})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["3b3aa026a1d7fa6e2ba077f743a7d54d"] === e) return; + (()=>{ + let e, o = !1; + const n1 = function() {}; + Object.defineProperty(window, "videojs", { + get: function() { + return e; + }, + set: function(t) { + e = t, !o && e && "function" == typeof e.registerPlugin && (o = !0, e.registerPlugin("skipIma3Unskippable", n1)); + } + }), window.SlotTypeEnum = {}, window.ANAWeb = function() {}, window.ANAWeb.prototype.createVideoSlot = function() { + return Promise.resolve(); + }, window.ANAWeb.prototype.createSlot = function() {}, window.ANAWeb.VideoPlayerType = {}, window.ANAWeb.VideoPlacementType = { + InStream: 1 + }, window.ANAWeb.AdPosition = { + AboveTheFold: 1 + }, window.ANAWeb.PlaybackMethod = { + ClickSoundOn: 1 + }, window.addEventListener("load", function() { + document.dispatchEvent(new CustomEvent("ANAReady")); + }); + })(); + Object.defineProperty(Window.prototype.toString, "3b3aa026a1d7fa6e2ba077f743a7d54d", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "3b3aa026a1d7fa6e2ba077f743a7d54d" due to: ' + e); + } + }, + '(()=>{const a=function(){};window.apstag={fetchBids(c,a){"function"==typeof a&&a([])},init:a,setDisplayBids:a,targetingKeys:a}})();': ()=>{ + try { + const c = "done"; + if (Window.prototype.toString["11a07f3c1f878acc052df77d287cc2cb"] === c) return; + (()=>{ + const c = function() {}; + window.apstag = { + fetchBids (c, t) { + "function" == typeof t && t([]); + }, + init: c, + setDisplayBids: c, + targetingKeys: c + }; + })(); + Object.defineProperty(Window.prototype.toString, "11a07f3c1f878acc052df77d287cc2cb", { + value: c, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (c) { + console.error('Error executing AG js rule with uniqueId "11a07f3c1f878acc052df77d287cc2cb" due to: ' + c); + } + }, + '(()=>{window.JSON.parse=new Proxy(JSON.parse,{apply(r,e,t){const s=Reflect.apply(r,e,t),l=s?.results;try{if(l&&Array.isArray(l))s?.results&&(s.results=s.results.filter((r=>{if(!Object.prototype.hasOwnProperty.call(r,"adTitle"))return r})));else for(let r in s){const e=s[r]?.results;e&&Array.isArray(e)&&(s[r].results=s[r].results.filter((r=>{if(!Object.prototype.hasOwnProperty.call(r,"adTitle"))return r})))}}catch(r){}return s}});})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString.b91767671ee5e3e933cdcfdac4efc25b === e) return; + window.JSON.parse = new Proxy(JSON.parse, { + apply (e, r, t) { + const c = Reflect.apply(e, r, t), o = c === null || c === void 0 ? void 0 : c.results; + try { + if (o && Array.isArray(o)) (c === null || c === void 0 ? void 0 : c.results) && (c.results = c.results.filter((e)=>{ + if (!Object.prototype.hasOwnProperty.call(e, "adTitle")) return e; + })); + else for(let e in c){ + var _c_e; + const r = (_c_e = c[e]) === null || _c_e === void 0 ? void 0 : _c_e.results; + r && Array.isArray(r) && (c[e].results = c[e].results.filter((e)=>{ + if (!Object.prototype.hasOwnProperty.call(e, "adTitle")) return e; + })); + } + } catch (e) {} + return c; + } + }); + Object.defineProperty(Window.prototype.toString, "b91767671ee5e3e933cdcfdac4efc25b", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "b91767671ee5e3e933cdcfdac4efc25b" due to: ' + e); + } + }, + '(()=>{let e,n=!1;const t=function(){};Object.defineProperty(window,"videojs",{get:function(){return e},set:function(i){e=i,!n&&e&&"function"==typeof e.registerPlugin&&(n=!0,e.registerPlugin("ads",t))}})})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString.c14cd51b0bc81e9fb5cd82344ac7da2e === e) return; + (()=>{ + let e, t = !1; + const c = function() {}; + Object.defineProperty(window, "videojs", { + get: function() { + return e; + }, + set: function(n1) { + e = n1, !t && e && "function" == typeof e.registerPlugin && (t = !0, e.registerPlugin("ads", c)); + } + }); + })(); + Object.defineProperty(Window.prototype.toString, "c14cd51b0bc81e9fb5cd82344ac7da2e", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "c14cd51b0bc81e9fb5cd82344ac7da2e" due to: ' + e); + } + }, + '(()=>{const n=function(n){if("function"==typeof n)try{n.call()}catch(n){}},i={addAdUnits:function(){},adServers:{dfp:{buildVideoUrl:function(){return""}}},adUnits:[],aliasBidder:function(){},cmd:[],enableAnalytics:function(){},getHighestCpmBids:function(){return[]},libLoaded:!0,que:[],requestBids:function(n){if(n instanceof Object&&n.bidsBackHandler)try{n.bidsBackHandler.call()}catch(n){}},removeAdUnit:function(){},setBidderConfig:function(){},setConfig:function(){},setTargetingForGPTAsync:function(){},rp:{requestVideoBids:function(n){if("function"==typeof n?.callback)try{n.callback.call()}catch(n){}}}};i.cmd.push=n,i.que.push=n,window.pbjs=i})();': ()=>{ + try { + const n1 = "done"; + if (Window.prototype.toString.a12991f34fbcdc0cb606380a258fde90 === n1) return; + (()=>{ + const n1 = function(n1) { + if ("function" == typeof n1) try { + n1.call(); + } catch (n1) {} + }, t = { + addAdUnits: function() {}, + adServers: { + dfp: { + buildVideoUrl: function() { + return ""; + } + } + }, + adUnits: [], + aliasBidder: function() {}, + cmd: [], + enableAnalytics: function() {}, + getHighestCpmBids: function() { + return []; + }, + libLoaded: !0, + que: [], + requestBids: function(n1) { + if (n1 instanceof Object && n1.bidsBackHandler) try { + n1.bidsBackHandler.call(); + } catch (n1) {} + }, + removeAdUnit: function() {}, + setBidderConfig: function() {}, + setConfig: function() {}, + setTargetingForGPTAsync: function() {}, + rp: { + requestVideoBids: function(n1) { + if ("function" == typeof (n1 === null || n1 === void 0 ? void 0 : n1.callback)) try { + n1.callback.call(); + } catch (n1) {} + } + } + }; + t.cmd.push = n1, t.que.push = n1, window.pbjs = t; + })(); + Object.defineProperty(Window.prototype.toString, "a12991f34fbcdc0cb606380a258fde90", { + value: n1, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (n1) { + console.error('Error executing AG js rule with uniqueId "a12991f34fbcdc0cb606380a258fde90" due to: ' + n1); + } + }, + '(()=>{const c=function(){[...arguments].forEach((c=>{if("function"==typeof c)try{c(!0)}catch(c){console.debug(c)}}))},n=[];n.push=c,window.PQ={cmd:n,getTargeting:c}})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["52a467e415654146fde7899c49035b7f"] === e) return; + (()=>{ + const e = function() { + [ + ...arguments + ].forEach((e)=>{ + if ("function" == typeof e) try { + e(!0); + } catch (e) { + console.debug(e); + } + }); + }, t = []; + t.push = e, window.PQ = { + cmd: t, + getTargeting: e + }; + })(); + Object.defineProperty(Window.prototype.toString, "52a467e415654146fde7899c49035b7f", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "52a467e415654146fde7899c49035b7f" due to: ' + e); + } + }, + '(()=>{const n=function(n){if("function"==typeof n)try{n.call()}catch(n){}},i={addAdUnits:function(){},adServers:{dfp:{buildVideoUrl:function(){return""}}},adUnits:[],aliasBidder:function(){},cmd:[],enableAnalytics:function(){},getHighestCpmBids:function(){return[]},libLoaded:!0,que:[],requestBids:function(n){if(n instanceof Object&&n.bidsBackHandler)try{n.bidsBackHandler.call()}catch(n){}},removeAdUnit:function(){},setBidderConfig:function(){},setConfig:function(){},setTargetingForGPTAsync:function(){}};i.cmd.push=n,i.que.push=n,window.pbjs=i})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["5eccf85ec7e71ba4deefe939741fb145"] === e) return; + (()=>{ + const e = function(e) { + if ("function" == typeof e) try { + e.call(); + } catch (e) {} + }, n1 = { + addAdUnits: function() {}, + adServers: { + dfp: { + buildVideoUrl: function() { + return ""; + } + } + }, + adUnits: [], + aliasBidder: function() {}, + cmd: [], + enableAnalytics: function() {}, + getHighestCpmBids: function() { + return []; + }, + libLoaded: !0, + que: [], + requestBids: function(e) { + if (e instanceof Object && e.bidsBackHandler) try { + e.bidsBackHandler.call(); + } catch (e) {} + }, + removeAdUnit: function() {}, + setBidderConfig: function() {}, + setConfig: function() {}, + setTargetingForGPTAsync: function() {} + }; + n1.cmd.push = e, n1.que.push = e, window.pbjs = n1; + })(); + Object.defineProperty(Window.prototype.toString, "5eccf85ec7e71ba4deefe939741fb145", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "5eccf85ec7e71ba4deefe939741fb145" due to: ' + e); + } + }, + "(()=>{const e={apply:(e,t,l)=>{if(!t.matches('a[href][target=\"_blank\"]'))return Reflect.apply(e,t,l)}};window.HTMLElement.prototype.click=new Proxy(window.HTMLElement.prototype.click,e)})();": ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["0a528b39acd15b3dec81e240fde05757"] === e) return; + (()=>{ + const e = { + apply: (e, t, r)=>{ + if (!t.matches('a[href][target="_blank"]')) return Reflect.apply(e, t, r); + } + }; + window.HTMLElement.prototype.click = new Proxy(window.HTMLElement.prototype.click, e); + })(); + Object.defineProperty(Window.prototype.toString, "0a528b39acd15b3dec81e240fde05757", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "0a528b39acd15b3dec81e240fde05757" due to: ' + e); + } + }, + '(()=>{const t=[];t.push=function(t){try{t()}catch(t){}};window.headertag={cmd:t,buildGamMvt:function(t,c){const n={[c]:"https://securepubads.g.doubleclick.net/gampad/ads"};return n||{}},retrieveVideoDemand:function(t,c,n){const e=t[0]?.htSlotName;if("function"==typeof c)try{c(e)}catch(t){}}}})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["4a7e38f499848781627483fb1bb70105"] === e) return; + (()=>{ + const e = []; + e.push = function(e) { + try { + e(); + } catch (e) {} + }; + window.headertag = { + cmd: e, + buildGamMvt: function(e, t) { + return { + [t]: "https://securepubads.g.doubleclick.net/gampad/ads" + } || {}; + }, + retrieveVideoDemand: function(e, t, o) { + var _e_; + const n1 = (_e_ = e[0]) === null || _e_ === void 0 ? void 0 : _e_.htSlotName; + if ("function" == typeof t) try { + t(n1); + } catch (e) {} + } + }; + })(); + Object.defineProperty(Window.prototype.toString, "4a7e38f499848781627483fb1bb70105", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "4a7e38f499848781627483fb1bb70105" due to: ' + e); + } + }, + '(()=>{const e="3.453.0",t=function(){},s={},n=function(e){const t=document.createElement("div");t.style.setProperty("display","none","important"),t.style.setProperty("visibility","collapse","important"),e&&e.appendChild(t)};n.prototype.destroy=t,n.prototype.initialize=t;const i=function(){};i.CompanionBackfillMode={ALWAYS:"always",ON_MASTER_AD:"on_master_ad"},i.VpaidMode={DISABLED:0,ENABLED:1,INSECURE:2},i.prototype={c:!0,f:{},i:!1,l:"",p:"",r:0,t:"",v:"",getCompanionBackfill:t,getDisableCustomPlaybackForIOS10Plus(){return this.i},getDisabledFlashAds:()=>!0,getFeatureFlags(){return this.f},getLocale(){return this.l},getNumRedirects(){return this.r},getPlayerType(){return this.t},getPlayerVersion(){return this.v},getPpid(){return this.p},getVpaidMode(){return this.C},isCookiesEnabled(){return this.c},isVpaidAdapter(){return this.M},setCompanionBackfill:t,setAutoPlayAdBreaks(e){this.K=e},setCookiesEnabled(e){this.c=!!e},setDisableCustomPlaybackForIOS10Plus(e){this.i=!!e},setDisableFlashAds:t,setFeatureFlags(e){this.f=!!e},setIsVpaidAdapter(e){this.M=e},setLocale(e){this.l=!!e},setNumRedirects(e){this.r=!!e},setPageCorrelator(e){this.R=e},setPlayerType(e){this.t=!!e},setPlayerVersion(e){this.v=!!e},setPpid(e){this.p=!!e},setVpaidMode(e){this.C=e},setSessionId:t,setStreamCorrelator:t,setVpaidAllowed:t,CompanionBackfillMode:{ALWAYS:"always",ON_MASTER_AD:"on_master_ad"},VpaidMode:{DISABLED:0,ENABLED:1,INSECURE:2}};const r=function(){this.listeners=new Map,this._dispatch=function(e){let t=this.listeners.get(e.type);t=t?t.values():[];for(const s of Array.from(t))try{s(e)}catch(e){console.trace(e)}},this.addEventListener=function(e,t,s,n){Array.isArray(e)||(e=[e]);for(let s=0;s!1,o.getCuePoints=()=>[0],o.getCurrentAd=()=>h,o.getCurrentAdCuePoints=()=>[],o.getRemainingTime=()=>0,o.getVolume=function(){return this.volume},o.init=t,o.isCustomClickTrackingUsed=()=>!1,o.isCustomPlaybackUsed=()=>!1,o.pause=t,o.requestNextAdBreak=t,o.resize=t,o.resume=t,o.setVolume=function(e){this.volume=e},o.skip=t,o.start=function(){for(const e of [T.Type.LOADED,T.Type.STARTED,T.Type.CONTENT_RESUME_REQUESTED,T.Type.AD_BUFFERING,T.Type.FIRST_QUARTILE,T.Type.MIDPOINT,T.Type.THIRD_QUARTILE,T.Type.COMPLETE,T.Type.ALL_ADS_COMPLETED])try{this._dispatch(new s.AdEvent(e))}catch(e){console.trace(e)}},o.stop=t,o.updateAdsRenderingSettings=t;const a=Object.create(o),d=function(e,t,s){this.type=e,this.adsRequest=t,this.userRequestContext=s};d.prototype={getAdsManager:()=>a,getUserRequestContext(){return this.userRequestContext?this.userRequestContext:{}}},d.Type={ADS_MANAGER_LOADED:"adsManagerLoaded"};const E=r;E.prototype.settings=new i,E.prototype.contentComplete=t,E.prototype.destroy=t,E.prototype.getSettings=function(){return this.settings},E.prototype.getVersion=()=>e,E.prototype.requestAds=function(e,t){requestAnimationFrame((()=>{const{ADS_MANAGER_LOADED:n}=d.Type,i=new s.AdsManagerLoadedEvent(n,e,t);this._dispatch(i)}));const n=new s.AdError("adPlayError",1205,1205,"The browser prevented playback initiated without user interaction.",e,t);requestAnimationFrame((()=>{this._dispatch(new s.AdErrorEvent(n))}))};const A=t,u=function(){};u.prototype={setAdWillAutoPlay:t,setAdWillPlayMuted:t,setContinuousPlayback:t};const l=function(){};l.prototype={getAdPosition:()=>1,getIsBumper:()=>!1,getMaxDuration:()=>-1,getPodIndex:()=>1,getTimeOffset:()=>0,getTotalAds:()=>1};const g=function(){};g.prototype.getAdIdRegistry=function(){return""},g.prototype.getAdIsValue=function(){return""};const p=function(){};p.prototype={pi:new l,getAdId:()=>"",getAdPodInfo(){return this.pi},getAdSystem:()=>"",getAdvertiserName:()=>"",getApiFramework:()=>null,getCompanionAds:()=>[],getContentType:()=>"",getCreativeAdId:()=>"",getDealId:()=>"",getDescription:()=>"",getDuration:()=>8.5,getHeight:()=>0,getMediaUrl:()=>null,getMinSuggestedDuration:()=>-2,getSkipTimeOffset:()=>-1,getSurveyUrl:()=>null,getTitle:()=>"",getTraffickingParametersString:()=>"",getUiElements:()=>[""],getUniversalAdIdRegistry:()=>"unknown",getUniversalAdIds:()=>[new g],getUniversalAdIdValue:()=>"unknown",getVastMediaBitrate:()=>0,getVastMediaHeight:()=>0,getVastMediaWidth:()=>0,getWidth:()=>0,getWrapperAdIds:()=>[""],getWrapperAdSystems:()=>[""],getWrapperCreativeIds:()=>[""],isLinear:()=>!0,isSkippable:()=>!0};const c=function(){};c.prototype={getAdSlotId:()=>"",getContent:()=>"",getContentType:()=>"",getHeight:()=>1,getWidth:()=>1};const C=function(e,t,s,n,i,r){this.errorCode=t,this.message=n,this.type=e,this.adsRequest=i,this.userRequestContext=r,this.getErrorCode=function(){return this.errorCode},this.getInnerError=function(){return null},this.getMessage=function(){return this.message},this.getType=function(){return this.type},this.getVastErrorCode=function(){return this.vastErrorCode},this.toString=function(){return`AdError ${this.errorCode}: ${this.message}`}};C.ErrorCode={},C.Type={};const h=(()=>{try{for(const e of Object.values(window.vidible._getContexts()))if(e.getPlayer()?.div?.innerHTML.includes("www.engadget.com"))return!0}catch(e){}return!1})()?void 0:new p,T=function(e){this.type=e};T.prototype={getAd:()=>h,getAdData:()=>{}},T.Type={AD_BREAK_READY:"adBreakReady",AD_BUFFERING:"adBuffering",AD_CAN_PLAY:"adCanPlay",AD_METADATA:"adMetadata",AD_PROGRESS:"adProgress",ALL_ADS_COMPLETED:"allAdsCompleted",CLICK:"click",COMPLETE:"complete",CONTENT_PAUSE_REQUESTED:"contentPauseRequested",CONTENT_RESUME_REQUESTED:"contentResumeRequested",DURATION_CHANGE:"durationChange",EXPANDED_CHANGED:"expandedChanged",FIRST_QUARTILE:"firstQuartile",IMPRESSION:"impression",INTERACTION:"interaction",LINEAR_CHANGE:"linearChange",LINEAR_CHANGED:"linearChanged",LOADED:"loaded",LOG:"log",MIDPOINT:"midpoint",PAUSED:"pause",RESUMED:"resume",SKIPPABLE_STATE_CHANGED:"skippableStateChanged",SKIPPED:"skip",STARTED:"start",THIRD_QUARTILE:"thirdQuartile",USER_CLOSE:"userClose",VIDEO_CLICKED:"videoClicked",VIDEO_ICON_CLICKED:"videoIconClicked",VIEWABLE_IMPRESSION:"viewable_impression",VOLUME_CHANGED:"volumeChange",VOLUME_MUTED:"mute"};const y=function(e){this.error=e,this.type="adError",this.getError=function(){return this.error},this.getUserRequestContext=function(){return this.error?.userRequestContext?this.error.userRequestContext:{}}};y.Type={AD_ERROR:"adError"};const I=function(){};I.Type={CUSTOM_CONTENT_LOADED:"deprecated-event"};const R=function(){};R.CreativeType={ALL:"All",FLASH:"Flash",IMAGE:"Image"},R.ResourceType={ALL:"All",HTML:"Html",IFRAME:"IFrame",STATIC:"Static"},R.SizeCriteria={IGNORE:"IgnoreSize",SELECT_EXACT_MATCH:"SelectExactMatch",SELECT_NEAR_MATCH:"SelectNearMatch"};const S=function(){};S.prototype={getCuePoints:()=>[],getAdIdRegistry:()=>"",getAdIdValue:()=>""};const D=t;Object.assign(s,{AdCuePoints:S,AdDisplayContainer:n,AdError:C,AdErrorEvent:y,AdEvent:T,AdPodInfo:l,AdProgressData:D,AdsLoader:E,AdsManager:a,AdsManagerLoadedEvent:d,AdsRenderingSettings:A,AdsRequest:u,CompanionAd:c,CompanionAdSelectionSettings:R,CustomContentLoadedEvent:I,gptProxyInstance:{},ImaSdkSettings:i,OmidAccessMode:{DOMAIN:"domain",FULL:"full",LIMITED:"limited"},OmidVerificationVendor:{1:"OTHER",2:"MOAT",3:"DOUBLEVERIFY",4:"INTEGRAL_AD_SCIENCE",5:"PIXELATE",6:"NIELSEN",7:"COMSCORE",8:"MEETRICS",9:"GOOGLE",OTHER:1,MOAT:2,DOUBLEVERIFY:3,INTEGRAL_AD_SCIENCE:4,PIXELATE:5,NIELSEN:6,COMSCORE:7,MEETRICS:8,GOOGLE:9},settings:new i,UiElements:{AD_ATTRIBUTION:"adAttribution",COUNTDOWN:"countdown"},UniversalAdIdInfo:g,VERSION:e,ViewMode:{FULLSCREEN:"fullscreen",NORMAL:"normal"}}),window.google||(window.google={}),window.google.ima?.dai&&(s.dai=window.google.ima.dai),window.google.ima=s})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString.d7a710ada6cca5832af6d92e62726e74 === e) return; + (()=>{ + var _window_google_ima; + const e = "3.453.0", t = function() {}, n1 = {}, r = function(e) { + const t = document.createElement("div"); + t.style.setProperty("display", "none", "important"), t.style.setProperty("visibility", "collapse", "important"), e && e.appendChild(t); + }; + r.prototype.destroy = t, r.prototype.initialize = t; + const i1 = function() {}; + i1.CompanionBackfillMode = { + ALWAYS: "always", + ON_MASTER_AD: "on_master_ad" + }, i1.VpaidMode = { + DISABLED: 0, + ENABLED: 1, + INSECURE: 2 + }, i1.prototype = { + c: !0, + f: {}, + i: !1, + l: "", + p: "", + r: 0, + t: "", + v: "", + getCompanionBackfill: t, + getDisableCustomPlaybackForIOS10Plus () { + return this.i; + }, + getDisabledFlashAds: ()=>!0, + getFeatureFlags () { + return this.f; + }, + getLocale () { + return this.l; + }, + getNumRedirects () { + return this.r; + }, + getPlayerType () { + return this.t; + }, + getPlayerVersion () { + return this.v; + }, + getPpid () { + return this.p; + }, + getVpaidMode () { + return this.C; + }, + isCookiesEnabled () { + return this.c; + }, + isVpaidAdapter () { + return this.M; + }, + setCompanionBackfill: t, + setAutoPlayAdBreaks (e) { + this.K = e; + }, + setCookiesEnabled (e) { + this.c = !!e; + }, + setDisableCustomPlaybackForIOS10Plus (e) { + this.i = !!e; + }, + setDisableFlashAds: t, + setFeatureFlags (e) { + this.f = !!e; + }, + setIsVpaidAdapter (e) { + this.M = e; + }, + setLocale (e) { + this.l = !!e; + }, + setNumRedirects (e) { + this.r = !!e; + }, + setPageCorrelator (e) { + this.R = e; + }, + setPlayerType (e) { + this.t = !!e; + }, + setPlayerVersion (e) { + this.v = !!e; + }, + setPpid (e) { + this.p = !!e; + }, + setVpaidMode (e) { + this.C = e; + }, + setSessionId: t, + setStreamCorrelator: t, + setVpaidAllowed: t, + CompanionBackfillMode: { + ALWAYS: "always", + ON_MASTER_AD: "on_master_ad" + }, + VpaidMode: { + DISABLED: 0, + ENABLED: 1, + INSECURE: 2 + } + }; + const s = function() { + this.listeners = new Map, this._dispatch = function(e) { + let t = this.listeners.get(e.type); + t = t ? t.values() : []; + for (const n1 of Array.from(t))try { + n1(e); + } catch (e) { + console.trace(e); + } + }, this.addEventListener = function(e, t, n1, r) { + Array.isArray(e) || (e = [ + e + ]); + for(let n1 = 0; n1 < e.length; n1 += 1){ + const i1 = e[n1]; + this.listeners.has(i1) || this.listeners.set(i1, new Map), this.listeners.get(i1).set(t, t.bind(r || this)); + } + }, this.removeEventListener = function(e, t) { + Array.isArray(e) || (e = [ + e + ]); + for(let n1 = 0; n1 < e.length; n1 += 1){ + var _this_listeners_get; + const r = e[n1]; + (_this_listeners_get = this.listeners.get(r)) === null || _this_listeners_get === void 0 ? void 0 : _this_listeners_get.delete(t); + } + }; + }, o = new s; + o.volume = 1, o.collapse = t, o.configureAdsManager = t, o.destroy = t, o.discardAdBreak = t, o.expand = t, o.focus = t, o.getAdSkippableState = ()=>!1, o.getCuePoints = ()=>[ + 0 + ], o.getCurrentAd = ()=>h, o.getCurrentAdCuePoints = ()=>[], o.getRemainingTime = ()=>0, o.getVolume = function() { + return this.volume; + }, o.init = t, o.isCustomClickTrackingUsed = ()=>!1, o.isCustomPlaybackUsed = ()=>!1, o.pause = t, o.requestNextAdBreak = t, o.resize = t, o.resume = t, o.setVolume = function(e) { + this.volume = e; + }, o.skip = t, o.start = function() { + for (const e of [ + T.Type.LOADED, + T.Type.STARTED, + T.Type.CONTENT_RESUME_REQUESTED, + T.Type.AD_BUFFERING, + T.Type.FIRST_QUARTILE, + T.Type.MIDPOINT, + T.Type.THIRD_QUARTILE, + T.Type.COMPLETE, + T.Type.ALL_ADS_COMPLETED + ])try { + this._dispatch(new n1.AdEvent(e)); + } catch (e) { + console.trace(e); + } + }, o.stop = t, o.updateAdsRenderingSettings = t; + const a = Object.create(o), d = function(e, t, n1) { + this.type = e, this.adsRequest = t, this.userRequestContext = n1; + }; + d.prototype = { + getAdsManager: ()=>a, + getUserRequestContext () { + return this.userRequestContext ? this.userRequestContext : {}; + } + }, d.Type = { + ADS_MANAGER_LOADED: "adsManagerLoaded" + }; + const u = s; + u.prototype.settings = new i1, u.prototype.contentComplete = t, u.prototype.destroy = t, u.prototype.getSettings = function() { + return this.settings; + }, u.prototype.getVersion = ()=>e, u.prototype.requestAds = function(e, t) { + requestAnimationFrame(()=>{ + const { ADS_MANAGER_LOADED: r } = d.Type, i1 = new n1.AdsManagerLoadedEvent(r, e, t); + this._dispatch(i1); + }); + const r = new n1.AdError("adPlayError", 1205, 1205, "The browser prevented playback initiated without user interaction.", e, t); + requestAnimationFrame(()=>{ + this._dispatch(new n1.AdErrorEvent(r)); + }); + }; + const E = t, A = function() {}; + A.prototype = { + setAdWillAutoPlay: t, + setAdWillPlayMuted: t, + setContinuousPlayback: t + }; + const l = function() {}; + l.prototype = { + getAdPosition: ()=>1, + getIsBumper: ()=>!1, + getMaxDuration: ()=>-1, + getPodIndex: ()=>1, + getTimeOffset: ()=>0, + getTotalAds: ()=>1 + }; + const g = function() {}; + g.prototype.getAdIdRegistry = function() { + return ""; + }, g.prototype.getAdIsValue = function() { + return ""; + }; + const c = function() {}; + c.prototype = { + pi: new l, + getAdId: ()=>"", + getAdPodInfo () { + return this.pi; + }, + getAdSystem: ()=>"", + getAdvertiserName: ()=>"", + getApiFramework: ()=>null, + getCompanionAds: ()=>[], + getContentType: ()=>"", + getCreativeAdId: ()=>"", + getDealId: ()=>"", + getDescription: ()=>"", + getDuration: ()=>8.5, + getHeight: ()=>0, + getMediaUrl: ()=>null, + getMinSuggestedDuration: ()=>-2, + getSkipTimeOffset: ()=>-1, + getSurveyUrl: ()=>null, + getTitle: ()=>"", + getTraffickingParametersString: ()=>"", + getUiElements: ()=>[ + "" + ], + getUniversalAdIdRegistry: ()=>"unknown", + getUniversalAdIds: ()=>[ + new g + ], + getUniversalAdIdValue: ()=>"unknown", + getVastMediaBitrate: ()=>0, + getVastMediaHeight: ()=>0, + getVastMediaWidth: ()=>0, + getWidth: ()=>0, + getWrapperAdIds: ()=>[ + "" + ], + getWrapperAdSystems: ()=>[ + "" + ], + getWrapperCreativeIds: ()=>[ + "" + ], + isLinear: ()=>!0, + isSkippable: ()=>!0 + }; + const p = function() {}; + p.prototype = { + getAdSlotId: ()=>"", + getContent: ()=>"", + getContentType: ()=>"", + getHeight: ()=>1, + getWidth: ()=>1 + }; + const C = function(e, t, n1, r, i1, s) { + this.errorCode = t, this.message = r, this.type = e, this.adsRequest = i1, this.userRequestContext = s, this.getErrorCode = function() { + return this.errorCode; + }, this.getInnerError = function() { + return null; + }, this.getMessage = function() { + return this.message; + }, this.getType = function() { + return this.type; + }, this.getVastErrorCode = function() { + return this.vastErrorCode; + }, this.toString = function() { + return `AdError ${this.errorCode}: ${this.message}`; + }; + }; + C.ErrorCode = {}, C.Type = {}; + const h = (()=>{ + try { + var _e_getPlayer_div, _e_getPlayer; + for (const e of Object.values(window.vidible._getContexts()))if ((_e_getPlayer = e.getPlayer()) === null || _e_getPlayer === void 0 ? void 0 : (_e_getPlayer_div = _e_getPlayer.div) === null || _e_getPlayer_div === void 0 ? void 0 : _e_getPlayer_div.innerHTML.includes("www.engadget.com")) return !0; + } catch (e) {} + return !1; + })() ? void 0 : new c, T = function(e) { + this.type = e; + }; + T.prototype = { + getAd: ()=>h, + getAdData: ()=>{} + }, T.Type = { + AD_BREAK_READY: "adBreakReady", + AD_BUFFERING: "adBuffering", + AD_CAN_PLAY: "adCanPlay", + AD_METADATA: "adMetadata", + AD_PROGRESS: "adProgress", + ALL_ADS_COMPLETED: "allAdsCompleted", + CLICK: "click", + COMPLETE: "complete", + CONTENT_PAUSE_REQUESTED: "contentPauseRequested", + CONTENT_RESUME_REQUESTED: "contentResumeRequested", + DURATION_CHANGE: "durationChange", + EXPANDED_CHANGED: "expandedChanged", + FIRST_QUARTILE: "firstQuartile", + IMPRESSION: "impression", + INTERACTION: "interaction", + LINEAR_CHANGE: "linearChange", + LINEAR_CHANGED: "linearChanged", + LOADED: "loaded", + LOG: "log", + MIDPOINT: "midpoint", + PAUSED: "pause", + RESUMED: "resume", + SKIPPABLE_STATE_CHANGED: "skippableStateChanged", + SKIPPED: "skip", + STARTED: "start", + THIRD_QUARTILE: "thirdQuartile", + USER_CLOSE: "userClose", + VIDEO_CLICKED: "videoClicked", + VIDEO_ICON_CLICKED: "videoIconClicked", + VIEWABLE_IMPRESSION: "viewable_impression", + VOLUME_CHANGED: "volumeChange", + VOLUME_MUTED: "mute" + }; + const y = function(e) { + this.error = e, this.type = "adError", this.getError = function() { + return this.error; + }, this.getUserRequestContext = function() { + var _this_error; + return ((_this_error = this.error) === null || _this_error === void 0 ? void 0 : _this_error.userRequestContext) ? this.error.userRequestContext : {}; + }; + }; + y.Type = { + AD_ERROR: "adError" + }; + const I = function() {}; + I.Type = { + CUSTOM_CONTENT_LOADED: "deprecated-event" + }; + const R = function() {}; + R.CreativeType = { + ALL: "All", + FLASH: "Flash", + IMAGE: "Image" + }, R.ResourceType = { + ALL: "All", + HTML: "Html", + IFRAME: "IFrame", + STATIC: "Static" + }, R.SizeCriteria = { + IGNORE: "IgnoreSize", + SELECT_EXACT_MATCH: "SelectExactMatch", + SELECT_NEAR_MATCH: "SelectNearMatch" + }; + const S = function() {}; + S.prototype = { + getCuePoints: ()=>[], + getAdIdRegistry: ()=>"", + getAdIdValue: ()=>"" + }; + const D = t; + Object.assign(n1, { + AdCuePoints: S, + AdDisplayContainer: r, + AdError: C, + AdErrorEvent: y, + AdEvent: T, + AdPodInfo: l, + AdProgressData: D, + AdsLoader: u, + AdsManager: a, + AdsManagerLoadedEvent: d, + AdsRenderingSettings: E, + AdsRequest: A, + CompanionAd: p, + CompanionAdSelectionSettings: R, + CustomContentLoadedEvent: I, + gptProxyInstance: {}, + ImaSdkSettings: i1, + OmidAccessMode: { + DOMAIN: "domain", + FULL: "full", + LIMITED: "limited" + }, + OmidVerificationVendor: { + 1: "OTHER", + 2: "MOAT", + 3: "DOUBLEVERIFY", + 4: "INTEGRAL_AD_SCIENCE", + 5: "PIXELATE", + 6: "NIELSEN", + 7: "COMSCORE", + 8: "MEETRICS", + 9: "GOOGLE", + OTHER: 1, + MOAT: 2, + DOUBLEVERIFY: 3, + INTEGRAL_AD_SCIENCE: 4, + PIXELATE: 5, + NIELSEN: 6, + COMSCORE: 7, + MEETRICS: 8, + GOOGLE: 9 + }, + settings: new i1, + UiElements: { + AD_ATTRIBUTION: "adAttribution", + COUNTDOWN: "countdown" + }, + UniversalAdIdInfo: g, + VERSION: e, + ViewMode: { + FULLSCREEN: "fullscreen", + NORMAL: "normal" + } + }), window.google || (window.google = {}), ((_window_google_ima = window.google.ima) === null || _window_google_ima === void 0 ? void 0 : _window_google_ima.dai) && (n1.dai = window.google.ima.dai), window.google.ima = n1; + })(); + Object.defineProperty(Window.prototype.toString, "d7a710ada6cca5832af6d92e62726e74", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "d7a710ada6cca5832af6d92e62726e74" due to: ' + e); + } + }, + '(()=>{const t=[];t.push=function(t){"object"==typeof t&&t.events&&Object.values(t.events).forEach((t=>{if("function"==typeof t)try{t()}catch(t){}}))},window.AdBridg={cmd:t}})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString.f6311be2c1ed023feeb00c3d41dea489 === e) return; + (()=>{ + const e = []; + e.push = function(e) { + "object" == typeof e && e.events && Object.values(e.events).forEach((e)=>{ + if ("function" == typeof e) try { + e(); + } catch (e) {} + }); + }, window.AdBridg = { + cmd: e + }; + })(); + Object.defineProperty(Window.prototype.toString, "f6311be2c1ed023feeb00c3d41dea489", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "f6311be2c1ed023feeb00c3d41dea489" due to: ' + e); + } + }, + '(()=>{let t=window?.__iasPET?.queue;Array.isArray(t)||(t=[]);const s=JSON.stringify({brandSafety:{},slots:{}});function e(t){try{t?.dataHandler?.(s)}catch(t){}}for(t.push=e,window.__iasPET={VERSION:"1.16.18",queue:t,sessionId:"",setTargetingForAppNexus(){},setTargetingForGPT(){},start(){}};t.length;)e(t.shift())})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString.baf394a72c20f8e6c3a0adc04c9df104 === e) return; + (()=>{ + var _window___iasPET, _window; + let e = (_window = window) === null || _window === void 0 ? void 0 : (_window___iasPET = _window.__iasPET) === null || _window___iasPET === void 0 ? void 0 : _window___iasPET.queue; + Array.isArray(e) || (e = []); + const t = JSON.stringify({ + brandSafety: {}, + slots: {} + }); + function r(e) { + try { + var _e_dataHandler; + e === null || e === void 0 ? void 0 : (_e_dataHandler = e.dataHandler) === null || _e_dataHandler === void 0 ? void 0 : _e_dataHandler.call(e, t); + } catch (e) {} + } + for(e.push = r, window.__iasPET = { + VERSION: "1.16.18", + queue: e, + sessionId: "", + setTargetingForAppNexus () {}, + setTargetingForGPT () {}, + start () {} + }; e.length;)r(e.shift()); + })(); + Object.defineProperty(Window.prototype.toString, "baf394a72c20f8e6c3a0adc04c9df104", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "baf394a72c20f8e6c3a0adc04c9df104" due to: ' + e); + } + }, + '(()=>{window.XMLHttpRequest.prototype.open=new Proxy(window.XMLHttpRequest.prototype.open,{apply:async(a,b,c)=>{const d=c[1];if("string"!=typeof d||0===d.length)return Reflect.apply(a,b,c);const e=/topaz\\.dai\\.viacomcbs\\.digital\\/ondemand\\/hls\\/.*\\.m3u8/.test(d),f=/dai\\.google\\.com\\/ondemand\\/v.*\\/hls\\/content\\/.*\\/vid\\/.*\\/stream/.test(d);return(e||f)&&b.addEventListener("readystatechange",function(){if(4===b.readyState){const a=b.response;if(Object.defineProperty(b,"response",{writable:!0}),Object.defineProperty(b,"responseText",{writable:!0}),f&&(null!==a&&void 0!==a&&a.ad_breaks&&(a.ad_breaks=[]),null!==a&&void 0!==a&&a.apple_tv&&(a.apple_tv={})),e){const c=a.replaceAll(/#EXTINF:(\\d|\\d\\.\\d+)\\,\\nhttps:\\/\\/redirector\\.googlevideo\\.com\\/videoplayback\\?[\\s\\S]*?&source=dclk_video_ads&[\\s\\S]*?\\n/g,"");b.response=c,b.responseText=c}}}),Reflect.apply(a,b,c)}})})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString.a8c6f78e34ee76b7ae128e62027dec2f === e) return; + window.XMLHttpRequest.prototype.open = new Proxy(window.XMLHttpRequest.prototype.open, { + apply: async (e, t, o)=>{ + const n1 = o[1]; + if ("string" != typeof n1 || 0 === n1.length) return Reflect.apply(e, t, o); + const r = /topaz\.dai\.viacomcbs\.digital\/ondemand\/hls\/.*\.m3u8/.test(n1), a = /dai\.google\.com\/ondemand\/v.*\/hls\/content\/.*\/vid\/.*\/stream/.test(n1); + return (r || a) && t.addEventListener("readystatechange", function() { + if (4 === t.readyState) { + const e = t.response; + if (Object.defineProperty(t, "response", { + writable: !0 + }), Object.defineProperty(t, "responseText", { + writable: !0 + }), a && (null != e && e.ad_breaks && (e.ad_breaks = []), null != e && e.apple_tv && (e.apple_tv = {})), r) { + const o = e.replaceAll(/#EXTINF:(\d|\d\.\d+)\,\nhttps:\/\/redirector\.googlevideo\.com\/videoplayback\?[\s\S]*?&source=dclk_video_ads&[\s\S]*?\n/g, ""); + t.response = o, t.responseText = o; + } + } + }), Reflect.apply(e, t, o); + } + }); + Object.defineProperty(Window.prototype.toString, "a8c6f78e34ee76b7ae128e62027dec2f", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "a8c6f78e34ee76b7ae128e62027dec2f" due to: ' + e); + } + }, + "(function(){window.twttr={conversion:{trackPid:function(){}}}})();": ()=>{ + try { + const e = "done"; + if (Window.prototype.toString.b207994a134acba69e58503a5393b31a === e) return; + window.twttr = { + conversion: { + trackPid: function() {} + } + }; + Object.defineProperty(Window.prototype.toString, "b207994a134acba69e58503a5393b31a", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "b207994a134acba69e58503a5393b31a" due to: ' + e); + } + }, + '(()=>{const a=window.fetch,b={apply:async(b,c,d)=>{const e=d[0]instanceof Request?d[0].url:d[0];if("string"!=typeof e||0===e.length)return Reflect.apply(b,c,d);if(e.includes("uplynk.com/")&&e.includes(".m3u8")){const b=await a(...d);let c=await b.text();return c=c.replaceAll(/#UPLYNK-SEGMENT: \\S*\\,ad\\s[\\s\\S]+?((#UPLYNK-SEGMENT: \\S+\\,segment)|(#EXT-X-ENDLIST))/g,"$1"),new Response(c)}return Reflect.apply(b,c,d)}};try{window.fetch=new Proxy(window.fetch,b)}catch(a){}})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString.f2cc35b643de55322eb7ef4e3811aa59 === e) return; + (()=>{ + const e = window.fetch, t = { + apply: async (t, n1, r)=>{ + const c = r[0] instanceof Request ? r[0].url : r[0]; + if ("string" != typeof c || 0 === c.length) return Reflect.apply(t, n1, r); + if (c.includes("uplynk.com/") && c.includes(".m3u8")) { + const t = await e(...r); + let n1 = await t.text(); + return n1 = n1.replaceAll(/#UPLYNK-SEGMENT: \S*\,ad\s[\s\S]+?((#UPLYNK-SEGMENT: \S+\,segment)|(#EXT-X-ENDLIST))/g, "$1"), new Response(n1); + } + return Reflect.apply(t, n1, r); + } + }; + try { + window.fetch = new Proxy(window.fetch, t); + } catch (e) {} + })(); + Object.defineProperty(Window.prototype.toString, "f2cc35b643de55322eb7ef4e3811aa59", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "f2cc35b643de55322eb7ef4e3811aa59" due to: ' + e); + } + }, + '(()=>{window.XMLHttpRequest.prototype.open=new Proxy(window.XMLHttpRequest.prototype.open,{apply:async(a,b,c)=>{const d=c[1];return"string"!=typeof d||0===d.length?Reflect.apply(a,b,c):(d.match(/pubads\\.g\\.doubleclick.net\\/ondemand\\/hls\\/.*\\.m3u8/)&&b.addEventListener("readystatechange",function(){if(4===b.readyState){const a=b.response;Object.defineProperty(b,"response",{writable:!0}),Object.defineProperty(b,"responseText",{writable:!0});const c=a.replaceAll(/#EXTINF:(\\d|\\d\\.\\d+)\\,\\nhttps:\\/\\/redirector\\.googlevideo\\.com\\/videoplayback\\?[\\s\\S]*?&source=dclk_video_ads&[\\s\\S]*?\\n/g,"");b.response=c,b.responseText=c}}),Reflect.apply(a,b,c))}})})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["0664f2a8c7617fced3e7790a26b1c7f8"] === e) return; + window.XMLHttpRequest.prototype.open = new Proxy(window.XMLHttpRequest.prototype.open, { + apply: async (e, t, o)=>{ + const r = o[1]; + return "string" != typeof r || 0 === r.length || r.match(/pubads\.g\.doubleclick.net\/ondemand\/hls\/.*\.m3u8/) && t.addEventListener("readystatechange", function() { + if (4 === t.readyState) { + const e = t.response; + Object.defineProperty(t, "response", { + writable: !0 + }), Object.defineProperty(t, "responseText", { + writable: !0 + }); + const o = e.replaceAll(/#EXTINF:(\d|\d\.\d+)\,\nhttps:\/\/redirector\.googlevideo\.com\/videoplayback\?[\s\S]*?&source=dclk_video_ads&[\s\S]*?\n/g, ""); + t.response = o, t.responseText = o; + } + }), Reflect.apply(e, t, o); + } + }); + Object.defineProperty(Window.prototype.toString, "0664f2a8c7617fced3e7790a26b1c7f8", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "0664f2a8c7617fced3e7790a26b1c7f8" due to: ' + e); + } + }, + '(()=>{const a=window.fetch;window.fetch=new Proxy(window.fetch,{apply:async(b,c,d)=>{const e=d[0];if("string"!=typeof e||0===e.length)return Reflect.apply(b,c,d);if(e.match(/pubads\\.g\\.doubleclick\\.net\\/ondemand\\/.*\\/content\\/.*\\/vid\\/.*\\/streams\\/.*\\/manifest\\.mpd|pubads\\.g\\.doubleclick.net\\/ondemand\\/hls\\/.*\\.m3u8/)){const b=await a(...d);let c=await b.text();return c=c.replaceAll(/{ + try { + const e = "done"; + if (Window.prototype.toString.cce15678b7fd141ec70a16bc1f01aa96 === e) return; + (()=>{ + const e = window.fetch; + window.fetch = new Proxy(window.fetch, { + apply: async (t, o, c)=>{ + const n1 = c[0]; + if ("string" != typeof n1 || 0 === n1.length) return Reflect.apply(t, o, c); + if (n1.match(/pubads\.g\.doubleclick\.net\/ondemand\/.*\/content\/.*\/vid\/.*\/streams\/.*\/manifest\.mpd|pubads\.g\.doubleclick.net\/ondemand\/hls\/.*\.m3u8/)) { + const t = await e(...c); + let o = await t.text(); + return o = o.replaceAll(/{window.FAVE=window.FAVE||{};const s={set:(s,e,a,n)=>{if(s?.settings?.ads?.ssai?.prod?.clips?.enabled&&(s.settings.ads.ssai.prod.clips.enabled=!1),s?.settings?.ads?.ssai?.prod?.liveAuth?.enabled&&(s.settings.ads.ssai.prod.liveAuth.enabled=!1),s?.settings?.ads?.ssai?.prod?.liveUnauth?.enabled&&(s.settings.ads.ssai.prod.liveUnauth.enabled=!1),s?.player?.instances)for(var i of Object.keys(s.player.instances))s.player.instances[i]?.configs?.ads?.ssai?.prod?.clips?.enabled&&(s.player.instances[i].configs.ads.ssai.prod.clips.enabled=!1),s.player.instances[i]?.configs?.ads?.ssai?.prod?.liveAuth?.enabled&&(s.player.instances[i].configs.ads.ssai.prod.liveAuth.enabled=!1),s.player.instances[i]?.configs?.ads?.ssai?.prod?.liveUnauth?.enabled&&(s.player.instances[i].configs.ads.ssai.prod.liveUnauth.enabled=!1);return Reflect.set(s,e,a,n)}};window.FAVE=new Proxy(window.FAVE,s)})();": ()=>{ + try { + const e = "done"; + if (Window.prototype.toString.db4626a48a0140f6bfa4180ae874f6ce === e) return; + (()=>{ + window.FAVE = window.FAVE || {}; + const e = { + set: (e, s, a, n1)=>{ + var _e_settings_ads_ssai_prod_clips, _e_settings_ads_ssai_prod, _e_settings_ads_ssai, _e_settings_ads, _e_settings, _e_settings_ads_ssai_prod_liveAuth, _e_settings_ads_ssai_prod1, _e_settings_ads_ssai1, _e_settings_ads1, _e_settings1, _e_settings_ads_ssai_prod_liveUnauth, _e_settings_ads_ssai_prod2, _e_settings_ads_ssai2, _e_settings_ads2, _e_settings2, _e_player, _e_player_instances_i_configs_ads_ssai_prod_clips, _e_player_instances_i_configs_ads_ssai_prod, _e_player_instances_i_configs_ads_ssai, _e_player_instances_i_configs_ads, _e_player_instances_i_configs, _e_player_instances_i, _e_player_instances_i_configs_ads_ssai_prod_liveAuth, _e_player_instances_i_configs_ads_ssai_prod1, _e_player_instances_i_configs_ads_ssai1, _e_player_instances_i_configs_ads1, _e_player_instances_i_configs1, _e_player_instances_i1, _e_player_instances_i_configs_ads_ssai_prod_liveUnauth, _e_player_instances_i_configs_ads_ssai_prod2, _e_player_instances_i_configs_ads_ssai2, _e_player_instances_i_configs_ads2, _e_player_instances_i_configs2, _e_player_instances_i2; + if ((e === null || e === void 0 ? void 0 : (_e_settings = e.settings) === null || _e_settings === void 0 ? void 0 : (_e_settings_ads = _e_settings.ads) === null || _e_settings_ads === void 0 ? void 0 : (_e_settings_ads_ssai = _e_settings_ads.ssai) === null || _e_settings_ads_ssai === void 0 ? void 0 : (_e_settings_ads_ssai_prod = _e_settings_ads_ssai.prod) === null || _e_settings_ads_ssai_prod === void 0 ? void 0 : (_e_settings_ads_ssai_prod_clips = _e_settings_ads_ssai_prod.clips) === null || _e_settings_ads_ssai_prod_clips === void 0 ? void 0 : _e_settings_ads_ssai_prod_clips.enabled) && (e.settings.ads.ssai.prod.clips.enabled = !1), (e === null || e === void 0 ? void 0 : (_e_settings1 = e.settings) === null || _e_settings1 === void 0 ? void 0 : (_e_settings_ads1 = _e_settings1.ads) === null || _e_settings_ads1 === void 0 ? void 0 : (_e_settings_ads_ssai1 = _e_settings_ads1.ssai) === null || _e_settings_ads_ssai1 === void 0 ? void 0 : (_e_settings_ads_ssai_prod1 = _e_settings_ads_ssai1.prod) === null || _e_settings_ads_ssai_prod1 === void 0 ? void 0 : (_e_settings_ads_ssai_prod_liveAuth = _e_settings_ads_ssai_prod1.liveAuth) === null || _e_settings_ads_ssai_prod_liveAuth === void 0 ? void 0 : _e_settings_ads_ssai_prod_liveAuth.enabled) && (e.settings.ads.ssai.prod.liveAuth.enabled = !1), (e === null || e === void 0 ? void 0 : (_e_settings2 = e.settings) === null || _e_settings2 === void 0 ? void 0 : (_e_settings_ads2 = _e_settings2.ads) === null || _e_settings_ads2 === void 0 ? void 0 : (_e_settings_ads_ssai2 = _e_settings_ads2.ssai) === null || _e_settings_ads_ssai2 === void 0 ? void 0 : (_e_settings_ads_ssai_prod2 = _e_settings_ads_ssai2.prod) === null || _e_settings_ads_ssai_prod2 === void 0 ? void 0 : (_e_settings_ads_ssai_prod_liveUnauth = _e_settings_ads_ssai_prod2.liveUnauth) === null || _e_settings_ads_ssai_prod_liveUnauth === void 0 ? void 0 : _e_settings_ads_ssai_prod_liveUnauth.enabled) && (e.settings.ads.ssai.prod.liveUnauth.enabled = !1), e === null || e === void 0 ? void 0 : (_e_player = e.player) === null || _e_player === void 0 ? void 0 : _e_player.instances) for (var i1 of Object.keys(e.player.instances))((_e_player_instances_i = e.player.instances[i1]) === null || _e_player_instances_i === void 0 ? void 0 : (_e_player_instances_i_configs = _e_player_instances_i.configs) === null || _e_player_instances_i_configs === void 0 ? void 0 : (_e_player_instances_i_configs_ads = _e_player_instances_i_configs.ads) === null || _e_player_instances_i_configs_ads === void 0 ? void 0 : (_e_player_instances_i_configs_ads_ssai = _e_player_instances_i_configs_ads.ssai) === null || _e_player_instances_i_configs_ads_ssai === void 0 ? void 0 : (_e_player_instances_i_configs_ads_ssai_prod = _e_player_instances_i_configs_ads_ssai.prod) === null || _e_player_instances_i_configs_ads_ssai_prod === void 0 ? void 0 : (_e_player_instances_i_configs_ads_ssai_prod_clips = _e_player_instances_i_configs_ads_ssai_prod.clips) === null || _e_player_instances_i_configs_ads_ssai_prod_clips === void 0 ? void 0 : _e_player_instances_i_configs_ads_ssai_prod_clips.enabled) && (e.player.instances[i1].configs.ads.ssai.prod.clips.enabled = !1), ((_e_player_instances_i1 = e.player.instances[i1]) === null || _e_player_instances_i1 === void 0 ? void 0 : (_e_player_instances_i_configs1 = _e_player_instances_i1.configs) === null || _e_player_instances_i_configs1 === void 0 ? void 0 : (_e_player_instances_i_configs_ads1 = _e_player_instances_i_configs1.ads) === null || _e_player_instances_i_configs_ads1 === void 0 ? void 0 : (_e_player_instances_i_configs_ads_ssai1 = _e_player_instances_i_configs_ads1.ssai) === null || _e_player_instances_i_configs_ads_ssai1 === void 0 ? void 0 : (_e_player_instances_i_configs_ads_ssai_prod1 = _e_player_instances_i_configs_ads_ssai1.prod) === null || _e_player_instances_i_configs_ads_ssai_prod1 === void 0 ? void 0 : (_e_player_instances_i_configs_ads_ssai_prod_liveAuth = _e_player_instances_i_configs_ads_ssai_prod1.liveAuth) === null || _e_player_instances_i_configs_ads_ssai_prod_liveAuth === void 0 ? void 0 : _e_player_instances_i_configs_ads_ssai_prod_liveAuth.enabled) && (e.player.instances[i1].configs.ads.ssai.prod.liveAuth.enabled = !1), ((_e_player_instances_i2 = e.player.instances[i1]) === null || _e_player_instances_i2 === void 0 ? void 0 : (_e_player_instances_i_configs2 = _e_player_instances_i2.configs) === null || _e_player_instances_i_configs2 === void 0 ? void 0 : (_e_player_instances_i_configs_ads2 = _e_player_instances_i_configs2.ads) === null || _e_player_instances_i_configs_ads2 === void 0 ? void 0 : (_e_player_instances_i_configs_ads_ssai2 = _e_player_instances_i_configs_ads2.ssai) === null || _e_player_instances_i_configs_ads_ssai2 === void 0 ? void 0 : (_e_player_instances_i_configs_ads_ssai_prod2 = _e_player_instances_i_configs_ads_ssai2.prod) === null || _e_player_instances_i_configs_ads_ssai_prod2 === void 0 ? void 0 : (_e_player_instances_i_configs_ads_ssai_prod_liveUnauth = _e_player_instances_i_configs_ads_ssai_prod2.liveUnauth) === null || _e_player_instances_i_configs_ads_ssai_prod_liveUnauth === void 0 ? void 0 : _e_player_instances_i_configs_ads_ssai_prod_liveUnauth.enabled) && (e.player.instances[i1].configs.ads.ssai.prod.liveUnauth.enabled = !1); + return Reflect.set(e, s, a, n1); + } + }; + window.FAVE = new Proxy(window.FAVE, e); + })(); + Object.defineProperty(Window.prototype.toString, "db4626a48a0140f6bfa4180ae874f6ce", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "db4626a48a0140f6bfa4180ae874f6ce" due to: ' + e); + } + }, + "(()=>{window.PostRelease={Start(){}}})();": ()=>{ + try { + const e = "done"; + if (Window.prototype.toString.f442d027f2647247aaa89f75941826f0 === e) return; + window.PostRelease = { + Start () {} + }; + Object.defineProperty(Window.prototype.toString, "f442d027f2647247aaa89f75941826f0", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "f442d027f2647247aaa89f75941826f0" due to: ' + e); + } + }, + '(()=>{window.com_adswizz_synchro_decorateUrl=function(a){if("string"===typeof a&&a.startsWith("http"))return a}})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["2b3b012135adb550eb133e7becf3e060"] === e) return; + window.com_adswizz_synchro_decorateUrl = function(e) { + if ("string" == typeof e && e.startsWith("http")) return e; + }; + Object.defineProperty(Window.prototype.toString, "2b3b012135adb550eb133e7becf3e060", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "2b3b012135adb550eb133e7becf3e060" due to: ' + e); + } + }, + '(()=>{window.XMLHttpRequest.prototype.open=new Proxy(window.XMLHttpRequest.prototype.open,{apply:async(a,b,c)=>{const d=c[1];return"string"!=typeof d||0===d.length?Reflect.apply(a,b,c):(d.match(/manifest\\..*\\.theplatform\\.com\\/.*\\/.*\\.m3u8\\?.*|manifest\\..*\\.theplatform\\.com\\/.*\\/*\\.meta.*/)&&b.addEventListener("readystatechange",function(){if(4===b.readyState){const a=b.response;Object.defineProperty(b,"response",{writable:!0}),Object.defineProperty(b,"responseText",{writable:!0});const c=a.replaceAll(/#EXTINF:.*\\n.*tvessaiprod\\.nbcuni\\.com\\/video\\/[\\s\\S]*?#EXT-X-DISCONTINUITY|#EXT-X-VMAP-AD-BREAK[\\s\\S]*?#EXT-X-ENDLIST/g,"");b.response=c,b.responseText=c}}),Reflect.apply(a,b,c))}})})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["6f3d40e53e83daab7ecb0b1ff3b3d011"] === e) return; + window.XMLHttpRequest.prototype.open = new Proxy(window.XMLHttpRequest.prototype.open, { + apply: async (e, t, o)=>{ + const r = o[1]; + return "string" != typeof r || 0 === r.length || r.match(/manifest\..*\.theplatform\.com\/.*\/.*\.m3u8\?.*|manifest\..*\.theplatform\.com\/.*\/*\.meta.*/) && t.addEventListener("readystatechange", function() { + if (4 === t.readyState) { + const e = t.response; + Object.defineProperty(t, "response", { + writable: !0 + }), Object.defineProperty(t, "responseText", { + writable: !0 + }); + const o = e.replaceAll(/#EXTINF:.*\n.*tvessaiprod\.nbcuni\.com\/video\/[\s\S]*?#EXT-X-DISCONTINUITY|#EXT-X-VMAP-AD-BREAK[\s\S]*?#EXT-X-ENDLIST/g, ""); + t.response = o, t.responseText = o; + } + }), Reflect.apply(e, t, o); + } + }); + Object.defineProperty(Window.prototype.toString, "6f3d40e53e83daab7ecb0b1ff3b3d011", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "6f3d40e53e83daab7ecb0b1ff3b3d011" due to: ' + e); + } + }, + '(()=>{let e,t=!1;const n=function(){},o=function(t,n){if("function"==typeof n)try{window.KalturaPlayer?n([]):e=n}catch(e){console.error(e)}};let r;Object.defineProperty(window,"PWT",{get:()=>({requestBids:o,generateConfForGPT:o,addKeyValuePairsToGPTSlots:n,generateDFPURL:n}),set(){}}),Object.defineProperty(window,"KalturaPlayer",{get:function(){return r},set:function(n){r=n,!t&&e&&(t=!0,e([]))}})})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString.c8bf49746912973d817a11811377a065 === e) return; + (()=>{ + let e, t = !1; + const r = function() {}, o = function(t, r) { + if ("function" == typeof r) try { + window.KalturaPlayer ? r([]) : e = r; + } catch (e) { + console.error(e); + } + }; + let n1; + Object.defineProperty(window, "PWT", { + get: ()=>({ + requestBids: o, + generateConfForGPT: o, + addKeyValuePairsToGPTSlots: r, + generateDFPURL: r + }), + set () {} + }), Object.defineProperty(window, "KalturaPlayer", { + get: function() { + return n1; + }, + set: function(r) { + n1 = r, !t && e && (t = !0, e([])); + } + }); + })(); + Object.defineProperty(Window.prototype.toString, "c8bf49746912973d817a11811377a065", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "c8bf49746912973d817a11811377a065" due to: ' + e); + } + }, + '(()=>{const a=function(){},b=function(c,a){if("function"==typeof a)try{a([])}catch(a){console.error(a)}};Object.defineProperty(window,"PWT",{value:{requestBids:b,generateConfForGPT:b,addKeyValuePairsToGPTSlots:a,generateDFPURL:a}})})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["7a089dd23e47e252f413e97c2c706704"] === e) return; + (()=>{ + const e = function() {}, o = function(e, o) { + if ("function" == typeof o) try { + o([]); + } catch (o) { + console.error(o); + } + }; + Object.defineProperty(window, "PWT", { + value: { + requestBids: o, + generateConfForGPT: o, + addKeyValuePairsToGPTSlots: e, + generateDFPURL: e + } + }); + })(); + Object.defineProperty(Window.prototype.toString, "7a089dd23e47e252f413e97c2c706704", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "7a089dd23e47e252f413e97c2c706704" due to: ' + e); + } + }, + "(()=>{window.turner_getTransactionId=turner_getGuid=function(){},window.AdFuelUtils={getUMTOCookies(){}}})();": ()=>{ + try { + const e = "done"; + if (Window.prototype.toString.b023e1f40db016717028fe62421a3285 === e) return; + window.turner_getTransactionId = turner_getGuid = function() {}, window.AdFuelUtils = { + getUMTOCookies () {} + }; + Object.defineProperty(Window.prototype.toString, "b023e1f40db016717028fe62421a3285", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "b023e1f40db016717028fe62421a3285" due to: ' + e); + } + }, + '(function(){window.adsbygoogle={loaded:!0,push:function(a){if(null!==a&&a instanceof Object&&"Object"===a.constructor.name)for(let b in a)if("function"==typeof a[b])try{a[b].call()}catch(a){console.error(a)}}}})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["2ba6aeb1954873824c6148e3102a091c"] === e) return; + window.adsbygoogle = { + loaded: !0, + push: function(e) { + if (null !== e && e instanceof Object && "Object" === e.constructor.name) { + for(let o in e)if ("function" == typeof e[o]) try { + e[o].call(); + } catch (e) { + console.error(e); + } + } + } + }; + Object.defineProperty(Window.prototype.toString, "2ba6aeb1954873824c6148e3102a091c", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "2ba6aeb1954873824c6148e3102a091c" due to: ' + e); + } + }, + "(()=>{document.addEventListener('DOMContentLoaded',()=>{setTimeout(function(){(function(){window.AdFuel={queueRegistry(){},destroySlots(){}}})()},500);})})();": ()=>{ + try { + const e = "done"; + if (Window.prototype.toString.d4ca083794994e22dcb36f8fd698d98e === e) return; + document.addEventListener("DOMContentLoaded", ()=>{ + setTimeout(function() { + window.AdFuel = { + queueRegistry () {}, + destroySlots () {} + }; + }, 500); + }); + Object.defineProperty(Window.prototype.toString, "d4ca083794994e22dcb36f8fd698d98e", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "d4ca083794994e22dcb36f8fd698d98e" due to: ' + e); + } + }, + "(function(){var a={setConfig:function(){},aliasBidder:function(){},removeAdUnit:function(){},que:[push=function(){}]};window.pbjs=a})();": ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["0d58ac66c89ef6fa9de7481fe82dcc9b"] === e) return; + !function() { + var e = { + setConfig: function() {}, + aliasBidder: function() {}, + removeAdUnit: function() {}, + que: [ + push = function() {} + ] + }; + window.pbjs = e; + }(); + Object.defineProperty(Window.prototype.toString, "0d58ac66c89ef6fa9de7481fe82dcc9b", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "0d58ac66c89ef6fa9de7481fe82dcc9b" due to: ' + e); + } + }, + "window.addEventListener('DOMContentLoaded', function() { document.body.innerHTML = document.body.innerHTML.replace(/Adverts/g, \"\"); })": ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["3238470ccdeda8472a95e2bbb72a4f2a"] === e) return; + window.addEventListener("DOMContentLoaded", function() { + document.body.innerHTML = document.body.innerHTML.replace(/Adverts/g, ""); + }); + Object.defineProperty(Window.prototype.toString, "3238470ccdeda8472a95e2bbb72a4f2a", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "3238470ccdeda8472a95e2bbb72a4f2a" due to: ' + e); + } + }, + "!function(){window.rTimer=function(){};window.jitaJS={rtk:{refreshAdUnits:function(){}}};}();": ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["642c5e10be75a4087f7ce1326ec9a7ee"] === e) return; + !function() { + window.rTimer = function() {}; + window.jitaJS = { + rtk: { + refreshAdUnits: function() {} + } + }; + }(); + Object.defineProperty(Window.prototype.toString, "642c5e10be75a4087f7ce1326ec9a7ee", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "642c5e10be75a4087f7ce1326ec9a7ee" due to: ' + e); + } + }, + '(()=>{const t=new MutationObserver((t=>{for(let e of t){const t=e.target;if(t?.querySelector?.("div:not([class], [id]):first-child + div:not([class], [id]):not([class], [id]):last-child")){const e=t.querySelector("div:not([class], [id]):last-child"),o=e?.shadowRoot?.querySelector?.("div:not([class], [id]) > div:not([class], [id])")?.textContent?.trim?.()?.toLowerCase?.();if(o&&o.length<20&&o.includes?.("advertisement"))try{e.remove()}catch(t){console.trace(t)}}}})),e={apply:(e,o,s)=>{try{s[0].mode="open"}catch(t){console.error(t)}const c=Reflect.apply(e,o,s);return t.observe(c,{subtree:!0,childList:!0}),c}};window.Element.prototype.attachShadow=new Proxy(window.Element.prototype.attachShadow,e)})();': ()=>{ + try { + const t = "done"; + if (Window.prototype.toString.ad28df58aaf20377983494d5153f190f === t) return; + (()=>{ + const t = new MutationObserver((t)=>{ + for (let e of t){ + var _o_querySelector; + const o = e.target; + if (o === null || o === void 0 ? void 0 : (_o_querySelector = o.querySelector) === null || _o_querySelector === void 0 ? void 0 : _o_querySelector.call(o, "div:not([class], [id]):first-child + div:not([class], [id]):not([class], [id]):last-child")) { + var _e_shadowRoot_querySelector_textContent_trim_toLowerCase, _e_shadowRoot_querySelector_textContent_trim, _e_shadowRoot_querySelector_textContent_trim1, _e_shadowRoot_querySelector_textContent, _e_shadowRoot_querySelector, _e_shadowRoot_querySelector1, _e_shadowRoot, _r_includes; + const e = o.querySelector("div:not([class], [id]):last-child"), r = e === null || e === void 0 ? void 0 : (_e_shadowRoot = e.shadowRoot) === null || _e_shadowRoot === void 0 ? void 0 : (_e_shadowRoot_querySelector1 = _e_shadowRoot.querySelector) === null || _e_shadowRoot_querySelector1 === void 0 ? void 0 : (_e_shadowRoot_querySelector = _e_shadowRoot_querySelector1.call(_e_shadowRoot, "div:not([class], [id]) > div:not([class], [id])")) === null || _e_shadowRoot_querySelector === void 0 ? void 0 : (_e_shadowRoot_querySelector_textContent = _e_shadowRoot_querySelector.textContent) === null || _e_shadowRoot_querySelector_textContent === void 0 ? void 0 : (_e_shadowRoot_querySelector_textContent_trim1 = _e_shadowRoot_querySelector_textContent.trim) === null || _e_shadowRoot_querySelector_textContent_trim1 === void 0 ? void 0 : (_e_shadowRoot_querySelector_textContent_trim = _e_shadowRoot_querySelector_textContent_trim1.call(_e_shadowRoot_querySelector_textContent)) === null || _e_shadowRoot_querySelector_textContent_trim === void 0 ? void 0 : (_e_shadowRoot_querySelector_textContent_trim_toLowerCase = _e_shadowRoot_querySelector_textContent_trim.toLowerCase) === null || _e_shadowRoot_querySelector_textContent_trim_toLowerCase === void 0 ? void 0 : _e_shadowRoot_querySelector_textContent_trim_toLowerCase.call(_e_shadowRoot_querySelector_textContent_trim); + if (r && r.length < 20 && ((_r_includes = r.includes) === null || _r_includes === void 0 ? void 0 : _r_includes.call(r, "advertisement"))) try { + e.remove(); + } catch (t) { + console.trace(t); + } + } + } + }), e = { + apply: (e, o, r)=>{ + try { + r[0].mode = "open"; + } catch (t) { + console.error(t); + } + const n1 = Reflect.apply(e, o, r); + return t.observe(n1, { + subtree: !0, + childList: !0 + }), n1; + } + }; + window.Element.prototype.attachShadow = new Proxy(window.Element.prototype.attachShadow, e); + })(); + Object.defineProperty(Window.prototype.toString, "ad28df58aaf20377983494d5153f190f", { + value: t, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (t) { + console.error('Error executing AG js rule with uniqueId "ad28df58aaf20377983494d5153f190f" due to: ' + t); + } + }, + 'document.cookie="vpn=1; path=/;";': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString.c30e73df868a56abad82ef46aea39100 === e) return; + document.cookie = "vpn=1; path=/;"; + Object.defineProperty(Window.prototype.toString, "c30e73df868a56abad82ef46aea39100", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "c30e73df868a56abad82ef46aea39100" due to: ' + e); + } + }, + "(()=>{document.addEventListener(\"DOMContentLoaded\",(()=>{ if(typeof jQuery) { jQuery('#SearchButtom').unbind('click'); } }));})();": ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["1e2d5574e33a449dcd46c38824d46820"] === e) return; + document.addEventListener("DOMContentLoaded", ()=>{ + jQuery("#SearchButtom").unbind("click"); + }); + Object.defineProperty(Window.prototype.toString, "1e2d5574e33a449dcd46c38824d46820", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "1e2d5574e33a449dcd46c38824d46820" due to: ' + e); + } + }, + '(()=>{document.addEventListener("DOMContentLoaded",(()=>{ if(typeof videofunc) { videofunc(); } }));})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString.c89cf796658574c24a11e4139372f1f6 === e) return; + document.addEventListener("DOMContentLoaded", ()=>{ + videofunc(); + }); + Object.defineProperty(Window.prototype.toString, "c89cf796658574c24a11e4139372f1f6", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "c89cf796658574c24a11e4139372f1f6" due to: ' + e); + } + }, + 'document.cookie="p3006=1; path=/;";': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString.d2d456e85d536f31a032f2a730cbde22 === e) return; + document.cookie = "p3006=1; path=/;"; + Object.defineProperty(Window.prototype.toString, "d2d456e85d536f31a032f2a730cbde22", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "d2d456e85d536f31a032f2a730cbde22" due to: ' + e); + } + }, + 'document.cookie="rpuShownDesktop=1; path=/;";': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["651f3ee34f9ac7a2ac075d8fab9c1c17"] === e) return; + document.cookie = "rpuShownDesktop=1; path=/;"; + Object.defineProperty(Window.prototype.toString, "651f3ee34f9ac7a2ac075d8fab9c1c17", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "651f3ee34f9ac7a2ac075d8fab9c1c17" due to: ' + e); + } + }, + '(()=>{if(!location.href.includes("/embed/")&&!location.href.includes("/file/"))return;const e={get(e,t,r){try{return"disabled"===t&&"function"==typeof e.start?(queueMicrotask((()=>{try{e.start()}catch(e){}})),!0):Reflect.get(e,t,r)}catch(c){return Reflect.get(e,t,r)}}},t={apply:(t,r,c)=>{try{const n=Reflect.apply(t,r,c);if(n&&"object"==typeof n){if((()=>{try{return(new Error).stack||""}catch{return""}})().includes("getVideoAdInstance"))return new Proxy(n,e)}return n}catch(e){return Reflect.apply(t,r,c)}}};window.Object.create=new Proxy(window.Object.create,t)})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["08ac4125fe79ad45be931eeed20c8e89"] === e) return; + (()=>{ + if (!location.href.includes("/embed/") && !location.href.includes("/file/")) return; + const e = { + get (e, t, r) { + try { + return "disabled" === t && "function" == typeof e.start ? (queueMicrotask(()=>{ + try { + e.start(); + } catch (e) {} + }), !0) : Reflect.get(e, t, r); + } catch (c) { + return Reflect.get(e, t, r); + } + } + }, t = { + apply: (t, r, c)=>{ + try { + const n1 = Reflect.apply(t, r, c); + return n1 && "object" == typeof n1 && (()=>{ + try { + return (new Error).stack || ""; + } catch { + return ""; + } + })().includes("getVideoAdInstance") ? new Proxy(n1, e) : n1; + } catch (e) { + return Reflect.apply(t, r, c); + } + } + }; + window.Object.create = new Proxy(window.Object.create, t); + })(); + Object.defineProperty(Window.prototype.toString, "08ac4125fe79ad45be931eeed20c8e89", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "08ac4125fe79ad45be931eeed20c8e89" due to: ' + e); + } + }, + '(function(){if(-1!=window.location.href.indexOf("/intro-mm"))for(var c=document.cookie.split(";"),b=0;b{ + try { + const o = "done"; + if (Window.prototype.toString.f09a7b4667c1146d3ffd2348387597d8 === o) return; + !function() { + if (-1 != window.location.href.indexOf("/intro-mm")) for(var o = document.cookie.split(";"), e = 0; e < o.length; e++){ + var t = o[e]; + "redirect_url_to_intro" == (t = t.split("="))[0] && window.location.replace(decodeURIComponent(t[1])); + } + }(); + Object.defineProperty(Window.prototype.toString, "f09a7b4667c1146d3ffd2348387597d8", { + value: o, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (o) { + console.error('Error executing AG js rule with uniqueId "f09a7b4667c1146d3ffd2348387597d8" due to: ' + o); + } + }, + "(function(){var c=document.addEventListener;document.addEventListener=function(a,b,d,e){\"mousedown\"!=a&&-1==b.toString().indexOf('Z4P')&&c(a,b,d,e)}.bind(document); var b=window.setTimeout;window.setTimeout=function(a,c){if(!/\\..4P\\(|=setTimeout\\(/.test(a.toString()))return b(a,c)};})();": ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["16fc905e6e4d01b1d36604ce246bdcac"] === e) return; + !function() { + var e = document.addEventListener; + document.addEventListener = (function(t, n1, o, d) { + "mousedown" != t && -1 == n1.toString().indexOf("Z4P") && e(t, n1, o, d); + }).bind(document); + var t = window.setTimeout; + window.setTimeout = function(e, n1) { + if (!/\..4P\(|=setTimeout\(/.test(e.toString())) return t(e, n1); + }; + }(); + Object.defineProperty(Window.prototype.toString, "16fc905e6e4d01b1d36604ce246bdcac", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "16fc905e6e4d01b1d36604ce246bdcac" due to: ' + e); + } + }, + "(function(){var c=document.addEventListener;document.addEventListener=function(a,b,d,e){\"click\"!=a&&-1==b.toString().indexOf('bi()')&&c(a,b,d,e)}.bind(document);})();": ()=>{ + try { + const e = "done"; + if (Window.prototype.toString.a9336ddeda1e9f4d8198cac4f6a59557 === e) return; + !function() { + var e = document.addEventListener; + document.addEventListener = (function(t, d, n1, o) { + "click" != t && -1 == d.toString().indexOf("bi()") && e(t, d, n1, o); + }).bind(document); + }(); + Object.defineProperty(Window.prototype.toString, "a9336ddeda1e9f4d8198cac4f6a59557", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "a9336ddeda1e9f4d8198cac4f6a59557" due to: ' + e); + } + }, + "(function(){var c=document.addEventListener;document.addEventListener=function(a,b,d,e){\"mousedown\"!=a&&-1==b.toString().indexOf('Z4P')&&c(a,b,d,e)}.bind(document); var b=window.setTimeout;window.setTimeout=function(a,c){if(!/Z4P/.test(a.toString()))return b(a,c)};})();": ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["63f6bebe37e619f74c32a8b2415f86a2"] === e) return; + !function() { + var e = document.addEventListener; + document.addEventListener = (function(t, n1, o, r) { + "mousedown" != t && -1 == n1.toString().indexOf("Z4P") && e(t, n1, o, r); + }).bind(document); + var t = window.setTimeout; + window.setTimeout = function(e, n1) { + if (!/Z4P/.test(e.toString())) return t(e, n1); + }; + }(); + Object.defineProperty(Window.prototype.toString, "63f6bebe37e619f74c32a8b2415f86a2", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "63f6bebe37e619f74c32a8b2415f86a2" due to: ' + e); + } + }, + "(function(){var c=document.addEventListener;document.addEventListener=function(a,b,d,e){\"click\"!=a&&-1==b.toString().indexOf('checkTarget')&&c(a,b,d,e)}.bind(document);})();": ()=>{ + try { + const e = "done"; + if (Window.prototype.toString.d4daff20eda39f5bfe997a60b5b65564 === e) return; + !function() { + var e = document.addEventListener; + document.addEventListener = (function(t, n1, d, r) { + "click" != t && -1 == n1.toString().indexOf("checkTarget") && e(t, n1, d, r); + }).bind(document); + }(); + Object.defineProperty(Window.prototype.toString, "d4daff20eda39f5bfe997a60b5b65564", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "d4daff20eda39f5bfe997a60b5b65564" due to: ' + e); + } + }, + '(function(){var c=document.addEventListener;document.addEventListener=function(a,b,d,e){"mouseup"!=a&&-1==b.toString().indexOf(`var U="click";var R=\'_blank\';var v="href";`)&&c(a,b,d,e)}.bind(document);})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["2e5eb7acf02c72e68933dbb1fd9704ba"] === e) return; + !function() { + var e = document.addEventListener; + document.addEventListener = (function(t, n1, r, o) { + "mouseup" != t && -1 == n1.toString().indexOf('var U="click";var R=\'_blank\';var v="href";') && e(t, n1, r, o); + }).bind(document); + }(); + Object.defineProperty(Window.prototype.toString, "2e5eb7acf02c72e68933dbb1fd9704ba", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "2e5eb7acf02c72e68933dbb1fd9704ba" due to: ' + e); + } + }, + "(function(){ var observer=new MutationObserver(hide);observer.observe(document,{childList:!0,subtree:!0});function hide(){var e=document.querySelectorAll('span[data-nosnippet] > .q-box');e.forEach(function(e){var i=e.innerText;if(i){if(i!==void 0&&(!0===i.includes('Sponsored')||!0===i.includes('Ad by')||!0===i.includes('Promoted by'))){e.style=\"display:none!important;\"}}})} })();": ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["9f6813ab855c342f13c90469c95da251"] === e) return; + new MutationObserver(function() { + document.querySelectorAll("span[data-nosnippet] > .q-box").forEach(function(e) { + var o = e.innerText; + o && (void 0 === o || !0 !== o.includes("Sponsored") && !0 !== o.includes("Ad by") && !0 !== o.includes("Promoted by") || (e.style = "display:none!important;")); + }); + }).observe(document, { + childList: !0, + subtree: !0 + }); + Object.defineProperty(Window.prototype.toString, "9f6813ab855c342f13c90469c95da251", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "9f6813ab855c342f13c90469c95da251" due to: ' + e); + } + }, + "(function(){ var observer=new MutationObserver(hide);observer.observe(document,{childList:!0,subtree:!0});function hide(){var e=document.querySelectorAll('.paged_list_wrapper > .pagedlist_item');e.forEach(function(e){var i=e.innerHTML;if(i){if(i!==void 0&&(!0===i.includes('Hide This Ad<\\/span>'))){e.style=\"display:none!important;\"}}})} })();": ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["17b3983e043325b0965b454cc7394766"] === e) return; + new MutationObserver(function() { + document.querySelectorAll(".paged_list_wrapper > .pagedlist_item").forEach(function(e) { + var t = e.innerHTML; + t && void 0 !== t && !0 === t.includes("Hide This Ad") && (e.style = "display:none!important;"); + }); + }).observe(document, { + childList: !0, + subtree: !0 + }); + Object.defineProperty(Window.prototype.toString, "17b3983e043325b0965b454cc7394766", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "17b3983e043325b0965b454cc7394766" due to: ' + e); + } + }, + '!function(){new MutationObserver((function(){document.querySelectorAll("article > div[class] > div[class]").forEach((function(e){Object.keys(e).forEach((function(c){if(c.includes("__reactEvents")||c.includes("__reactProps")){c=e[c];try{c.children?.props?.adFragmentKey?.items&&e.parentNode.remove()}catch(c){}}}))}))})).observe(document,{childList:!0,subtree:!0});}();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString["54509270c0f548739cf1d7c18ae3d312"] === e) return; + new MutationObserver(function() { + document.querySelectorAll("article > div[class] > div[class]").forEach(function(e) { + Object.keys(e).forEach(function(t) { + if (t.includes("__reactEvents") || t.includes("__reactProps")) { + t = e[t]; + try { + var _t_children_props_adFragmentKey, _t_children_props, _t_children; + ((_t_children = t.children) === null || _t_children === void 0 ? void 0 : (_t_children_props = _t_children.props) === null || _t_children_props === void 0 ? void 0 : (_t_children_props_adFragmentKey = _t_children_props.adFragmentKey) === null || _t_children_props_adFragmentKey === void 0 ? void 0 : _t_children_props_adFragmentKey.items) && e.parentNode.remove(); + } catch (t) {} + } + }); + }); + }).observe(document, { + childList: !0, + subtree: !0 + }); + Object.defineProperty(Window.prototype.toString, "54509270c0f548739cf1d7c18ae3d312", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "54509270c0f548739cf1d7c18ae3d312" due to: ' + e); + } + }, + "(()=>{let e=0;const i=[];new MutationObserver((function(){document.querySelectorAll(\"div[role='list'] > div[role='listitem']:not([style*='display: none']) div[data-test-id='pinWrapper'], div[role='list'] > div[role='listitem']:not([style*='display: none']) div[data-test-id='pinWrapper'] > div[data-test-id]\").forEach((s=>{Object.keys(s).forEach((t=>{if(t.includes(\"__reactProps\")){const r=s[t];try{if(r?.children?.props?.children?.props?.pinKey?.adDestinationUrl||r?.children[1]?.props?.children[1]?.props?.children?.props?.pinKey?.adDestinationUrl||r?.children[0]?.props?.children[1]?.props?.children[1]?.props?.children?.props?.pinKey?.adDestinationUrl){const t=s.closest(\"div[role='list'] > div[role='listitem']:not([style*='display: none'])\");if(!t)return;t.style=\"display: none !important;\",e++;const r=t.querySelector('div[data-test-id=\"pinrep-footer\"] > div[class] > div[class] > div[class]:last-child > div[class] > a[aria-label][href][rel] > div[class] > div[class] > div[class]');r&&(i.push([\"Ad blocked based on property [\"+e+\"] -> \"+r.innerText]),console.table(i))}}catch(e){console.error(e)}}}))}))})).observe(document,{childList:!0,subtree:!0})})();": ()=>{ + try { + const e = "done"; + if (Window.prototype.toString.f108a248579190d52136e6e135a4d6c9 === e) return; + (()=>{ + let e = 0; + const t = []; + new MutationObserver(function() { + document.querySelectorAll("div[role='list'] > div[role='listitem']:not([style*='display: none']) div[data-test-id='pinWrapper'], div[role='list'] > div[role='listitem']:not([style*='display: none']) div[data-test-id='pinWrapper'] > div[data-test-id]").forEach((i1)=>{ + Object.keys(i1).forEach((r)=>{ + if (r.includes("__reactProps")) { + const o = i1[r]; + try { + var _o_children_props_children_props_pinKey, _o_children_props_children_props, _o_children_props_children, _o_children_props, _o_children, _o_children__props_children__props_children_props_pinKey, _o_children__props_children__props_children_props, _o_children__props_children__props_children, _o_children__props_children__props, _o_children__props_children_, _o_children__props, _o_children_, _o_children__props_children__props_children__props_children_props_pinKey, _o_children__props_children__props_children__props_children_props, _o_children__props_children__props_children__props_children, _o_children__props_children__props_children__props, _o_children__props_children__props_children_, _o_children__props_children__props1, _o_children__props_children_1, _o_children__props1, _o_children_1; + if ((o === null || o === void 0 ? void 0 : (_o_children = o.children) === null || _o_children === void 0 ? void 0 : (_o_children_props = _o_children.props) === null || _o_children_props === void 0 ? void 0 : (_o_children_props_children = _o_children_props.children) === null || _o_children_props_children === void 0 ? void 0 : (_o_children_props_children_props = _o_children_props_children.props) === null || _o_children_props_children_props === void 0 ? void 0 : (_o_children_props_children_props_pinKey = _o_children_props_children_props.pinKey) === null || _o_children_props_children_props_pinKey === void 0 ? void 0 : _o_children_props_children_props_pinKey.adDestinationUrl) || (o === null || o === void 0 ? void 0 : (_o_children_ = o.children[1]) === null || _o_children_ === void 0 ? void 0 : (_o_children__props = _o_children_.props) === null || _o_children__props === void 0 ? void 0 : (_o_children__props_children_ = _o_children__props.children[1]) === null || _o_children__props_children_ === void 0 ? void 0 : (_o_children__props_children__props = _o_children__props_children_.props) === null || _o_children__props_children__props === void 0 ? void 0 : (_o_children__props_children__props_children = _o_children__props_children__props.children) === null || _o_children__props_children__props_children === void 0 ? void 0 : (_o_children__props_children__props_children_props = _o_children__props_children__props_children.props) === null || _o_children__props_children__props_children_props === void 0 ? void 0 : (_o_children__props_children__props_children_props_pinKey = _o_children__props_children__props_children_props.pinKey) === null || _o_children__props_children__props_children_props_pinKey === void 0 ? void 0 : _o_children__props_children__props_children_props_pinKey.adDestinationUrl) || (o === null || o === void 0 ? void 0 : (_o_children_1 = o.children[0]) === null || _o_children_1 === void 0 ? void 0 : (_o_children__props1 = _o_children_1.props) === null || _o_children__props1 === void 0 ? void 0 : (_o_children__props_children_1 = _o_children__props1.children[1]) === null || _o_children__props_children_1 === void 0 ? void 0 : (_o_children__props_children__props1 = _o_children__props_children_1.props) === null || _o_children__props_children__props1 === void 0 ? void 0 : (_o_children__props_children__props_children_ = _o_children__props_children__props1.children[1]) === null || _o_children__props_children__props_children_ === void 0 ? void 0 : (_o_children__props_children__props_children__props = _o_children__props_children__props_children_.props) === null || _o_children__props_children__props_children__props === void 0 ? void 0 : (_o_children__props_children__props_children__props_children = _o_children__props_children__props_children__props.children) === null || _o_children__props_children__props_children__props_children === void 0 ? void 0 : (_o_children__props_children__props_children__props_children_props = _o_children__props_children__props_children__props_children.props) === null || _o_children__props_children__props_children__props_children_props === void 0 ? void 0 : (_o_children__props_children__props_children__props_children_props_pinKey = _o_children__props_children__props_children__props_children_props.pinKey) === null || _o_children__props_children__props_children__props_children_props_pinKey === void 0 ? void 0 : _o_children__props_children__props_children__props_children_props_pinKey.adDestinationUrl)) { + const r = i1.closest("div[role='list'] > div[role='listitem']:not([style*='display: none'])"); + if (!r) return; + r.style = "display: none !important;", e++; + const o = r.querySelector('div[data-test-id="pinrep-footer"] > div[class] > div[class] > div[class]:last-child > div[class] > a[aria-label][href][rel] > div[class] > div[class] > div[class]'); + o && (t.push([ + "Ad blocked based on property [" + e + "] -> " + o.innerText + ]), console.table(t)); + } + } catch (e) { + console.error(e); + } + } + }); + }); + }).observe(document, { + childList: !0, + subtree: !0 + }); + })(); + Object.defineProperty(Window.prototype.toString, "f108a248579190d52136e6e135a4d6c9", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "f108a248579190d52136e6e135a4d6c9" due to: ' + e); + } + }, + '(()=>{const e="SPONSORED",t="SponsoredData",r="AdsSideFeedUnit",n="MarketplaceFeedAdStory",o=[e,t,r],p=[t,n],a=window.String.prototype.split,i=window.String.prototype.trim,s=new WeakMap,d=new WeakSet,y=(e,t,r=Proxy)=>{const n=new r(e,t);return s.set(n,s.get(e)??e),n},l=(e,t)=>e?.length>300&&t.some(t=>e?.includes?.(t)),c=e=>l(e,o),w=e=>Boolean(e?.startsWith?.("{")&&e?.endsWith?.("}")||e?.startsWith?.("[")&&e?.endsWith?.("]")),u=e=>w(e)&&c(e),f=e=>{try{e.JSON.parse=y(e.JSON.parse,j,e.Proxy),e.String.prototype.split=y(e.String.prototype.split,C,e.Proxy),e.String=y(e.String,q,e.Proxy),e.String.prototype.constructor=e.String,e.Function.prototype.call=y(e.Function.prototype.call,L,e.Proxy),e.Function.prototype.toString=y(e.Function.prototype.toString,$,e.Proxy)}catch(e){}},g=e=>Boolean(e instanceof HTMLIFrameElement&&(""===e.src||e?.src?.startsWith("about:blank"))&&e.contentWindow),h=new Set(["append","prepend","before","after","insertNode","replaceWith","replaceChild","replaceChildren"]),{apply:_}={apply(e,t,r){const n=Reflect.apply(e,t,r);try{g(n)?f(n.contentWindow):h.has(e.name)&&r.forEach(e=>{g(e)&&f(e.contentWindow)})}catch(e){}return n}},S={apply:_};window.Node.prototype.appendChild=y(window.Node.prototype.appendChild,S),window.Node.prototype.insertBefore=y(window.Node.prototype.insertBefore,S),window.Node.prototype.replaceChild=y(window.Node.prototype.replaceChild,S),window.Element.prototype.append=y(window.Element.prototype.append,S),window.Element.prototype.prepend=y(window.Element.prototype.prepend,S),window.Element.prototype.replaceChildren=y(window.Element.prototype.replaceChildren,S),window.Element.prototype.before=y(window.Element.prototype.before,S),window.Element.prototype.after=y(window.Element.prototype.after,S),window.Element.prototype.insertAdjacentElement=y(window.Element.prototype.insertAdjacentElement,S),window.Range.prototype.insertNode=y(window.Range.prototype.insertNode,S),window.CharacterData.prototype.replaceWith=y(window.CharacterData.prototype.replaceWith,S);const b=e=>Boolean(e)&&Object.values(e).some(e=>e?.__typename===t),m=(e,t)=>{if(!e||"object"!=typeof e||Array.isArray(e))return!1;const r=Object.keys(e);return r.length===t.length&&t.every(e=>r.includes(e))},A=e=>m(e,["node"])&&m(e.node,["s"])&&m(e.node.s,["__typename"])&&e.node.s.__typename===t,N=(e,t,n,o)=>{if(!e||"object"!=typeof e||n<0)return!1;let p=!1;if(Array.isArray(e.nodes)){const t=e.nodes.filter(e=>!(e=>{const t=e?.item_collection?.nodes;return e?.__typename===r||Array.isArray(t)&&t.some(e=>e?.sponsored_data?.ad_id)})(e));e.nodes.length-t.length>0&&(e.nodes=t,p=!0)}return Object.entries(e).forEach(([e,r])=>{p=N(r,`${t}.${e}`,n-1,o)||p}),p},O=(e,t=10)=>{const r=e?.data?.viewer,n=r??e?.[3]?.[1]?.__bbox?.result?.data?.viewer;if(!n)return!1;return N(n,r?"data.viewer":"item[3][1].__bbox.result.data.viewer",t,e)},E=(t,r=10,n=new WeakMap)=>{if(!t||"object"!=typeof t||r<0)return!1;const o=n.get(t);if(void 0!==o&&o>=r)return!1;n.set(t,r);let p=((t,r)=>{if(!t||"object"!=typeof t)return!1;let n=!1;try{if(r){if(Array.isArray(t.require?.[0]?.[3]?.[0]?.__bbox?.require)&&t.require[0][3][0].__bbox.require.forEach(t=>{t[3]?.[1]?.__bbox?.result?.data?.category===e&&(delete t[3][1].__bbox.result.data.node,n=!0),b(t[3]?.[1]?.__bbox?.result?.data?.node)&&(delete t[3][1].__bbox.result.data.node,n=!0),n=O(t)||n}),Array.isArray(t.data?.viewer?.auxColumnUnits?.nodes)&&(n=O(t)||n),Array.isArray(t.data?.viewer?.news_feed?.edges)){const r=t.data.viewer.news_feed.edges.length;t.data.viewer.news_feed.edges=t.data.viewer.news_feed.edges.filter(t=>!b(t.node)&&t.category!==e),n=n||t.data.viewer.news_feed.edges.length!==r}b(t.data?.node)&&(delete t.data.node,n=!0),t.data?.category===e&&(delete t.data.node,n=!0)}}catch(e){}return n})(t,!0);return 0===r||Object.values(t).forEach(e=>{p=E(e,r-1,n)||p}),p},x=(e,t)=>{try{const r="string"==typeof t;if(r&&!c(t))return e;if((e=>{const t=Array.isArray(e)&&1===e.length?e[0]:e;if(!t||"object"!=typeof t||Array.isArray(t)||"string"!=typeof t.p||t.p.length<300)return!1;const r=["data","edges","require","p"];if(Object.hasOwn(t,"extensions")){if(!m(t.extensions,[]))return!1;r.push("extensions")}return m(t,r)&&A(t.data)&&Array.isArray(t.edges)&&1===t.edges.length&&A(t.edges[0])&&Array.isArray(t.require)&&1===t.require.length&&A(t.require[0])})(e))return e;if(!r&&!c(JSON.stringify(e)))return e;E(e)&&e&&"object"==typeof e&&d.add(e)}catch(e){}return e},{apply:v}={apply(e,t,r){const n=Reflect.apply(e,t,r);return x(n,r[0])}},j={apply:v};window.JSON.parse=y(window.JSON.parse,j);const W=new WeakSet,J=e=>{if(!e||W.has(e)||"function"!=typeof e.parse)return;const{apply:t}={apply(e,t,r){const n=Reflect.apply(e,t,r);return x(n,r[0])}};e.parse=y(e.parse,{apply:t}),W.add(e)},{apply:R}={apply(e,t,r){let n;try{if(w(t),u(t)){const e=JSON.parse(t);d.has(e)&&(n=JSON.stringify(e))}}catch(e){}return Reflect.apply(e,n??t,r)}},C={apply:R};window.String.prototype.split=y(window.String.prototype.split,C),window.String.prototype.substring=y(window.String.prototype.substring,C);const{apply:F}={apply(e,t,r){const n=Reflect.apply(e,t,r);try{if(u(n)){const e=JSON.parse(n);if(d.has(e)){return JSON.stringify(e)}}}catch(e){}return n}},q={apply:F};window.String=y(window.String,q),window.String.prototype.constructor=window.String;const k=new Map,P=e=>{const t=k.get(e);if(void 0!==t)return t;let r=e;try{const t=Reflect.apply(i,e,[]);if(w(t)&&c(e)){const t=JSON.parse(e);d.has(t)&&(r=JSON.stringify(t))}}catch(e){}return((e,t)=>{if(k.size>=2){const e=k.keys().next().value;k.delete(e)}return k.set(e,t),t})(e,r)},{apply:B}={apply(e,t,r){let n=t;try{"string"==typeof t&&t.length>300&&(n=P(t))}catch(e){}return Reflect.apply(e,n,r)}},M={apply:B};window.String.prototype.charAt=y(window.String.prototype.charAt,M);const D=e=>{const t=e?.data?.viewer?.marketplace_feed_stories;if(!Array.isArray(t?.edges))return!1;const r=t.edges.filter(e=>!(e=>{const t=e?.__typename;return"string"==typeof t&&t.includes(n)})(e?.node));return r.length!==t.edges.length&&(t.edges=r,!0)},{apply:z}={apply(e,t,r){const n=r[2]?.[0];if(l(n,p))try{const e=(e=>{let t=!1;const r=Reflect.apply(a,e,[/\\r?\\n|\\r/]).map(e=>{if(""===e.trim())return e;let r;try{r=JSON.parse(e)}catch{return e}const n=d.has(r),o=D(r);return n||o?(t=!0,JSON.stringify(r)):e});return t?r.join("\\r\\n"):e})(n);if(e!==n){const t=r[2].slice();t[0]=e,r[2]=t}}catch(e){}return Reflect.apply(e,t,r)}},L={apply:z};window.Function.prototype.call=y(window.Function.prototype.call,L);const{apply:U}={apply:(e,t,r)=>Reflect.apply(e,s.get(t)??t,r)},$={apply:U};window.Function.prototype.toString=y(window.Function.prototype.toString,$),(()=>{const e=["json5"];"function"!=typeof window.requireLazy?(Array.isArray(window.__rl_stub)||(window.__rl_stub=[]),window.__rl_stub.push([e,J])):window.requireLazy(e,J)})()})();': ()=>{ + try { + const e = "done"; + if (Window.prototype.toString.e9fd3648e4703f8dd52f2f04c6596042 === e) return; + (()=>{ + const e = "SPONSORED", t = "SponsoredData", r = "AdsSideFeedUnit", n1 = "MarketplaceFeedAdStory", o = [ + e, + t, + r + ], p = [ + t, + n1 + ], i1 = window.String.prototype.split, a = window.String.prototype.trim, s = new WeakMap, d = new WeakSet, y = (e, t, r = Proxy)=>{ + const n1 = new r(e, t); + var _s_get; + return s.set(n1, (_s_get = s.get(e)) !== null && _s_get !== void 0 ? _s_get : e), n1; + }, l = (e, t)=>(e === null || e === void 0 ? void 0 : e.length) > 300 && t.some((t)=>{ + var _e_includes; + return e === null || e === void 0 ? void 0 : (_e_includes = e.includes) === null || _e_includes === void 0 ? void 0 : _e_includes.call(e, t); + }), c = (e)=>l(e, o), w = (e)=>{ + var _e_startsWith, _e_endsWith, _e_startsWith1, _e_endsWith1; + return Boolean((e === null || e === void 0 ? void 0 : (_e_startsWith = e.startsWith) === null || _e_startsWith === void 0 ? void 0 : _e_startsWith.call(e, "{")) && (e === null || e === void 0 ? void 0 : (_e_endsWith = e.endsWith) === null || _e_endsWith === void 0 ? void 0 : _e_endsWith.call(e, "}")) || (e === null || e === void 0 ? void 0 : (_e_startsWith1 = e.startsWith) === null || _e_startsWith1 === void 0 ? void 0 : _e_startsWith1.call(e, "[")) && (e === null || e === void 0 ? void 0 : (_e_endsWith1 = e.endsWith) === null || _e_endsWith1 === void 0 ? void 0 : _e_endsWith1.call(e, "]"))); + }, u = (e)=>w(e) && c(e), f = (e)=>{ + try { + e.JSON.parse = y(e.JSON.parse, j, e.Proxy), e.String.prototype.split = y(e.String.prototype.split, q, e.Proxy), e.String = y(e.String, F, e.Proxy), e.String.prototype.constructor = e.String, e.Function.prototype.call = y(e.Function.prototype.call, z1, e.Proxy), e.Function.prototype.toString = y(e.Function.prototype.toString, I, e.Proxy); + } catch (e) {} + }, g = (e)=>{ + var _e_src; + return Boolean(e instanceof HTMLIFrameElement && ("" === e.src || (e === null || e === void 0 ? void 0 : (_e_src = e.src) === null || _e_src === void 0 ? void 0 : _e_src.startsWith("about:blank"))) && e.contentWindow); + }, h = new Set([ + "append", + "prepend", + "before", + "after", + "insertNode", + "replaceWith", + "replaceChild", + "replaceChildren" + ]), { apply: S } = { + apply (e, t, r) { + const n1 = Reflect.apply(e, t, r); + try { + g(n1) ? f(n1.contentWindow) : h.has(e.name) && r.forEach((e)=>{ + g(e) && f(e.contentWindow); + }); + } catch (e) {} + return n1; + } + }, _ = { + apply: S + }; + window.Node.prototype.appendChild = y(window.Node.prototype.appendChild, _), window.Node.prototype.insertBefore = y(window.Node.prototype.insertBefore, _), window.Node.prototype.replaceChild = y(window.Node.prototype.replaceChild, _), window.Element.prototype.append = y(window.Element.prototype.append, _), window.Element.prototype.prepend = y(window.Element.prototype.prepend, _), window.Element.prototype.replaceChildren = y(window.Element.prototype.replaceChildren, _), window.Element.prototype.before = y(window.Element.prototype.before, _), window.Element.prototype.after = y(window.Element.prototype.after, _), window.Element.prototype.insertAdjacentElement = y(window.Element.prototype.insertAdjacentElement, _), window.Range.prototype.insertNode = y(window.Range.prototype.insertNode, _), window.CharacterData.prototype.replaceWith = y(window.CharacterData.prototype.replaceWith, _); + const b = (e)=>Boolean(e) && Object.values(e).some((e)=>(e === null || e === void 0 ? void 0 : e.__typename) === t), m = (e, t)=>{ + if (!e || "object" != typeof e || Array.isArray(e)) return !1; + const r = Object.keys(e); + return r.length === t.length && t.every((e)=>r.includes(e)); + }, A = (e)=>m(e, [ + "node" + ]) && m(e.node, [ + "s" + ]) && m(e.node.s, [ + "__typename" + ]) && e.node.s.__typename === t, N = (e, t, n1, o)=>{ + if (!e || "object" != typeof e || n1 < 0) return !1; + let p = !1; + if (Array.isArray(e.nodes)) { + const t = e.nodes.filter((e)=>!((e)=>{ + var _e_item_collection; + const t = e === null || e === void 0 ? void 0 : (_e_item_collection = e.item_collection) === null || _e_item_collection === void 0 ? void 0 : _e_item_collection.nodes; + return (e === null || e === void 0 ? void 0 : e.__typename) === r || Array.isArray(t) && t.some((e)=>{ + var _e_sponsored_data; + return e === null || e === void 0 ? void 0 : (_e_sponsored_data = e.sponsored_data) === null || _e_sponsored_data === void 0 ? void 0 : _e_sponsored_data.ad_id; + }); + })(e)); + e.nodes.length - t.length > 0 && (e.nodes = t, p = !0); + } + return Object.entries(e).forEach(([e, r])=>{ + p = N(r, `${t}.${e}`, n1 - 1, o) || p; + }), p; + }, O = (e, t = 10)=>{ + var _e_data, _e_____bbox_result_data, _e_____bbox_result, _e_____bbox, _e__, _e_; + const r = e === null || e === void 0 ? void 0 : (_e_data = e.data) === null || _e_data === void 0 ? void 0 : _e_data.viewer, n1 = r !== null && r !== void 0 ? r : e === null || e === void 0 ? void 0 : (_e_ = e[3]) === null || _e_ === void 0 ? void 0 : (_e__ = _e_[1]) === null || _e__ === void 0 ? void 0 : (_e_____bbox = _e__.__bbox) === null || _e_____bbox === void 0 ? void 0 : (_e_____bbox_result = _e_____bbox.result) === null || _e_____bbox_result === void 0 ? void 0 : (_e_____bbox_result_data = _e_____bbox_result.data) === null || _e_____bbox_result_data === void 0 ? void 0 : _e_____bbox_result_data.viewer; + return !!n1 && N(n1, r ? "data.viewer" : "item[3][1].__bbox.result.data.viewer", t, e); + }, E = (t, r = 10, n1 = new WeakMap)=>{ + if (!t || "object" != typeof t || r < 0) return !1; + const o = n1.get(t); + if (void 0 !== o && o >= r) return !1; + n1.set(t, r); + let p = ((t)=>{ + if (!t || "object" != typeof t) return !1; + let r = !1; + try { + var _t_require______bbox, _t_require___, _t_require__, _t_require_, _t_require, _t_data_viewer_auxColumnUnits, _t_data_viewer, _t_data, _t_data_viewer_news_feed, _t_data_viewer1, _t_data1, _t_data2, _t_data3; + if (Array.isArray((_t_require = t.require) === null || _t_require === void 0 ? void 0 : (_t_require_ = _t_require[0]) === null || _t_require_ === void 0 ? void 0 : (_t_require__ = _t_require_[3]) === null || _t_require__ === void 0 ? void 0 : (_t_require___ = _t_require__[0]) === null || _t_require___ === void 0 ? void 0 : (_t_require______bbox = _t_require___.__bbox) === null || _t_require______bbox === void 0 ? void 0 : _t_require______bbox.require) && t.require[0][3][0].__bbox.require.forEach((t)=>{ + var _t_____bbox_result_data, _t_____bbox_result, _t_____bbox, _t__, _t_, _t_____bbox_result_data1, _t_____bbox_result1, _t_____bbox1, _t__1, _t_1; + ((_t_ = t[3]) === null || _t_ === void 0 ? void 0 : (_t__ = _t_[1]) === null || _t__ === void 0 ? void 0 : (_t_____bbox = _t__.__bbox) === null || _t_____bbox === void 0 ? void 0 : (_t_____bbox_result = _t_____bbox.result) === null || _t_____bbox_result === void 0 ? void 0 : (_t_____bbox_result_data = _t_____bbox_result.data) === null || _t_____bbox_result_data === void 0 ? void 0 : _t_____bbox_result_data.category) === e && (delete t[3][1].__bbox.result.data.node, r = !0), b((_t_1 = t[3]) === null || _t_1 === void 0 ? void 0 : (_t__1 = _t_1[1]) === null || _t__1 === void 0 ? void 0 : (_t_____bbox1 = _t__1.__bbox) === null || _t_____bbox1 === void 0 ? void 0 : (_t_____bbox_result1 = _t_____bbox1.result) === null || _t_____bbox_result1 === void 0 ? void 0 : (_t_____bbox_result_data1 = _t_____bbox_result1.data) === null || _t_____bbox_result_data1 === void 0 ? void 0 : _t_____bbox_result_data1.node) && (delete t[3][1].__bbox.result.data.node, r = !0), r = O(t) || r; + }), Array.isArray((_t_data = t.data) === null || _t_data === void 0 ? void 0 : (_t_data_viewer = _t_data.viewer) === null || _t_data_viewer === void 0 ? void 0 : (_t_data_viewer_auxColumnUnits = _t_data_viewer.auxColumnUnits) === null || _t_data_viewer_auxColumnUnits === void 0 ? void 0 : _t_data_viewer_auxColumnUnits.nodes) && (r = O(t) || r), Array.isArray((_t_data1 = t.data) === null || _t_data1 === void 0 ? void 0 : (_t_data_viewer1 = _t_data1.viewer) === null || _t_data_viewer1 === void 0 ? void 0 : (_t_data_viewer_news_feed = _t_data_viewer1.news_feed) === null || _t_data_viewer_news_feed === void 0 ? void 0 : _t_data_viewer_news_feed.edges)) { + const n1 = t.data.viewer.news_feed.edges.length; + t.data.viewer.news_feed.edges = t.data.viewer.news_feed.edges.filter((t)=>!b(t.node) && t.category !== e), r = r || t.data.viewer.news_feed.edges.length !== n1; + } + b((_t_data2 = t.data) === null || _t_data2 === void 0 ? void 0 : _t_data2.node) && (delete t.data.node, r = !0), ((_t_data3 = t.data) === null || _t_data3 === void 0 ? void 0 : _t_data3.category) === e && (delete t.data.node, r = !0); + } catch (e) {} + return r; + })(t); + return 0 === r || Object.values(t).forEach((e)=>{ + p = E(e, r - 1, n1) || p; + }), p; + }, x = (e, t)=>{ + try { + const r = "string" == typeof t; + if (r && !c(t)) return e; + if (((e)=>{ + const t = Array.isArray(e) && 1 === e.length ? e[0] : e; + if (!t || "object" != typeof t || Array.isArray(t) || "string" != typeof t.p || t.p.length < 300) return !1; + const r = [ + "data", + "edges", + "require", + "p" + ]; + if (Object.hasOwn(t, "extensions")) { + if (!m(t.extensions, [])) return !1; + r.push("extensions"); + } + return m(t, r) && A(t.data) && Array.isArray(t.edges) && 1 === t.edges.length && A(t.edges[0]) && Array.isArray(t.require) && 1 === t.require.length && A(t.require[0]); + })(e)) return e; + if (!r && !c(JSON.stringify(e))) return e; + E(e) && e && "object" == typeof e && d.add(e); + } catch (e) {} + return e; + }, { apply: v } = { + apply (e, t, r) { + const n1 = Reflect.apply(e, t, r); + return x(n1, r[0]); + } + }, j = { + apply: v + }; + window.JSON.parse = y(window.JSON.parse, j); + const W = new WeakSet, J = (e)=>{ + if (!e || W.has(e) || "function" != typeof e.parse) return; + const { apply: t } = { + apply (e, t, r) { + const n1 = Reflect.apply(e, t, r); + return x(n1, r[0]); + } + }; + e.parse = y(e.parse, { + apply: t + }), W.add(e); + }, { apply: R } = { + apply (e, t, r) { + let n1; + try { + if (w(t), u(t)) { + const e = JSON.parse(t); + d.has(e) && (n1 = JSON.stringify(e)); + } + } catch (e) {} + return Reflect.apply(e, n1 !== null && n1 !== void 0 ? n1 : t, r); + } + }, q = { + apply: R + }; + window.String.prototype.split = y(window.String.prototype.split, q), window.String.prototype.substring = y(window.String.prototype.substring, q); + const { apply: C } = { + apply (e, t, r) { + const n1 = Reflect.apply(e, t, r); + try { + if (u(n1)) { + const e = JSON.parse(n1); + if (d.has(e)) return JSON.stringify(e); + } + } catch (e) {} + return n1; + } + }, F = { + apply: C + }; + window.String = y(window.String, F), window.String.prototype.constructor = window.String; + const k = new Map, { apply: P } = { + apply (e, t, r) { + let n1 = t; + try { + "string" == typeof t && t.length > 300 && (n1 = ((e)=>{ + const t = k.get(e); + if (void 0 !== t) return t; + let r = e; + try { + const t = Reflect.apply(a, e, []); + if (w(t) && c(e)) { + const t = JSON.parse(e); + d.has(t) && (r = JSON.stringify(t)); + } + } catch (e) {} + return ((e, t)=>{ + if (k.size >= 2) { + const e = k.keys().next().value; + k.delete(e); + } + return k.set(e, t), t; + })(e, r); + })(t)); + } catch (e) {} + return Reflect.apply(e, n1, r); + } + }, B = { + apply: P + }; + window.String.prototype.charAt = y(window.String.prototype.charAt, B); + const M = (e)=>{ + var _e_data_viewer, _e_data; + const t = e === null || e === void 0 ? void 0 : (_e_data = e.data) === null || _e_data === void 0 ? void 0 : (_e_data_viewer = _e_data.viewer) === null || _e_data_viewer === void 0 ? void 0 : _e_data_viewer.marketplace_feed_stories; + if (!Array.isArray(t === null || t === void 0 ? void 0 : t.edges)) return !1; + const r = t.edges.filter((e)=>!((e)=>{ + const t = e === null || e === void 0 ? void 0 : e.__typename; + return "string" == typeof t && t.includes(n1); + })(e === null || e === void 0 ? void 0 : e.node)); + return r.length !== t.edges.length && (t.edges = r, !0); + }, { apply: D } = { + apply (e, t, r) { + var _r_; + const n1 = (_r_ = r[2]) === null || _r_ === void 0 ? void 0 : _r_[0]; + if (l(n1, p)) try { + const e = ((e)=>{ + let t = !1; + const r = Reflect.apply(i1, e, [ + /\r?\n|\r/ + ]).map((e)=>{ + if ("" === e.trim()) return e; + let r; + try { + r = JSON.parse(e); + } catch { + return e; + } + const n1 = d.has(r), o = M(r); + return n1 || o ? (t = !0, JSON.stringify(r)) : e; + }); + return t ? r.join("\r\n") : e; + })(n1); + if (e !== n1) { + const t = r[2].slice(); + t[0] = e, r[2] = t; + } + } catch (e) {} + return Reflect.apply(e, t, r); + } + }, z1 = { + apply: D + }; + window.Function.prototype.call = y(window.Function.prototype.call, z1); + const { apply: L } = { + apply: (e, t, r)=>{ + var _s_get; + return Reflect.apply(e, (_s_get = s.get(t)) !== null && _s_get !== void 0 ? _s_get : t, r); + } + }, I = { + apply: L + }; + window.Function.prototype.toString = y(window.Function.prototype.toString, I), (()=>{ + const e = [ + "json5" + ]; + "function" != typeof window.requireLazy ? (Array.isArray(window.__rl_stub) || (window.__rl_stub = []), window.__rl_stub.push([ + e, + J + ])) : window.requireLazy(e, J); + })(); + })(); + Object.defineProperty(Window.prototype.toString, "e9fd3648e4703f8dd52f2f04c6596042", { + value: e, + enumerable: !1, + writable: !1, + configurable: !1 + }); + } catch (e) { + console.error('Error executing AG js rule with uniqueId "e9fd3648e4703f8dd52f2f04c6596042" due to: ' + e); + } + }, + '!function(){var e=new MutationObserver(function(){var m=document.querySelectorAll("div[id^=\'mount_\']");{var e;e=0 div[data-pagelet^="FeedUnit"] > div[class]:not([style*="height"])\'):document.querySelectorAll(\'[id^="substream"] > div:not(.hidden_elem) div[id^="hyperfeed_story_id"]\')}e.forEach(function(e){function n(e,n){for(0 a > span > span > span[data-content]\')).length&&(h=e.querySelectorAll(\'div[role="article"] span[dir="auto"] > a > span[aria-label]\')):h=e.querySelectorAll(".userContentWrapper h5 + div[data-testid] a [class] [class]"),socheck=0;socheck a > span > span > span[data-content]\')).length&&(h=e.querySelectorAll(\'div[role="article"] span[dir="auto"] div[role="button"][tabindex]\')):h=e.querySelectorAll(".userContentWrapper h5 + div[data-testid] > span a > [class] [class]"),"0"==h.length&&(h=e.querySelectorAll(\'div[role="article"] span[dir="auto"] > a > span[aria-label]\')),socheck=0;socheck a > span span[data-content=\'+n+"]"),p=e.querySelectorAll(\'div[role="article"] span[dir="auto"] > a > span span[data-content=\'+t+"]"),d=e.querySelectorAll(\'div[role="article"] span[dir="auto"] > a > span span[data-content=\'+c+"]"),e.querySelectorAll(\'div[role="article"] span[dir="auto"] > a > span span[data-content=\'+a+"]")):(h=e.querySelectorAll(".userContentWrapper h5 + div[data-testid] a [data-content="+n+"]"),p=e.querySelectorAll(".userContentWrapper h5 + div[data-testid] a [data-content="+t+"]"),d=e.querySelectorAll(".userContentWrapper h5 + div[data-testid] a [data-content="+c+"]"),e.querySelectorAll(".userContentWrapper h5 + div[data-testid] a [data-content="+a+"]"))}var s=0,l=0,r=0,i=0,h=0,p=0,d=0,u=0,a=e.querySelectorAll("div[style=\'width: 100%\'] > a[href*=\'oculus.com/quest\'] > div"),o=document.querySelector("[lang]"),k=document.querySelectorAll("link[rel=\'preload\'][href*=\'/l/\']");o=o?document.querySelector("[lang]").lang:"en";var y,g=e.querySelectorAll(\'a[ajaxify*="ad_id"] > span\'),f=e.querySelectorAll(\'a[href*="ads/about"]\'),S=e.querySelectorAll(\'a[href*="https://www.facebook.com/business/help"]\');if("display: none !important;"!=e.getAttribute("style")&&!e.classList.contains("hidden_elem")&&(0