· 6 years ago · Jan 21, 2020, 01:04 AM
1// ==UserScript==
2// @name AAK-Cont Userscript For uBlock Origin
3// @description Helps you keep your Ad-Blocker active, when you visit a website and it asks you to disable.
4// @author AAK-Cont contributors
5// @version 1.999
6// @encoding utf-8
7// @license GNU GPL v3
8// @icon https://gitlab.com/xuhaiyang1234/AAK-Cont/raw/master/images/icon.png
9// @homepage https://xuhaiyang1234.gitlab.io/AAK-Cont/
10// @supportURL https://gitlab.com/xuhaiyang1234/AAK-Cont/issues
11// @updateURL https://gitlab.com/xuhaiyang1234/AAK-Cont/raw/master/FINAL_BUILD/aak-cont-script-ubo.user.js
12// @downloadURL https://gitlab.com/xuhaiyang1234/AAK-Cont/raw/master/FINAL_BUILD/aak-cont-script-ubo.user.js
13// @include http://*/*
14// @include https://*/*
15// @grant unsafeWindow
16// @grant GM_addStyle
17// @grant GM_getValue
18// @grant GM_setValue
19// @grant GM_xmlhttpRequest
20// @grant GM_registerMenuCommand
21// @grant GM_deleteValue
22// @grant GM_listValues
23// @grant GM_getResourceText
24// @grant GM_getResourceURL
25// @grant GM_log
26// @grant GM_openInTab
27// @grant GM_setClipboard
28// @grant GM_info
29// @grant GM_getMetadata
30// @run-at document-start
31// @connect foxvalleyfoodie.com
32// @connect tvnplayer.pl
33// @connect xmc.pl
34// @connect wp.tv
35// @connect sagkjeder.no
36// @connect mtgx.tv
37// @connect canal-plus.com
38// @connect *
39// ==/UserScript==
40/*=============
41| AAK/uBP API |
42==============*/
43
44var a = (function(win) {
45 "use strict";
46
47 var aak = {
48
49 /**
50 * General information about the script itself.
51 * @property about
52 * @type Object
53 */
54 about: {
55 homeURL: "https://xuhaiyang1234.gitlab.io/AAK-Cont/"
56 },
57
58 /**
59 * Adds a script in the scope of the unsafeWindow. Useful to get things running on all script managers.
60 * @method addScript
61 * @param source {String|Function} The Javascript to inject on the page.
62 * @param [injectMode] {Number} undefined = autodetect, 1 for force eval, 2 for force drop element
63 * @param [body]{Boolean} true: Inject into body, false: Inject into head.
64 */
65 addScript(source, injectMode, body) {
66 var txt = (typeof source === "function") ? this.intoString(source) : source.toString();
67 var forceEval = (txt) => {
68 let evalFnName = this.exportFunction(() => {
69 try {
70 this.eval.call(this.win, txt);
71 } catch(e) {
72 if (e && e.toString().indexOf("CSP") > -1) {
73 this.out.warn("AAK addScript failed eval due to CSP. Attempting drop.");
74 forceDrop(txt);
75 } else {
76 this.out.warn("AAK addScript failed.");
77 this.out.warn(e);
78 }
79 }
80 });
81 this.win[evalFnName]();
82 };
83 var forceDrop = (txt) => {
84 if (this.doc) {
85 var script = this.doc.createElement("script");
86 script.type = "text/javascript";
87 script.innerHTML = txt;
88 if (body && this.doc.body) {
89 this.doc.body.appendChild(script);
90 } else if (this.doc.head) {
91 this.doc.head.appendChild(script);
92 } else {
93 this.doc.documentElement.appendChild(script);
94 }
95 script.remove();
96 } else {
97 forceEval(txt);
98 }
99 };
100 if (!injectMode) {
101 if (this.win && this.getScriptManager() === "Tampermonkey") {
102 forceEval(txt);
103 } else {
104 forceDrop(txt);
105 }
106 } else if (injectMode === 1) {
107 forceEval(txt);
108 } else {
109 forceDrop(txt);
110 }
111 },
112
113 /**
114 * Runs a function on DOM & window load.
115 * @method always
116 * @param func {Function} The function to run.
117 * @param capture {Boolean} Dispatches event to the listener (func) before the event target.
118 */
119 always(func, capture) {
120 func();
121 this.on("DOMContentLoaded", func, capture);
122 this.on("load", func, capture);
123 },
124
125 /**
126 * Filter assignment of innerHTML, innerText, or textContent. Should be called on document-start.
127 * @method antiCollapse
128 * @param name {string} - The name of the property to filter, can be "innerHTML", "innerText", or "textContent".
129 * @param filter {Function} - The filter function. Use closure and self execution if you need to initialize.
130 ** @param elem {HTMLElement} - The target element.
131 ** @param val {string} - The value that is set.
132 * @return {boolean} True to block the assignment, false to allow.
133 */
134 antiCollapse(name, filter) {
135 let parent = "Element"; //innerHTML is on Element
136 switch (name) {
137 case "innerText":
138 parent = "HTMLElement";
139 break;
140 case "textContent":
141 parent = "Node";
142 break;
143 default:
144 break;
145 }
146 this.inject(`(() => {
147 "use strict";
148 const handler = ${filter};
149 const log = window.console.log.bind(window.console);
150 const warn = window.console.warn.bind(window.console);
151 const error = window.console.error.bind(window.console);
152 const String = window.String.bind(window);
153 try {
154 //Get setter and getter
155 const descriptor = window.Object.getOwnPropertyDescriptor(window.${parent}.prototype, "${name}");
156 const _set = descriptor.set;
157 const _get = descriptor.get;
158 window.Object.defineProperty(window.${parent}.prototype, "${name}", {
159 configurable: false,
160 set(val) {
161 if (${this.config.debugMode}) {
162 warn("${name} of an element is being assigned to:");
163 log(val);
164 }
165 if (handler(this, String(val))) {
166 error("Uncaught Error: uBlock Origin detectors are not allowed on this device!");
167 } else {
168 log("Tests passed.");
169 _set.call(this, val);
170 }
171 },
172 get() {
173 return _get.call(this);
174 },
175 });
176 window.console.log("Element collapse defuser activated on ${name}");
177 } catch (err) {
178 //Failed to activate
179 error("uBlock Protector failed to activate element collapse defuser on ${name}!");
180 }
181 })();`, true);
182 },
183
184 /**
185 * String content matching across an array of strings. Returns true if any string in the args array is matched.
186 * @method applyMatch
187 * @param args {Array} The strings to match against.
188 * @param method {Number} The method to match with. Defined in the enum (aak.matchMethod).
189 * @param filter {String|RegExp} The matching criteria.
190 * @return {Boolen} True if any string match, false otherwise.
191 */
192 applyMatch(args, method, filter) {
193 switch (method) {
194 case this.matchMethod.string:
195 for (let i=0; i<args.length; i++) {
196 if (String(args[i]).includes(filter)) {
197 return true;
198 }
199 }
200 break;
201 case this.matchMethod.stringExact:
202 for (let i=0; i<args.length; i++) {
203 if (filter === String(args[i])) {
204 return true;
205 }
206 }
207 break;
208 case this.matchMethod.RegExp:
209 for (let i=0; i<args.length; i++) {
210 if (filter.test(String(args[i]))) {
211 return true;
212 }
213 }
214 break;
215 case this.matchMethod.callback:
216 return filter(args);
217 default:
218 return true;
219 }
220 return false;
221 },
222
223 /**
224 * Adds an HTML element to the page for scripts checking an element's existence.
225 * @method bait
226 * @param type {String} The element tag name.
227 * @param identifier {String} CSS selector for adding an ID or class to the element.
228 * @param hidden {Boolean} Whether or not to hide the bait element.
229 */
230 bait(type, identifier, hidden) {
231 let elem = this.doc.createElement(type);
232 switch (identifier.charAt(0)) {
233 case '#':
234 elem.id = identifier.substring(1);
235 break;
236 case '.':
237 elem.className = identifier.substring(1);
238 break;
239 }
240 if (hidden) {
241 elem.style.display = "none";
242 }
243 elem.innerHTML = "<br>";
244 this.doc.documentElement.prepend(elem);
245 },
246
247 /**
248 * Set up script execution observer.
249 * Can only interfere execution of scripts hard coded into the main document.
250 * TODO - Need to verify this method works in all browsers.
251 * @function
252 * @param handler {Function} - The event handler.
253 ** @param script {HTMLScriptElement} - The script that is about to be executed, it may not have its final textContent.
254 ** @param parent {HTMLElement} - The parent node of this script.
255 ** @param e {MutationObserver} - The observer object, call disconnect on it to stop observing.
256 */
257 beforeScript(handler) {
258 this.onInsert((node, target, observer) => {
259 if (node.tagName === "SCRIPT") {
260 handler(node, target, observer);
261 }
262 });
263 },
264
265 /**
266 * Configuration for this script.
267 * @method config
268 * @type Object
269 */
270 config() {
271 this.config.debugMode = GM_getValue("config_debugMode", this.config.debugMode);
272 this.config.allowExperimental = GM_getValue("config_allowExperimental", this.config.allowExperimental);
273 this.config.aggressiveAdflySkipper = GM_getValue("config_aggressiveAdflySkiper", this.config.aggressiveAdflySkipper);
274
275 // Home/Settings page.
276 if (this.win.location.href.startsWith(this.about.homeURL)) {
277 this.ready(() => {
278
279 // Markup setup
280 this.$('p > a[href="#userscript"]').html("Userscript is installed!");
281 this.$('#menu li > a[href="#userscript"]').parent().hide();
282 this.$('h1 > a[name="userscript"]').parent().hide().next().hide();
283 this.$('#aak-settings-notice').hide();
284 this.$('#aak-settings-box').show();
285 this.$('#aak-settings-config').html(`
286 <div> <label> <input type="checkbox" name="aggressiveAdflySkipper"> Attempt to aggressively bypass AdFly. </label> </div>
287 `);
288 this.$('#aak-settings-general').html(`
289 <div> <label> <input type="checkbox" name="allowExperimental"> Enable experimental features. </label> </div>
290 `);
291 this.$('#aak-settings-debug').html(`
292 <div> <label> <input type="checkbox" name="debugMode"> I am a developer or advanced user (enable debug mode and experimental fixes). </label> </div>
293 `);
294
295 // Pre-fill with default values.
296 const settingNames = ["aggressiveAdflySkipper", "allowExperimental", "allowGeneric", "debugMode"];
297 for (let i=0; i<settingNames.length; i++) {
298 let settingName = settingNames[i];
299 let input = this.$(`#aak-settings-box input[name="${settingName}"]`);
300 if (input.prop("type") == "checkbox") {
301 input.prop("checked", this.config[settingName]);
302 }
303 }
304
305 // Save button
306 var saveClickHandler = () => {
307 for (let i=0; i<settingNames.length; i++) {
308 let settingName = settingNames[i];
309 let input = this.$(`#aak-settings-box input[name="${settingName}"]`);
310 if (input.prop("type") == "checkbox") {
311 this.config.update("config_"+settingName, input.prop("checked"));
312 }
313 }
314 this.$(`
315 <div id="alert" style="display:block">
316 <h2 style="margin-top:40px;">Settings updated!</h2><br>
317 <button class="button hvr-bounce-to-bottom" onclick="document.querySelector('#alert').remove()">OK</button>
318 </div>
319 `).appendTo(this.doc.body);
320 };
321 if (typeof exportFunction === "function") {
322 let saveClickHandlerName = this.uid();
323 exportFunction(saveClickHandler, this.win, { defineAs: saveClickHandlerName });
324 this.addScript(`
325 document.querySelector("#aak-settings-save").onclick = window["${saveClickHandlerName}"];
326 `, this.scriptInjectMode.eval);
327 } else {
328 this.$('#aak-settings-save').on("click", saveClickHandler);
329 }
330
331 });
332 }
333
334 },
335
336 /**
337 * Sets or gets a cookie, depending on whether the value is provided or not.
338 * @method cookie
339 * @param key {String} The cookie name.
340 * @param val {String} The cookie value. Leave out to retrieve the current value.
341 * @param time {Number} Number of milliseconds in which to expire the cookie.
342 * @param path {String} The cookie path.
343 * @return {String} The value of the cookie, if "val" parameter is omitted.
344 */
345 cookie(key, val, time, path) {
346 if (typeof val === "undefined") {
347 const value = "; " + this.doc.cookie;
348 let parts = value.split("; " + key + "=");
349 if (parts.length == 2) {
350 return parts.pop().split(";").shift();
351 } else {
352 return null;
353 }
354 } else {
355 let expire = new this.win.Date();
356 expire.setTime((new this.win.Date()).getTime() + (time || 31536000000));
357 this.setProp("document.cookie",
358 key + "=" + this.win.encodeURIComponent(val) + ";expires=" + expire.toGMTString() + ";path=" + (path || "/")
359 );
360 }
361 },
362
363 /**
364 * Removes an inline script on the page, using the sample string.
365 * @method crashScript
366 * @param sample {String} Sample function string.
367 */
368 crashScript(sample) {
369 this.patchHTML((html) => {
370 return html.replace(sample, "])} \"'` ])} \n\r \r\n */ ])}");
371 });
372 },
373
374 /**
375 * Adds CSS styles to the page.
376 * @method css
377 * @param str {String} The CSS string to add.
378 */
379 css(str) {
380 let temp = str.split(";");
381 for (let i=0; i<temp.length-1; i++) {
382 if (!temp[i].endsWith("!important")) {
383 temp[i] += " !important";
384 }
385 }
386 GM_addStyle(temp.join(";"));
387 },
388
389 /**
390 * Defines a property on the unsafe window.
391 * @method defineProperty
392 * @param name {String} The property name. Can also be a dot separated syntax to traverse into embedded objects from the unsafe window.
393 * @param definition {Object} The property definition.
394 * @return {Boolean} true if property defined successfully, false otherwise.
395 */
396 defineProperty(name, definition) {
397 try {
398
399 // Code that assumes we can directly set properties on the unsafe window.
400 let property = this.win;
401 let parent;
402 let stack = name.split(".");
403 let current;
404 while (current = stack.shift()) {
405 parent = property;
406 property = parent[current];
407 if (!stack.length) {
408 this.win.Object.defineProperty(parent, current, definition);
409 }
410 }
411
412 }
413 catch(err) {
414
415 if (typeof exportFunction === "function") {
416
417 // If the first solution didn't work, we're probably in greasemonkey. A script tag needs to be injected on the page.
418 let stack = name.split(".");
419 let last = stack.pop();
420 stack.unshift("window");
421 let path = stack.join(".");
422 let templateDefinition = [];
423 if (typeof definition.configurable !== "undefined") {
424 templateDefinition.push(`configurable: ${definition.configurable}`);
425 }
426 if (typeof definition.enumerable !== "undefined") {
427 templateDefinition.push(`enumerable: ${definition.enumerable}`);
428 }
429 if (typeof definition.writable !== "undefined") {
430 templateDefinition.push(`writable: ${definition.writable}`);
431 }
432 if (typeof definition.value !== "undefined") {
433 var valueType = Object.prototype.toString.call(definition.value);
434 if (valueType === "[object String]") {
435 definition.value = '"' + definition.value.replace(/"/g, "\\\""); + '"';
436 } else if (valueType === "[object Array]" || valueType === "[object Object]") {
437 definition.value = JSON.stringify(definition.value);
438 }
439 templateDefinition.push(`value: ${definition.value}`);
440 }
441 if (typeof definition.set !== "undefined") {
442 let setter = definition.set;
443 let setterName = this.uid();
444 exportFunction(setter, this.win, { defineAs: setterName });
445 templateDefinition.push(`set: function(val) {
446 window["${setterName}"](val);
447 }`);
448 }
449 if (typeof definition.get !== "undefined") {
450 let getter = definition.get;
451 let getterName = this.uid();
452 exportFunction(getter, this.win, { defineAs: getterName });
453 templateDefinition.push(`get: function() {
454 return window["${getterName}"]();
455 }`);
456 }
457 let successStatusPropName = this.uid();
458 this.setProp(successStatusPropName, true);
459 templateDefinition = templateDefinition.join(',');
460 this.addScript(`
461 try {
462 Object.defineProperty(${path},"${last}", {
463 ${templateDefinition}
464 });
465 } catch(err) {
466 window.${successStatusPropName} = false;
467 }
468 `, this.scriptInjectMode.eval);
469
470 return this.win[successStatusPropName];
471
472 }
473 else {
474 return false;
475 }
476
477 }
478 return true;
479 },
480
481 /**
482 * The document of the unsafe window.
483 * @property doc
484 */
485 doc: win.document,
486
487 /**
488 * The domain name of the unsafe window.
489 * @property dom
490 */
491 dom: win.document.domain,
492
493 /**
494 * Compares the current domain to a list of domains, returns true if in that list.
495 * @method domCmp
496 * @param domList {Array} The list of domain names to check against.
497 * @param noErr {Boolean} Don't display errors in debug mode.
498 * @return {Boolean} true if the current domain is in the domain list.
499 */
500 domCmp(domList, noErr) {
501 for (let i=0; i<domList.length; i++) {
502 if (this.dom === domList[i] || this.dom.endsWith("." + domList[i])) {
503 if (this.config.debugMode && !noErr) {
504 this.err();
505 }
506 return true;
507 }
508 }
509 return false;
510 },
511
512 /**
513 * Checks if the current domain string is included as a sub domain or partial domain in the list.
514 * @method domInc
515 * @param domList {Array} The list of domain names to check against.
516 * @param noErr {Boolean} Don't display errors in debug mode.
517 * @return {Boolean} True if the current domain is included in the domain list.
518 */
519 domInc(domList, noErr) {
520 for (let i = 0; i < domList.length; i++) {
521 let index = this.dom.lastIndexOf(domList[i] + ".");
522 //Make sure the character before, if exists, is "."
523 if (index > 0 && this.dom.charAt(index - 1) !== '.') {
524 continue;
525 }
526 if (index > -1) {
527 if (!this.dom.substring(index + domList[i].length + 1).includes(".")) {
528 !noErr && this.err();
529 return true;
530 }
531 }
532 }
533 return false;
534 },
535
536 /**
537 * Displays a console error.
538 * @method err
539 * @param name {String} Descriptive type of error.
540 */
541 err(name) {
542 if (name) {
543 name = name + " ";
544 } else {
545 name = ""
546 }
547 this.out.error(`Uncaught AdBlock Error: ${name}AdBlocker detectors are not allowed on this device! `);
548 },
549
550 /**
551 * The original eval function of the unsafe window.
552 * @property eval
553 */
554 eval: win.eval,
555
556 /**
557 * Exports a function to the unsafe window with a random name. Returns the name of that function.
558 * @method export
559 * @param fn {Function} The function to export.
560 * @return {String} The name of the exported function on the unsafe window.
561 */
562 exportFunction(fn) {
563 let name = this.uid();
564 if (typeof exportFunction === "function") {
565 if (typeof fn === "function") {
566 exportFunction(fn, this.win, { defineAs: name });
567 } else {
568 this.setProp(name, fn);
569 }
570 } else {
571 this.win[name] = fn;
572 }
573 return name;
574 },
575
576 /**
577 * Replaces a global function with a version that can stop or modify its execution based on the arguments passed.
578 * @method filter
579 * @param func {String} The name of the function (or dot separate path to the function) to be replaced. Starts at the global context.
580 * @param method {Number} The method to match function arguments with. Defined in the enum (aak.matchMethod).
581 * @param filter {String|RegExp} This string or regex criteria that determines a match. If this matches, the original function is not executed.
582 * @param onMatch {Function} Callback when the "filter" argument matches. The return value of this function is used instead of the original function's return value.
583 * @param onAfter {Function} Callback that fires every time original function is called. The first argument is whether or not the flter matched. The second argument is the args passed into the original function.
584 * @return {Boolean} True if errors did not occur.
585 */
586 filter(func, method, filter, onMatch, onAfter) {
587
588 var applyMatchFnName = this.exportFunction((args, method, filter) => {
589 return this.applyMatch.call(this, args, method, filter);
590 });
591 var filterFnName = (filter) ? this.exportFunction(filter) : "undefined";
592 var errFnName = this.exportFunction(this.err);
593 var onMatchFnName = (onMatch) ? this.exportFunction(onMatch) : "undefined";
594 var onAfterFnName = (onAfter) ? this.exportFunction(onAfter) : "undefined";
595 let protectFuncPointersPushFnName = this.exportFunction(this.protectFunc.pointers.push);
596 let protectFuncMasksPushFnName = this.exportFunction(this.protectFunc.masks.push);
597
598 var scriptReturnVal;
599 var setReturnValueFnName = this.exportFunction((val) => {
600 scriptReturnVal = val;
601 });
602
603 this.addScript(`
604 (function() {
605 let func = "${func}";
606 let applyMatch = window.${applyMatchFnName};
607 let method = ${method};
608 let filter = window.${filterFnName};
609 let err = window.${errFnName};
610 let onMatch = window.${onMatchFnName};
611 let onAfter = window.${onAfterFnName};
612 let setReturnVal = window.${setReturnValueFnName};
613 let protectFuncPointersPush = window.${protectFuncPointersPushFnName};
614 let protectFuncMasksPush = window.${protectFuncMasksPushFnName};
615 delete window.${applyMatchFnName};
616 delete window.${filterFnName};
617 delete window.${errFnName};
618 delete window.${onMatchFnName};
619 delete window.${onAfterFnName};
620 delete window.${setReturnValueFnName};
621 delete window.${protectFuncPointersPushFnName};
622 delete window.${protectFuncMasksPushFnName};
623
624 let original = window;
625 let parent;
626
627 const newFunc = (...args) => {
628 if (${this.config.debugMode}) {
629 console.warn("${func} was called with these arguments: ");
630 for (let i=0; i<args.length; i++) {
631 console.warn(String(args[i]));
632 }
633 }
634 if (!method || applyMatch(args, method, filter)) {
635 if (${this.config.debugMode}) {
636 err();
637 }
638 let ret = undefined;
639 if (onMatch) {
640 ret = onMatch(args);
641 }
642 onAfter && onAfter(true, args);
643 return ret;
644 }
645 if (${this.config.debugMode}) {
646 console.info("Tests passed.");
647 }
648 onAfter && onAfter(true, args);
649 return original.apply(parent, args);
650 };
651 try {
652 let stack = func.split(".");
653 let current;
654 while (current = stack.shift()) {
655 parent = original;
656 original = parent[current];
657 if (!stack.length) {
658 parent[current] = newFunc;
659 }
660 }
661 if (${this.protectFunc.enabled}) {
662 protectFuncPointersPush(newFunc);
663 protectFuncMasksPush(String(original));
664 }
665 if (${this.config.debugMode}) {
666 console.warn("Filter activated on ${func}");
667 }
668 } catch(err) {
669 if (${this.config.debugMode}) {
670 console.error("AAK failed to activate filter on ${func}!");
671 }
672 return setReturnVal(false);
673 }
674 return setReturnVal(true);
675 })();
676 `, this.scriptInjectMode.eval);
677
678 return scriptReturnVal;
679 },
680
681 /**
682 * Generic anti-adblocking solutions that run on every page.
683 * @method generic
684 */
685 generic() {
686 //@pragma-keepline Based on generic solutions of Anti-Adblock Killer
687 //@pragma-keepline License: https://github.com/reek/anti-adblock-killer/blob/master/LICENSE
688 if (this.config.allowGeneric && !this.config.domExcluded) {
689 const data = {};
690 this.generic.FuckAdBlock("FuckAdBlock", "fuckAdBlock");
691 this.generic.FuckAdBlock("BlockAdBlock", "blockAdBlock");
692 this.readOnly("canRunAds", true);
693 this.readOnly("canShowAds", true);
694 this.readOnly("isAdBlockActive", false);
695 let playwireZeus;
696 this.defineProperty("Zeus", {
697 configurable: false,
698 set: function (val) {
699 playwireZeus = val;
700 },
701 get: function () {
702 this.config.debugMode && this.err("Playwire");
703 try {
704 playwireZeus.AdBlockTester = {
705 check: function (a) { a(); }
706 };
707 } catch (err) { }
708 return playwireZeus;
709 }
710 });
711 this.ready(() => {
712 if (this.win.XenForo && typeof this.win.XenForo.rellect === "object") {
713 this.config.debugMode && this.err("XenForo");
714 this.setProp("XenForo.rellect", {
715 AdBlockDetector: {
716 start: function () { }
717 }
718 });
719 }
720 if (typeof this.win.closeAdbuddy === "function") {
721 this.config.debugMode && this.err("Adbuddy");
722 this.win.closeAdbuddy();
723 }
724 if (this.$("div.adb_overlay > div.adb_modal_img").length > 0) {
725 this.config.debugMode && this.err("AdBlock Alerter");
726 this.$("div.adb_overlay").remove();
727 this.css("html,body {height:auto; overflow: auto;}");
728 }
729 if (this.$("#blockdiv").html() === "disable ad blocking or use another browser without any adblocker when you visit") {
730 this.config.debugMode && this.out.err("Uncaught AdBlock Error: Generic block screens are not allowed on this device! ");
731 this.$("#blockdiv").remove();
732 }
733 const styles = document.querySelectorAll("style");
734 for (let i = 0; i < styles.length; i++) {
735 const style = styles[i];
736 const cssRules = style.sheet.cssRules;
737 for (var j = 0; j < cssRules.length; j++) {
738 const cssRule = cssRules[j];
739 const cssText = cssRule.cssText;
740 const pattern = /^#([a-z0-9]{4,10}) ~ \* \{ display: none; \}/;
741 if (pattern.test(cssText)) {
742 const id = pattern.exec(cssText)[1];
743 if (this.$("script:contains(w.addEventListener('load'," + id + ",false))")) {
744 this.config.debugMode && this.err("Antiblock.org v2");
745 data.abo2 = id;
746 break;
747 }
748 }
749 }
750 }
751 for (let prop in this.win) {
752 try {
753 if (!prop.startsWith("webkit") && /^[a-z0-9]{4,12}$/i.test(prop) && prop !== "document" && (this.win[prop] instanceof this.win.HTMLDocument) === false && this.win.hasOwnProperty(prop) && typeof this.win[prop] === "object") {
754 const method = this.win[prop];
755 if (method.deferExecution &&
756 method.displayMessage &&
757 method.getElementBy &&
758 method.getStyle &&
759 method.insert &&
760 method.nextFunction) {
761 if (method.toggle) {
762 this.config.debugMode && this.err("BetterStopAdblock");
763 data.bsa = prop;
764 } else {
765 this.config.debugMode && this.err("Antiblock.org v3");
766 data.abo3 = prop;
767 }
768 this.setProp(prop, null);
769 }
770 if (this.win.Object.keys(method).length === 3) {
771 let isBAB = true;
772 const keyLen = this.win.Object.keys(method).join("").length;
773 if (keyLen !== 30 && keyLen !== 23) {
774 isBAB = false;
775 } else {
776 for (let prop in method) {
777 if (prop.length !== 10 && prop !== "bab") {
778 isBAB = false;
779 break;
780 }
781 }
782 }
783 if (isBAB) {
784 this.err("BlockAdBlock");
785 this.setProp(prop, null);
786 }
787 }
788 }
789 } catch (err) { }
790 }
791 });
792 const onInsertHandler = (insertedNode) => {
793 //No-Adblock
794 if (insertedNode.nodeName === "DIV" &&
795 insertedNode.id &&
796 insertedNode.id.length === 4 &&
797 /^[a-z0-9]{4}$/.test(insertedNode.id) &&
798 insertedNode.firstChild &&
799 insertedNode.firstChild.id &&
800 insertedNode.firstChild.id === insertedNode.id &&
801 insertedNode.innerHTML.includes("no-adblock.com")) {
802 this.config.debugMode && this.err("No-Adblock");
803 insertedNode.remove();
804 }
805 //StopAdblock
806 if (insertedNode.nodeName === "DIV" &&
807 insertedNode.id &&
808 insertedNode.id.length === 7 &&
809 /^a[a-z0-9]{6}$/.test(insertedNode.id) &&
810 insertedNode.parentNode &&
811 insertedNode.parentNode.id &&
812 insertedNode.parentNode.id === insertedNode.id + "2" &&
813 insertedNode.innerHTML.includes("stopadblock.org")) {
814 this.config.debugMode && this.err("StopAdblock");
815 insertedNode.remove();
816 }
817 //AntiAdblock (Packer)
818 const reIframeId = /^(zd|wd)$/;
819 const reImgId = /^(xd|gd)$/;
820 const reImgSrc = /\/ads\/banner.jpg/;
821 const reIframeSrc = /(\/adhandler\/|\/adimages\/|ad.html)/;
822 if (insertedNode.id &&
823 reImgId.test(insertedNode.id) &&
824 insertedNode.nodeName === "IMG" &&
825 reImgSrc.test(insertedNode.src) ||
826 insertedNode.id &&
827 reIframeId.test(insertedNode.id) &&
828 insertedNode.nodeName === "IFRAME" &&
829 reIframeSrc.test(insertedNode.src)) {
830 this.config.debugMode && this.err("AntiAdblock");
831 insertedNode.remove();
832 }
833 //Adunblock
834 const reId = /^[a-z]{8}$/;
835 const reClass = /^[a-z]{8} [a-z]{8}/;
836 const reBg = /^[a-z]{8}-bg$/;
837 if (typeof this.win.vtfab !== "undefined" &&
838 typeof this.win.adblock_antib !== "undefined" &&
839 insertedNode.parentNode &&
840 insertedNode.parentNode.nodeName === "BODY" &&
841 insertedNode.id &&
842 reId.test(insertedNode.id) &&
843 insertedNode.nodeName === "DIV" &&
844 insertedNode.nextSibling &&
845 insertedNode.nextSibling.className &&
846 insertedNode.nextSibling.nodeName === "DIV") {
847 if (insertedNode.className &&
848 reClass.test(insertedNode.className) &&
849 reBg.test(insertedNode.nextSibling.className) &&
850 insertedNode.nextSibling.style &&
851 insertedNode.nextSibling.style.display !== "none") {
852 this.config.debugMode && this.err("Adunblock Premium");
853 insertedNode.nextSibling.remove();
854 insertedNode.remove();
855 } else if (insertedNode.nextSibling.id &&
856 reId.test(insertedNode.nextSibling.id) &&
857 insertedNode.innerHTML.includes("Il semblerait que vous utilisiez un bloqueur de publicité !")) {
858 this.config.debugMode && this.err("Adunblock Free");
859 insertedNode.remove();
860 }
861 }
862 //Antiblock
863 const reMsgId = /^[a-z0-9]{4,10}$/i;
864 const reTag1 = /^(div|span|b|i|font|strong|center)$/i;
865 const reTag2 = /^(a|b|i|s|u|q|p|strong|center)$/i;
866 const reWords1 = /ad blocker|ad block|ad-block|adblocker|ad-blocker|adblock|bloqueur|bloqueador|Werbeblocker|adblockert|آدبلوك بلس|блокировщиком/i;
867 const reWords2 = /kapat|disable|désactivez|désactiver|desactivez|desactiver|desative|desactivar|desactive|desactiva|deaktiviere|disabilitare|απενεργοποίηση|запрещать|állítsd le|publicités|рекламе|verhindert|advert|kapatınız/i;
868 if (insertedNode.parentNode &&
869 insertedNode.id &&
870 insertedNode.style &&
871 insertedNode.childNodes.length &&
872 insertedNode.firstChild &&
873 !insertedNode.firstChild.id &&
874 !insertedNode.firstChild.className &&
875 reMsgId.test(insertedNode.id) &&
876 reTag1.test(insertedNode.nodeName) &&
877 reTag2.test(insertedNode.firstChild.nodeName)) {
878 this.config.debugMode && this.err("Antiblock.org");
879 const audio = insertedNode.querySelector("audio[loop]");
880 if (audio) {
881 audio.pause();
882 audio.remove();
883 } else if ((data.abo2 && insertedNode.id === data.abo2) ||
884 (insertedNode.firstChild.hasChildNodes() && reWords1.test(insertedNode.firstChild.innerHTML) && reWords2.test(insertedNode.firstChild.innerHTML))) {
885 insertedNode.remove();
886 } else if ((data.abo3 && insertedNode.id === data.abo3) ||
887 (insertedNode.firstChild.hasChildNodes() && insertedNode.firstChild.firstChild.nodeName === "IMG" && insertedNode.firstChild.firstChild.src.startsWith("data:image/png;base64"))) {
888 aak.win[data.abo3] = null;
889 insertedNode.remove();
890 } else if (data.bsa && insertedNode.id === data.bsa) {
891 this.win[data.bsa] = null;
892 insertedNode.remove();
893 }
894 }
895 };
896 this.observe("insert", onInsertHandler);
897 } else if (this.config.debugMode) {
898 this.out.warn("Generic solutions are disabled on this domain. ");
899 }
900 },
901
902 /**
903 * Gets the name of the current script manager, if available.
904 * @method getScriptManager
905 */
906 getScriptManager() {
907 if (typeof GM_info === 'object') {
908 // Greasemonkey (Firefox)
909 if (typeof GM_info.uuid !== 'undefined') {
910 return 'Greasemonkey';
911 } // Tampermonkey (Chrome/Opera)
912 else if (typeof GM_info.scriptHandler !== 'undefined') {
913 return 'Tampermonkey';
914 }
915 } else {
916 // Scriptish (Firefox)
917 if (typeof GM_getMetadata === 'function') {
918 return 'Scriptish';
919 } // NinjaKit (Safari/Chrome)
920 else if (typeof GM_setValue !== 'undefined' &&
921 typeof GM_getResourceText === 'undefined' &&
922 typeof GM_getResourceURL === 'undefined' &&
923 typeof GM_openInTab === 'undefined' &&
924 typeof GM_setClipboard === 'undefined') {
925 return 'NinjaKit';
926 } else { // Native
927 return 'Native';
928 }
929 }
930 },
931
932 /**
933 * Initialize the script.
934 * @method init
935 * @param excluded {Object} each propery defines whether a generic solution is excluded from running.
936 */
937 init(excluded) {
938 this.$ = this.make$();
939 this.md5 = this.MD5Factory();
940 this.config();
941 this.config.debugMode && this.out.warn("Domain: " + this.dom);
942 this.config.domExcluded = excluded.all;
943 if (this.config.debugMode && excluded.all) {
944 this.out.warn("This domain is in excluded list. ");
945 }
946 if (!excluded.all) {
947 this.generic();
948 if (excluded.Adfly) {
949 this.out.log("AAK: This domain is excluded from Adfly bypasser.");
950 } else {
951 this.generic.AdflySkipper();
952 }
953 if (excluded.adsjsV2) {
954 this.out.log("AAK: This domain is excluded from Ads JS V2.");
955 } else {
956 this.generic.adsjsV2();
957 }
958 if (excluded.NoAdBlock) {
959 this.out.log("AAK: This domain is excluded from NoAdBlock.");
960 } else {
961 this.generic.NoAdBlock();
962 }
963 }
964 },
965
966 /**
967 * Inject standalone script to the page.
968 * @function
969 * @param payload {String|Function} The script to inject.
970 * @param [isReady=false] {Boolean} Set this to true if the payload does not need a wrapper.
971 */
972 inject(payload, isReady) {
973 var text = isReady ? payload : `(${payload})();`;
974 this.addScript(text);
975 },
976
977 /**
978 * Converts an object into a string. For functions, only the function body is taken.
979 * @method intoString
980 * @param a {Any} The object to convert
981 * @param {String} The string representation of the object.
982 */
983 intoString(a) {
984 if (typeof a === 'function') {
985 var str = a.toString();
986 var first = str.indexOf("{") + 1;
987 var last = str.lastIndexOf("}");
988 return str.substr(first, last - first).trim();
989 } else if (typeof a === 'object') {
990 return JSON.stringify(a);
991 } else { // array or string
992 return a.toString();
993 }
994 },
995
996 /**
997 * Install XMLHttpRequest loopback engine. Should be called once on document-start if needed.
998 * The request will always be sent so event handlers can be triggered. Depending on the website, a background redirect
999 * may also be required.
1000 * @method loopback
1001 * @param {Function} server - The loopback server.
1002 ** @param {Any} ...args - The arguments supplied to open.
1003 ** @return {string|Any} Return a string to override the result of this request, return anything else to not interfere.
1004 */
1005 loopback(server) {
1006 this.inject(`(() => {
1007 "use strict";
1008 const server = ${server};
1009 let original; /// XMLHttpRequest;
1010 const new XHR = function(...args) {
1011 const wrapped = new (window.Function.prototype.bind.apply(original, args));
1012 const _open = wrapped.open;
1013 wrapped.open = function(...args) {
1014 const data = server(...args);
1015 if (typeof data === "string") {
1016 window.Object.defineProperties(this, {
1017 "responseText": {
1018 configurable: false,
1019 set() {},
1020 get() {
1021 return data;
1022 }
1023 },
1024 "status": {
1025 configurable: false,
1026 set() {},
1027 get() {
1028 return 200;
1029 }
1030 },
1031 "statusText": {
1032 configurable: false,
1033 set() {},
1034 get() {
1035 return "OK";
1036 }
1037 }
1038 });
1039 }
1040 return _open.apply(wrapped, args);
1041 };
1042 return wrapped;
1043 };
1044 try {
1045 original = window.XMLHttpRequest;
1046 window.XMLHttpRequest = newXHR;
1047 } catch(err) {
1048 window.console.error("AAK failed to set up XMLHttpRequest loopback engine!");
1049 }
1050 })();`, true);
1051 },
1052
1053 /**
1054 * Create a jQuery instance.
1055 * @method make$
1056 */
1057 make$() {
1058 let $ = this.jQueryFactory(this.win, true);
1059 return $;
1060 },
1061
1062 /**
1063 * Match enum for the "applyMatch" method.
1064 * @property matchMethod
1065 * @type Object
1066 */
1067 matchMethod: {
1068 matchAll: 0, // Match all, this is default.
1069 string: 1, // Substring match
1070 stringExact: 2, // Exact string match, will result in match if one or more arguments matches the filter
1071 RegExp: 3, // Regular expression
1072 callback: 4 // Callback, arguments list will be supplied as an array. Retrun true for match, false for no match.
1073 },
1074
1075 /**
1076 * Creates a native video player.
1077 * @method nativePlayer
1078 * @param source {String} The source URL of the video stream.
1079 * @param [typeIn] {String} Specify a video MIME type.
1080 * @param [widthIn] {String} Specify a custom width.
1081 * @param [heightIn] {String} Specify a custom height.
1082 */
1083 nativePlayer(source, typeIn, widthIn, heightIn) {
1084 let type;
1085 if (typeIn) {
1086 type = typeIn;
1087 } else {
1088 const temp = source.split(".");
1089 switch (temp[temp.length - 1]) {
1090 case "webm":
1091 type = "video/webm";
1092 break;
1093 case "mp4":
1094 type = "video/mp4";
1095 break;
1096 case "ogg":
1097 type = "video/ogg";
1098 break;
1099 default:
1100 type = "video/mp4";
1101 break;
1102 }
1103 }
1104 const width = widthIn || "100%";
1105 const height = heightIn || "auto";
1106 return `<video width='${width}' height='${height}' controls><source src='${source}' type='${type}'></video>`;
1107 },
1108
1109 /**
1110 * Blocks scripts from accessing a global property.
1111 * @method noAccess
1112 * @param name {String} The name of the property to deny access to. Using "." will traverse an object's properties. Starts at the global context.
1113 * @return {Boolean} true if operation succeeded, false otherwise.
1114 */
1115 noAccess(name) {
1116 const errMsg = "AdBlock Error: This property may not be accessed!";
1117 let isSuccess = this.defineProperty(name, {
1118 configurable: false,
1119 set: function() {
1120 throw errMsg;
1121 },
1122 get: function() {
1123 throw errMsg;
1124 }
1125 });
1126 if (!isSuccess) {
1127 this.config.debugMode && this.out.error("AAK failed to define non-accessible property '" + name + "'!");
1128 }
1129 return isSuccess;
1130 },
1131
1132 /**
1133 * Shorthand function for observing and reacting to DOM mutations.
1134 * @method observe
1135 * @param type {String} The type of mutation to observe, "insert" or "remove".
1136 * @param callback {Function} The callback function that fires when the mutation occurs.
1137 */
1138 observe(type, callback) {
1139 if (!this.observe.init.done) {
1140 this.observe.init.done = true;
1141 this.observe.init();
1142 }
1143 switch(type) {
1144 case "insert":
1145 this.observe.insertCallbacks.push(callback);
1146 break;
1147 case "remove":
1148 this.observe.removeCallbacks.push(callback);
1149 break;
1150 }
1151 },
1152
1153 /**
1154 * Shorthand function for unsafeWindow.attachEventListener.
1155 * @method on
1156 * @param event {String} The event to listen to.
1157 * @param func {Function} The callback that fires when the event occurs.
1158 * @param capture {Boolean} "useCapture".
1159 */
1160 on(event, func, capture) {
1161 if (typeof exportFunction === "function") {
1162 var funcName = this.uid();
1163 exportFunction(func, this.win, { defineAs: funcName });
1164 this.addScript(`
1165 window.addEventListener("${event}", window.${funcName}, ${capture});
1166 delete window.${funcName};
1167 `, this.scriptInjectMode.eval);
1168 } else {
1169 this.win.addEventListener(event, func, capture);
1170 }
1171 },
1172
1173 /**
1174 * Set up DOM insert observer.
1175 * @method onInsert
1176 * @param handler {Function} - The mutation handler.
1177 ** @param insertedNode {HTMLElement} - The inserted node.
1178 ** @param target {HTMLElement} - The parent of the inserted node.
1179 ** @param e {MutationObserver} - The observer object, call disconnect on it to stop observing.
1180 */
1181 onInsert(handler) {
1182 const observer = new MutationObserver((mutations) => {
1183 for (let i = 0; i < mutations.length; i++) {
1184 for (let j = 0; j < mutations[i].addedNodes.length; j++) {
1185 handler(mutations[i].addedNodes[j], mutations[i].target, observer);
1186 }
1187 }
1188 });
1189 observer.observe(document, {
1190 childList: true,
1191 subtree: true,
1192 });
1193 },
1194
1195 /**
1196 * Set up DOM remove observer.
1197 * @method onRemove
1198 * @param handler {Function} - The mutation handler.
1199 ** @param removedNode {HTMLElement} - The removed node.
1200 ** @param target {HTMLElement} - The parent of the removed node.
1201 ** @param e {MutationObserver} - The observer object, call disconnect on it to stop observing.
1202 */
1203 onRemove(handler) {
1204 const observer = new MutationObserver((mutations) => {
1205 for (let i = 0; i < mutations.length; i++) {
1206 for (let j = 0; j < mutations[i].removedNodes.length; j++) {
1207 handler(mutations[i].removedNodes[j], mutations[i].target, observer);
1208 }
1209 }
1210 });
1211 observer.observe(document, {
1212 childList: true,
1213 subtree: true,
1214 });
1215 },
1216
1217 /**
1218 * The console of the unsafe window
1219 * @property out
1220 */
1221 out: win.console,
1222
1223 /**
1224 * Modify the HTML of the entire page before it loads.
1225 * @method patchHTML
1226 * @param patcher {Function} Function that is passed the HTML of the page, and returns the replacement.
1227 */
1228 patchHTML(patcher) {
1229 this.win.stop();
1230 GM_xmlhttpRequest({
1231 method: "GET",
1232 url: this.doc.location.href,
1233 headers: {
1234 "Referer": this.doc.referer
1235 },
1236 onload: (result) => {
1237 this.doc.write(patcher(result.responseText));
1238 }
1239 });
1240 },
1241
1242 /**
1243 * Patches Function.prototype.toString so our modifications can't be detected by the page script.
1244 * @method patchToString
1245 */
1246 patchToString() {
1247 aak.addScript(function() {
1248 (function() {
1249 var originalToString = Function.prototype.toString;
1250 Function.prototype.toString = function () {
1251 if (this === window.XMLHttpRequest || this === window.setTimeout || this === window.setInterval || this === Function.prototype.toString) {
1252 return `function ${this.name}() { [native code] }`;
1253 } else {
1254 return originalToString.apply(this, arguments);
1255 }
1256 };
1257 })();
1258 });
1259
1260 },
1261
1262 /**
1263 * Stops websites from detecting function modifications by utilizing the toString method of the function. Used in conjunction with "filter".
1264 * @method protectFunc
1265 */
1266 protectFunc() {
1267 this.protectFunc.enabled = true;
1268 const original = this.win.Function.prototype.toString;
1269 const newFunc = () => {
1270 const index = this.protectFunc.pointers.indexOf(this);
1271 if (index === -1) {
1272 return original.apply(this);
1273 } else {
1274 return this.protectFunc.masks[index];
1275 }
1276 };
1277 try {
1278 this.win.Function.prototype.toString = newFunc;
1279 this.protectFunc.pointers.push(newFunc);
1280 this.protectFunc.masks.push(String(original));
1281 this.config.debugMode && this.out.warn("Functions protected.");
1282 } catch(err) {
1283 this.config.debugMode && this.out.error("AAK failed to protect functions!");
1284 return false;
1285 }
1286 return true;
1287 },
1288
1289 /**
1290 * Makes it so a global property is not modifiable by further scripts.
1291 * @method noAccess
1292 * @param name {String} The name of the property to make read-only. Using "." will traverse an object's properties. Starts at the global context.
1293 * @param val {Any} The desired value of the read-only property.
1294 * @return {Boolean} true if operation succeeded, false otherwise.
1295 */
1296 readOnly(name, val) {
1297 let isSuccess = this.defineProperty(name, {
1298 configurable: false,
1299 set: function() {},
1300 get: function() {
1301 return val;
1302 }
1303 });
1304 if (!isSuccess) {
1305 this.config.debugMode && this.out.error("AAK failed to define non-accessible property '" + name + "'!");
1306 }
1307 return isSuccess;
1308 },
1309
1310 /**
1311 * Fires when the DOM is ready for modification.
1312 * @method ready
1313 * @param func {Function} Callback to fire when DOM is ready.
1314 * @param capture {Boolean} Whether or not the callback should fire before event target.
1315 */
1316 ready(func, capture) {
1317 this.on("DOMContentLoaded", func, capture);
1318 },
1319
1320 /**
1321 * Redirects the page with a get or post request. Use this instead of window.location.href for greater compatibility.
1322 * @method redirect
1323 * @param url {String} The URL to redirect to.
1324 * @param [method="get"] {String} The redirection method, "get" or "post".
1325 * @param [params] {Object} Either get params or post body data, depending on the method.
1326 */
1327 redirect(url, method, params) {
1328 var callRedirect = () => {
1329 method = (method || "get").toLowerCase();
1330
1331 let form = this.doc.createElement("form");
1332 form.method = method;
1333 form.action = url;
1334
1335 if (params) {
1336 for (let key in params) {
1337 if (params.hasOwnProperty(key)) {
1338 let hiddenField = this.doc.createElement("input");
1339 hiddenField.type = "hidden";
1340 hiddenField.name = key;
1341 hiddenField.value = params[key];
1342 form.appendChild(hiddenField);
1343 }
1344 }
1345 }
1346
1347 let submitButton = this.doc.createElement("input");
1348 submitButton.style.display = "none";
1349 submitButton.type = "submit";
1350 form.appendChild(submitButton);
1351
1352 const e = this.doc.body || this.doc.documentElement;
1353 e.appendChild(form);
1354 submitButton.click();
1355 e.removeChild(form);
1356 };
1357 if (document.readyState == "interactive" || document.readyState == "complete") {
1358 callRedirect();
1359 } else {
1360 this.ready(() => {
1361 callRedirect();
1362 });
1363 }
1364 },
1365
1366 /**
1367 * Install XMLHttpRequest replace engine. Should be called once on document-start if needed.
1368 * @method replace
1369 * @param handler {Function} - The replace handler.
1370 * @runtime this, method, url, isAsync, user, passwd, ...rest
1371 ** Keyword this and arguments passed to XMLHttpRequest.prototype.open().
1372 * @runtime replace
1373 ** Replace payload.
1374 ** @method
1375 ** @param {This} that - The keyword this.
1376 ** @param {string} text - The new payload.
1377 */
1378 replace(handler) {
1379 this.inject(`(() => {
1380 "use strict";
1381 const replace = (that, text) => {
1382 window.Object.defineProperty(that, "responseText", {
1383 configurable: false,
1384 set() {},
1385 get() {
1386 return text;
1387 }
1388 });
1389 window.Object.defineProperty(that, "response", {
1390 configurable: false,
1391 set() {},
1392 get() {
1393 return text;
1394 }
1395 });
1396 };
1397 try {
1398 const _open = window.XMLHttpRequest.prototype.open;
1399 window.XMLHttpRequest.prototype.open = function(method, url, isAsync, user, passwd, ...rest) {
1400 (${handler})();
1401 return _open.call(this, method, url, isAsync, user, passwd, ...rest);
1402 };
1403 } catch(err) {
1404 window.console.error("AAK failed to set up XMLHttpRequest replace engine!");
1405 }
1406 })();`, true);
1407 },
1408
1409 /**
1410 * Enum for "addScript" function's second argument.
1411 * @property scriptInjectMode
1412 */
1413 scriptInjectMode: {
1414 default: 0, // Tries to figure it out based on the current client.
1415 eval: 1, // Runs an eval on the script.
1416 drop: 2 // Inserts the script on the page as a script tag.
1417 },
1418
1419 /**
1420 * The unsafe window's setInterval.
1421 * @property setInterval
1422 */
1423 setInterval: (win.setInterval).bind(win),
1424
1425 /**
1426 * Sets a property on the unsafe window.
1427 * @method setProp
1428 * @param name {String} The name of the property to set. Can use a dot separated syntax to drill down into objects.
1429 * @param val {Any} The value of the property.
1430 */
1431 setProp(name, val) {
1432 if (Object.prototype.toString.call(name) === "[object Array]") {
1433 name = name.join(".");
1434 }
1435 if (typeof exportFunction === "function") {
1436 var valFunction = function() {
1437 return val;
1438 };
1439 var valFunctionName = this.uid();
1440 exportFunction(valFunction, this.win, { defineAs: valFunctionName });
1441 this.addScript(`
1442 window.${name} = ${valFunctionName}();
1443 delete ${valFunctionName};
1444 `, this.scriptInjectMode.eval);
1445 }
1446 else {
1447 let original = this.win;
1448 let parent;
1449 let stack = name.split(".");
1450 let current;
1451 while (current = stack.shift()) {
1452 parent = original;
1453 original = parent[current];
1454 if (!stack.length) {
1455 parent[current] = val;
1456 }
1457 }
1458 }
1459 },
1460
1461 /**
1462 * The unsafe window's setTimeout.
1463 * @property setTimeout
1464 */
1465 setTimeout: (win.setTimeout).bind(win),
1466
1467 /**
1468 * Creates a SHA-256 hash signature of provided string.
1469 * @method sha256
1470 * @param r {String} The string to encrypt.
1471 */
1472 sha256(r) {
1473 //@pragma-keepline Based on work of Angel Marin and Paul Johnston
1474 //@pragma-keepline More information: http://www.webtoolkit.info/javascript-sha256.html
1475 function n(r, n) {
1476 var t = (65535 & r) + (65535 & n),
1477 e = (r >> 16) + (n >> 16) + (t >> 16);
1478 return e << 16 | 65535 & t;
1479 }
1480 function t(r, n) {
1481 return r >>> n | r << 32 - n;
1482 }
1483 function e(r, n) {
1484 return r >>> n;
1485 }
1486 function o(r, n, t) {
1487 return r & n ^ ~r & t;
1488 }
1489 function u(r, n, t) {
1490 return r & n ^ r & t ^ n & t;
1491 }
1492 function a(r) {
1493 return t(r, 2) ^ t(r, 13) ^ t(r, 22);
1494 }
1495 function f(r) {
1496 return t(r, 6) ^ t(r, 11) ^ t(r, 25);
1497 }
1498 function c(r) {
1499 return t(r, 7) ^ t(r, 18) ^ e(r, 3);
1500 }
1501 function i(r) {
1502 return t(r, 17) ^ t(r, 19) ^ e(r, 10);
1503 }
1504 function h(r, t) {
1505 var e, h, C, g, d, v, A, l, m, S, y, w, b = new Array(1116352408, 1899447441, 3049323471, 3921009573, 961987163, 1508970993, 2453635748, 2870763221, 3624381080, 310598401, 607225278, 1426881987, 1925078388, 2162078206, 2614888103, 3248222580, 3835390401, 4022224774, 264347078, 604807628, 770255983, 1249150122, 1555081692, 1996064986, 2554220882, 2821834349, 2952996808, 3210313671, 3336571891, 3584528711, 113926993, 338241895, 666307205, 773529912, 1294757372, 1396182291, 1695183700, 1986661051, 2177026350, 2456956037, 2730485921, 2820302411, 3259730800, 3345764771, 3516065817, 3600352804, 4094571909, 275423344, 430227734, 506948616, 659060556, 883997877, 958139571, 1322822218, 1537002063, 1747873779, 1955562222, 2024104815, 2227730452, 2361852424, 2428436474, 2756734187, 3204031479, 3329325298),
1506 p = new Array(1779033703, 3144134277, 1013904242, 2773480762, 1359893119, 2600822924, 528734635, 1541459225),
1507 s = new Array(64);
1508 r[t >> 5] |= 128 << 24 - t % 32, r[(t + 64 >> 9 << 4) + 15] = t;
1509 for (m = 0; m < r.length; m += 16) {
1510 e = p[0], h = p[1], C = p[2], g = p[3], d = p[4], v = p[5], A = p[6], l = p[7];
1511 for (S = 0; 64 > S; S++) 16 > S ? s[S] = r[S + m] : s[S] = n(n(n(i(s[S - 2]), s[S - 7]), c(s[S - 15])), s[S - 16]), y = n(n(n(n(l, f(d)), o(d, v, A)), b[S]), s[S]), w = n(a(e), u(e, h, C)), l = A, A = v, v = d, d = n(g, y), g = C, C = h, h = e, e = n(y, w);
1512 p[0] = n(e, p[0]), p[1] = n(h, p[1]), p[2] = n(C, p[2]), p[3] = n(g, p[3]), p[4] = n(d, p[4]), p[5] = n(v, p[5]), p[6] = n(A, p[6]), p[7] = n(l, p[7]);
1513 }
1514 return p;
1515 }
1516 function C(r) {
1517 for (var n = Array(), t = (1 << v) - 1, e = 0; e < r.length * v; e += v) n[e >> 5] |= (r.charCodeAt(e / v) & t) << 24 - e % 32;
1518 return n;
1519 }
1520 function g(r) {
1521 r = r.replace(/\r\n/g, "\n");
1522 for (var n = "", t = 0; t < r.length; t++) {
1523 var e = r.charCodeAt(t);
1524 128 > e ? n += String.fromCharCode(e) : e > 127 && 2048 > e ? (n += String.fromCharCode(e >> 6 | 192), n += String.fromCharCode(63 & e | 128)) : (n += String.fromCharCode(e >> 12 | 224), n += String.fromCharCode(e >> 6 & 63 | 128), n += String.fromCharCode(63 & e | 128));
1525 }
1526 return n;
1527 }
1528 function d(r) {
1529 for (var n = A ? "0123456789ABCDEF" : "0123456789abcdef", t = "", e = 0; e < 4 * r.length; e++) t += n.charAt(r[e >> 2] >> 8 * (3 - e % 4) + 4 & 15) + n.charAt(r[e >> 2] >> 8 * (3 - e % 4) & 15);
1530 return t;
1531 }
1532 var v = 8,
1533 A = 0;
1534 return r = g(r), d(h(C(r), r.length * v));
1535 },
1536
1537 /**
1538 * Similar to "filter", except all arguments are multiplied by a "ratio" for detection on the next call. Usually used on "setInterval".
1539 * @method timewarp
1540 */
1541 timewarp(func, method, filter, onMatch, onAfter, ratio) {
1542 ratio = ratio || 0.02;
1543
1544 var applyMatchFnName = this.exportFunction((args, method, filter) => {
1545 this.applyMatch.call(this, args, method, filter);
1546 });
1547 var filterFnName = (filter) ? this.exportFunction(filter) : "undefined";
1548 var errFnName = this.exportFunction(this.err);
1549 var onMatchFnName = (onMatch) ? this.exportFunction(onMatch) : "undefined";
1550 var onAfterFnName = (onAfter) ? this.exportFunction(onAfter) : "undefined";
1551 let protectFuncPointersPushFnName = this.exportFunction(this.protectFunc.pointers.push);
1552 let protectFuncMasksPushFnName = this.exportFunction(this.protectFunc.masks.push);
1553
1554 var scriptReturnVal;
1555 var setReturnValueFnName = this.exportFunction((val) => {
1556 scriptReturnVal = val;
1557 });
1558
1559 this.addScript(`
1560 (function() {
1561 let func = "${func}";
1562 let ratio = ${ratio};
1563 let applyMatch = window.${applyMatchFnName};
1564 let method = ${method};
1565 let filter = window.${filterFnName};
1566 let err = window.${errFnName};
1567 let onMatch = window.${onMatchFnName};
1568 let onAfter = window.${onAfterFnName};
1569 let setReturnVal = window.${setReturnValueFnName};
1570 let protectFuncPointersPush = window.${protectFuncPointersPushFnName};
1571 let protectFuncMasksPush = window.${protectFuncMasksPushFnName};
1572 delete window.${applyMatchFnName};
1573 delete window.${filterFnName};
1574 delete window.${errFnName};
1575 delete window.${onMatchFnName};
1576 delete window.${onAfterFnName};
1577 delete window.${setReturnValueFnName};
1578 delete window.${protectFuncPointersPushFnName};
1579 delete window.${protectFuncMasksPushFnName};
1580
1581 let original = window[func];
1582
1583 const newFunc = (...args) => {
1584 if (${this.config.debugMode}) {
1585 console.warn("Timewarpped ${func} is called with these arguments: ");
1586 for (let i=0; i<args.length; i++) {
1587 console.warn(String(args[i]));
1588 }
1589 }
1590 if (!method || applyMatch(args, method, filter)) {
1591 if (${this.config.debugMode}) {
1592 console.warn("Timewarpped. ");
1593 }
1594 onMatch && onMatch(args);
1595 onAfter && onAfter(true, args);
1596 args[1] = args[1] * ratio;
1597 return original.apply(window, args);
1598 } else {
1599 if (${this.config.debugMode}) {
1600 console.info("Not timewarpped. ");
1601 }
1602 onAfter && onAfter(true, args);
1603 return original.apply(window, args);
1604 }
1605 };
1606 try {
1607 window[func] = newFunc;
1608 if (${this.protectFunc.enabled}) {
1609 protectFuncPointersPush(newFunc);
1610 protectFuncMasksPush(String(original));
1611 }
1612 if (${this.config.debugMode}) {
1613 console.warn("Timewarp activated on ${func}");
1614 }
1615 } catch(err) {
1616 if (${this.config.debugMode}) {
1617 console.error("AAK failed to activate timewarp on ${func}!");
1618 }
1619 return setReturnVal(false);
1620 }
1621 return setReturnVal(true);
1622 })();
1623 `, this.scriptInjectMode.eval);
1624
1625 return scriptReturnVal;
1626 },
1627
1628 /**
1629 * Generated a unique ID string.
1630 * @method uid
1631 * @return {String} The unique id.
1632 */
1633 uid() {
1634 const chars = "abcdefghijklnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
1635 let str = "";
1636 for (let i = 0; i < 10; i++) {
1637 str += chars.charAt(this.win.Math.floor(this.win.Math.random() * chars.length));
1638 }
1639 this.uid.counter++;
1640 return str + this.uid.counter.toString();
1641 },
1642
1643 /**
1644 * Converts an adblock/uBlock address filter rule to a regex object.
1645 * @method urlFilterToRegex
1646 * @param rule {String} The filter to convert (should not include options after $ or element blocking ##)
1647 * @return {RegExp} The RegExp object.
1648 */
1649 urlFilterToRegex(rule) {
1650 let regex = "";
1651 let matches = rule.split(",");
1652 let matchRegexes = [];
1653 for (let i=0; i<matches.length; i++) {
1654 let matchStr = matches[i];
1655 let matchRegex = "";
1656 let matchTokens = [];
1657 let currentToken = "";
1658
1659 // Identify special tokens.
1660 for (let ii=0; ii<matchStr.length; ii++) {
1661 if (matchStr[ii] === "*" || matchStr[ii] === "^" || matchStr[ii] === "|") {
1662 if (currentToken) matchTokens.push(currentToken);
1663 currentToken = matchStr[ii];
1664 if (matchStr[ii+1] && matchStr[ii+1] === "|") {
1665 currentToken += "|";
1666 ii++;
1667 }
1668 matchTokens.push(currentToken);
1669 currentToken = "";
1670 } else {
1671 currentToken += matchStr[ii];
1672 }
1673 }
1674 if (currentToken) matchTokens.push(currentToken);
1675
1676 // Loop through tokens and build regex.
1677 for (let ii=0; ii<matchTokens.length; ii++) {
1678 currentToken = matchTokens[ii];
1679 if (currentToken === "*") {
1680 matchRegex += ".*?";
1681 } else if (currentToken === "^") {
1682 matchRegex += "(^|$|[^a-zA-Z0-9_\\-\\.\\%])";
1683 } else if (currentToken === "||") {
1684 matchRegex += "^(http|https|ftp)\\:\\/\\/([a-zA-Z0-9\\-\\.\\%]{1,}\\.){0,}";
1685 } else if (currentToken === "|") {
1686 matchRegex += "(^|$)";
1687 } else {
1688 // Normal text token; escape regex special characters.
1689 matchRegex += currentToken.replace(/(?:(\\)|(\^)|(\$)|(\{)|(|})|(\[)|(|])|(\()|(\))|(\.)|(\*)|(\+)|(\?)|(\|)|(\<)|(\>)|(\-)|(\&))/g, function(str) { return (str) ? "\\"+str : "" });
1690 }
1691 }
1692 matchRegexes.push(matchRegex);
1693 }
1694 regex = "(" + matchRegexes.join("|") + ")";
1695 return new RegExp(regex, "g");
1696 },
1697
1698 /**
1699 * Creates a videoJS player.
1700 * @method videoJS
1701 *
1702 */
1703 videoJS(sources, types, width, height) {
1704 let html = `<video id="uBlock_Protector_Video_Player" class="video-js vjs-default-skin" controls preload="auto" width="${width}" height="${height}" data-setup="{}">`;
1705 for (let i = 0; i < sources.length; i++) {
1706 html += `<source src="${sources[i]}" type="${types[i]}">`;
1707 }
1708 html += `</video>`;
1709 return html;
1710 },
1711
1712 /**
1713 * The unsafe window. Use for read-only access.
1714 * Writing directly does not work in all setups. Use the "setProp" method to write.
1715 * @property window
1716 */
1717 win: win,
1718
1719 /**
1720 * Modifies the response text of an XHR request.
1721 * @method xhrSpoof
1722 * @param urlFilter {String} Matches the request URL based on the adblock/uBlock filter syntax.
1723 * @param replacement {String} The replacement for the response text.
1724 */
1725 xhrSpoof(urlFilter, replacement) {
1726 this.xhrSpoof.rules.push(this.urlFilterToRegex(urlFilter));
1727 this.xhrSpoof.replacements.push(replacement);
1728 if (!this.xhrSpoof.injected) {
1729
1730 let getReplacementIndex = (url) => {
1731 let index = -1;
1732 for (let i=0; i<this.xhrSpoof.rules.length; i++) {
1733 if (this.xhrSpoof.rules[i].test(url)) {
1734 index = i;
1735 this.xhrSpoof.rules[i].lastIndex = 0;
1736 break;
1737 }
1738 }
1739 return index;
1740 };
1741 let getReplacementIndexName = this.exportFunction(getReplacementIndex);
1742
1743 let getReplacementValue = (index) => {
1744 return this.xhrSpoof.replacements[index];
1745 };
1746 let getReplacementValueName = this.exportFunction(getReplacementValue);
1747
1748 this.addScript(`
1749 (function(proxied) {
1750 var getReplacementIndex = window.${getReplacementIndexName};
1751 delete window.${getReplacementIndexName};
1752 var getReplacementValue = window.${getReplacementValueName};
1753 delete window.${getReplacementValueName};
1754
1755 window.XMLHttpRequest = function() {
1756 var wrapped = new(Function.prototype.bind.apply(proxied, arguments));
1757
1758 var open = wrapped.open;
1759 wrapped.open = function(method, url, async) {
1760
1761 // Determine absolute path
1762 var link = document.createElement("a");
1763 link.href = url;
1764
1765 let replacementIndex = getReplacementIndex(link.protocol+"//"+link.host+link.pathname+link.search+link.hash);
1766 if (replacementIndex > -1) {
1767 Object.defineProperty(this, "responseText", {
1768 writable: true,
1769 value: getReplacementValue(replacementIndex)
1770 });
1771 }
1772
1773 return open.call(wrapped, method, url, async);
1774 };
1775
1776 return wrapped;
1777 };
1778 })(XMLHttpRequest);
1779 `, this.scriptInjectMode.eval);
1780 }
1781 }
1782
1783 };
1784
1785 /*
1786 * Static properties for aak.config
1787 */
1788 aak.config.aggressiveAdflySkipper = true;
1789 aak.config.allowExperimental = true;
1790 aak.config.allowGeneric = true;
1791 aak.config.debugMode = false;
1792 aak.config.domExcluded = null;
1793 aak.config.update = (id, val) => {
1794 const names = [
1795 "config_debugMode",
1796 "config_allowExperimental",
1797 "config_aggressiveAdflySkiper"
1798 ];
1799 if (names.includes(id)) {
1800 GM_setValue(id, Boolean(val));
1801 }
1802 };
1803
1804 /*
1805 * Static properties for aak.generic
1806 */
1807 aak.generic.AdflySkipper = function () {
1808 //@pragma-keepline Based on AdsBypasser
1809 //@pragma-keepline License: https://github.com/adsbypasser/adsbypasser/blob/master/LICENSE
1810 const handler = function (encodedURL) {
1811 if (aak.doc.body) {
1812 return;
1813 }
1814 const index = encodedURL.indexOf("!HiTommy");
1815 if (index >= 0) {
1816 encodedURL = encodedURL.substring(0, index);
1817 }
1818 let var1 = "", var2 = "";
1819 for (let i = 0; i < encodedURL.length; ++i) {
1820 if (i % 2 === 0) {
1821 var1 = var1 + encodedURL.charAt(i);
1822 } else {
1823 var2 = encodedURL.charAt(i) + var2;
1824 }
1825 }
1826 let decodedURL = aak.win.atob(var1 + var2);
1827 decodedURL = decodedURL.substr(2);
1828 if (aak.win.location.hash) {
1829 decodedURL += aak.win.location.hash;
1830 }
1831 if (decodedURL.length > 3 && decodedURL.includes(".")) {
1832 aak.win.stop();
1833 aak.setProp("onbeforeunload", null);
1834 aak.redirect(decodedURL);
1835 }
1836 };
1837 try {
1838 let val;
1839 let flag = true;
1840 aak.defineProperty("ysmm", {
1841 configurable: false,
1842 set: function (value) {
1843 if (flag) {
1844 flag = false;
1845 try {
1846 if (typeof value === "string") {
1847 handler(value);
1848 }
1849 } catch (err) { }
1850 }
1851 val = value;
1852 },
1853 get: function () {
1854 return val;
1855 }
1856 });
1857 } catch (err) {
1858 aak.config.debugMode && aak.out.error("AAK could not set up Adfly skipper. ");
1859 }
1860 };
1861 aak.generic.adsjsV2 = function () {
1862 this.inject(() => {
1863 "use strict";
1864 const error = window.console.error.bind(window.console);
1865 const matcher = /[a-zA-Z0-9]{11,14}/; //From samples I saw, the length is 12 or 13, checking for 11 to 14 to be sure
1866 const err = new window.TypeError("Failed to execute 'getElementById' on 'Document': 1 argument required, but only 0 present.");
1867 let original; //document.getElementById
1868 const newFunc = (...args) => {
1869 if (args.length) {
1870 if (matcher.test(String(args[0]))) {
1871 let elem = original.apply(window.document, args);
1872 if (elem) {
1873 return elem;
1874 } else {
1875 error("Uncaught Error: ads.js v2 AAK detector is not allowed on this device!");
1876 return window.document.createElement("div");
1877 }
1878 } else {
1879 return original.apply(window.document, args)
1880 }
1881 } else {
1882 throw err;
1883 }
1884 };
1885 try {
1886 original = window.document.getElementById;
1887 window.document.getElementById = newFunc;
1888 } catch (err) {
1889 error("AAK failed to set up ads.js v2 defuser!");
1890 }
1891 });
1892 };
1893 aak.generic.FuckAdBlock = function (constructorName, instanceName) {
1894
1895 var patchedFuckAdBlockName = aak.uid();
1896
1897 var patchedFuckAdBlock = function () {
1898 window.patchedFuckAdBlock = function() {
1899 //@pragma-keepline Based on FuckAdBlock
1900 //@pragma-keepline License: https://github.com/sitexw/FuckAdBlock/blob/master/LICENSE
1901 this._callbacks = [];
1902 window.addEventListener("load", (function () {
1903 this.emitEvent();
1904 }).bind(this));
1905 this.setOption = function () {
1906 return this;
1907 };
1908 this.check = function () {
1909 this.emitEvent();
1910 return true;
1911 };
1912 this.emitEvent = function () {
1913 for (let i = 0; i < this._callbacks.length; i++) {
1914 this._callbacks[i]();
1915 }
1916 return this;
1917 };
1918 this.clearEvent = function () {
1919 this._callbacks = [];
1920 };
1921 this.on = function (detected, func) {
1922 //aak.config.debugMode && aak.err("FuckAdBlock");
1923 if (!detected) {
1924 this._callbacks.push(func);
1925 }
1926 return this;
1927 };
1928 this.onDetected = function () {
1929 //aak.config.debugMode && aak.err("FuckAdBlock");
1930 return this;
1931 };
1932 this.onNotDetected = function (func) {
1933 return this.on(false, func);
1934 };
1935 this.debug = {};
1936 this.debug.set = (function () {
1937 return this;
1938 }).bind(this);
1939 };
1940 };
1941
1942 patchedFuckAdBlock = aak.intoString(patchedFuckAdBlock).replace("patchedFuckAdBlock", patchedFuckAdBlockName);
1943
1944 aak.addScript(patchedFuckAdBlock, aak.scriptInjectMode.eval);
1945
1946 return aak.readOnly(constructorName, aak.win[patchedFuckAdBlockName]) && aak.readOnly(instanceName, new aak.win[constructorName]());
1947
1948 };
1949 aak.generic.NoAdBlock = () => {
1950 aak.inject(() => {
1951 "use strict";
1952 try {
1953 // Swap solutions
1954 const useSolution = 3;
1955 // Get a local instance of console error
1956 const error = window.console.error.bind(window.console);
1957 const init = () => {
1958
1959 };
1960 let needDefuse = true;
1961 let installs = {};
1962 window.CloudflareApps = window.CloudflareApps || {};
1963 window.Object.defineProperty(window.CloudflareApps, "installs", {
1964 configurable: false,
1965 set(val) {
1966 installs = val;
1967 },
1968 get() {
1969 if (needDefuse && installs instanceof window.Object) {
1970 try {
1971 for (let key in installs) {
1972 if (installs[key].appId === "ziT6U3epKObS" && installs[key].options) {
1973 // Preview does not really matter, just hard code something that works for now.
1974 window.document.body.insertAdjacentHTML("beforeend", "<style>html, body { overflow:scroll !important; } cf-div { display:none !important }</style>");
1975 } else {
1976 switch (useSolution) {
1977 case 0:
1978 // Solution 0: Emergency fallback, lock display to a closable small adb_overlay
1979 installs[key].options.warningSettings = {
1980 coverPage: false,
1981 messageTypeFull: "1",
1982 messageTypeSmall: "1"
1983 };
1984 installs[key].options.translations = {
1985 howToDisableButtonLink: "https://goo.gl/CgJEsa",
1986 howToDisableButtonText: "点我报告问题",
1987 refreshButtonText: "",
1988 showTranslations: true,
1989 warningText: "额,貌似我的黑科技失效了……",
1990 warningTitle: "",
1991 };
1992 break;
1993 case 1:
1994 // Solution 1: Set it to show up 5 to 10 years later
1995 const min = 157700000, max = 315400000;
1996 installs[key].options.advancedSettings = {
1997 analytics: false,
1998 showAdvancedSettings: true,
1999 warningDelay: window.Math.floor(window.Math.random() * (max - min) + min),
2000 };
2001 break;
2002 case 2:
2003 // Solution 2: Spoof cookies to prevent showing dialog
2004 window.document.cookie = `lastTimeWarningShown=${window.Date.now()}`;
2005 window.document.cookie = "warningFrequency=visit";
2006 installs[key].options.dismissOptions = {
2007 allowDismiss: "allow",
2008 warningFrequency: "visit",
2009 warningInterval: 1,
2010 };
2011 break;
2012 case 3:
2013 // Solution 3: Change URL patterns so it never matches
2014 window.Object.defineProperty(installs[key], "URLPatterns", {
2015 configurable: false,
2016 set() { },
2017 get() {
2018 return ["$^"];
2019 },
2020 });
2021 break;
2022 default:
2023 // Ultimate solution: stop installation, may break other Cloudflare apps
2024 delete installs[key];
2025 break;
2026 }
2027 }
2028 // Update flag and log
2029 needDefuse = false;
2030 }
2031 } catch(err) {
2032 err("AAK error during generic NoAdBlock solution", e);
2033 }
2034 }
2035 }
2036 });
2037 } catch(err) {
2038 error("AAK failed to set up NoAdBlock defuser!");
2039 }
2040 });
2041 };
2042
2043 /*
2044 * Static properties for aak.observe
2045 */
2046 aak.observe.init = () => {
2047 const observer = new MutationObserver(function(mutations) {
2048 for (let i=0; i<mutations.length; i++) {
2049 if (mutations[i].addedNodes.length) {
2050 for (let ii=0; ii<aak.observe.insertCallbacks.length; ii++) {
2051 for (let iii=0; iii<mutations[i].addedNodes.length; iii++) {
2052 aak.observe.insertCallbacks[ii](mutations[i].addedNodes[iii]);
2053 }
2054 }
2055 }
2056 if (mutations[i].removedNodes.length) {
2057 for (let ii = 0; ii < aak.observe.removeCallbacks.length; ii++) {
2058 for (let iii = 0; iii < mutations[i].removedNodes.length; iii++) {
2059 aak.observe.removeCallbacks[ii](mutations[i].removedNodes[iii]);
2060 }
2061 }
2062 }
2063 }
2064 });
2065 observer.observe(aak.doc, {
2066 childList: true,
2067 subtree: true
2068 });
2069 };
2070 aak.observe.init.done = false;
2071 aak.observe.insertCallbacks = [];
2072 aak.observe.removeCallbacks = [];
2073
2074 /*
2075 * Static properties for aak.protectFunc
2076 */
2077 aak.protectFunc.enabled = false;
2078 aak.protectFunc.pointers = [];
2079 aak.protectFunc.masks = [];
2080
2081 /*
2082 * Static properties for aak.uuid
2083 */
2084 aak.uid.counter = 0;
2085
2086 /*
2087 * Static properties for aak.videoJS
2088 */
2089 aak.videoJS.init = (...args) => {
2090 try {
2091 aak.win.HELP_IMPROVE_VIDEOJS = false;
2092 } catch (err) { }
2093 let plugins = args.join();
2094 aak.$("head").append(`<link href="//vjs.zencdn.net/5.4.6/video-js.min.css" rel="stylesheet"><script src="//vjs.zencdn.net/5.4.6/video.min.js"><\/script>${plugins}`);
2095 };
2096 aak.videoJS.plugins = {};
2097 aak.videoJS.plugins.hls = `<script src="//cdnjs.cloudflare.com/ajax/libs/videojs-contrib-hls/5.4.0/videojs-contrib-hls.min.js"><\/script>`;
2098
2099 /*
2100 * Static properties for aak.xhrSpoof
2101 */
2102 aak.xhrSpoof.injected = false;
2103 aak.xhrSpoof.rules = [];
2104 aak.xhrSpoof.replacements = [];
2105
2106 return aak;
2107
2108})((typeof unsafeWindow !== "undefined") ? unsafeWindow : window);
2109
2110/*==========================================================================
2111| MD5Factory based on yamd5.js | (c) gorhill | github.com/gorhill/yamd5.js |
2112===========================================================================*/
2113
2114a.MD5Factory=function(){'use strict';var f=function(r,s){var t=r[0],u=r[1],v=r[2],w=r[3];t+=0|(u&v|~u&w)+s[0]-680876936,t=0|(t<<7|t>>>25)+u,w+=0|(t&u|~t&v)+s[1]-389564586,w=0|(w<<12|w>>>20)+t,v+=0|(w&t|~w&u)+s[2]+606105819,v=0|(v<<17|v>>>15)+w,u+=0|(v&w|~v&t)+s[3]-1044525330,u=0|(u<<22|u>>>10)+v,t+=0|(u&v|~u&w)+s[4]-176418897,t=0|(t<<7|t>>>25)+u,w+=0|(t&u|~t&v)+s[5]+1200080426,w=0|(w<<12|w>>>20)+t,v+=0|(w&t|~w&u)+s[6]-1473231341,v=0|(v<<17|v>>>15)+w,u+=0|(v&w|~v&t)+s[7]-45705983,u=0|(u<<22|u>>>10)+v,t+=0|(u&v|~u&w)+s[8]+1770035416,t=0|(t<<7|t>>>25)+u,w+=0|(t&u|~t&v)+s[9]-1958414417,w=0|(w<<12|w>>>20)+t,v+=0|(w&t|~w&u)+s[10]-42063,v=0|(v<<17|v>>>15)+w,u+=0|(v&w|~v&t)+s[11]-1990404162,u=0|(u<<22|u>>>10)+v,t+=0|(u&v|~u&w)+s[12]+1804603682,t=0|(t<<7|t>>>25)+u,w+=0|(t&u|~t&v)+s[13]-40341101,w=0|(w<<12|w>>>20)+t,v+=0|(w&t|~w&u)+s[14]-1502002290,v=0|(v<<17|v>>>15)+w,u+=0|(v&w|~v&t)+s[15]+1236535329,u=0|(u<<22|u>>>10)+v,t+=0|(u&w|v&~w)+s[1]-165796510,t=0|(t<<5|t>>>27)+u,w+=0|(t&v|u&~v)+s[6]-1069501632,w=0|(w<<9|w>>>23)+t,v+=0|(w&u|t&~u)+s[11]+643717713,v=0|(v<<14|v>>>18)+w,u+=0|(v&t|w&~t)+s[0]-373897302,u=0|(u<<20|u>>>12)+v,t+=0|(u&w|v&~w)+s[5]-701558691,t=0|(t<<5|t>>>27)+u,w+=0|(t&v|u&~v)+s[10]+38016083,w=0|(w<<9|w>>>23)+t,v+=0|(w&u|t&~u)+s[15]-660478335,v=0|(v<<14|v>>>18)+w,u+=0|(v&t|w&~t)+s[4]-405537848,u=0|(u<<20|u>>>12)+v,t+=0|(u&w|v&~w)+s[9]+568446438,t=0|(t<<5|t>>>27)+u,w+=0|(t&v|u&~v)+s[14]-1019803690,w=0|(w<<9|w>>>23)+t,v+=0|(w&u|t&~u)+s[3]-187363961,v=0|(v<<14|v>>>18)+w,u+=0|(v&t|w&~t)+s[8]+1163531501,u=0|(u<<20|u>>>12)+v,t+=0|(u&w|v&~w)+s[13]-1444681467,t=0|(t<<5|t>>>27)+u,w+=0|(t&v|u&~v)+s[2]-51403784,w=0|(w<<9|w>>>23)+t,v+=0|(w&u|t&~u)+s[7]+1735328473,v=0|(v<<14|v>>>18)+w,u+=0|(v&t|w&~t)+s[12]-1926607734,u=0|(u<<20|u>>>12)+v,t+=0|(u^v^w)+s[5]-378558,t=0|(t<<4|t>>>28)+u,w+=0|(t^u^v)+s[8]-2022574463,w=0|(w<<11|w>>>21)+t,v+=0|(w^t^u)+s[11]+1839030562,v=0|(v<<16|v>>>16)+w,u+=0|(v^w^t)+s[14]-35309556,u=0|(u<<23|u>>>9)+v,t+=0|(u^v^w)+s[1]-1530992060,t=0|(t<<4|t>>>28)+u,w+=0|(t^u^v)+s[4]+1272893353,w=0|(w<<11|w>>>21)+t,v+=0|(w^t^u)+s[7]-155497632,v=0|(v<<16|v>>>16)+w,u+=0|(v^w^t)+s[10]-1094730640,u=0|(u<<23|u>>>9)+v,t+=0|(u^v^w)+s[13]+681279174,t=0|(t<<4|t>>>28)+u,w+=0|(t^u^v)+s[0]-358537222,w=0|(w<<11|w>>>21)+t,v+=0|(w^t^u)+s[3]-722521979,v=0|(v<<16|v>>>16)+w,u+=0|(v^w^t)+s[6]+76029189,u=0|(u<<23|u>>>9)+v,t+=0|(u^v^w)+s[9]-640364487,t=0|(t<<4|t>>>28)+u,w+=0|(t^u^v)+s[12]-421815835,w=0|(w<<11|w>>>21)+t,v+=0|(w^t^u)+s[15]+530742520,v=0|(v<<16|v>>>16)+w,u+=0|(v^w^t)+s[2]-995338651,u=0|(u<<23|u>>>9)+v,t+=0|(v^(u|~w))+s[0]-198630844,t=0|(t<<6|t>>>26)+u,w+=0|(u^(t|~v))+s[7]+1126891415,w=0|(w<<10|w>>>22)+t,v+=0|(t^(w|~u))+s[14]-1416354905,v=0|(v<<15|v>>>17)+w,u+=0|(w^(v|~t))+s[5]-57434055,u=0|(u<<21|u>>>11)+v,t+=0|(v^(u|~w))+s[12]+1700485571,t=0|(t<<6|t>>>26)+u,w+=0|(u^(t|~v))+s[3]-1894986606,w=0|(w<<10|w>>>22)+t,v+=0|(t^(w|~u))+s[10]-1051523,v=0|(v<<15|v>>>17)+w,u+=0|(w^(v|~t))+s[1]-2054922799,u=0|(u<<21|u>>>11)+v,t+=0|(v^(u|~w))+s[8]+1873313359,t=0|(t<<6|t>>>26)+u,w+=0|(u^(t|~v))+s[15]-30611744,w=0|(w<<10|w>>>22)+t,v+=0|(t^(w|~u))+s[6]-1560198380,v=0|(v<<15|v>>>17)+w,u+=0|(w^(v|~t))+s[13]+1309151649,u=0|(u<<21|u>>>11)+v,t+=0|(v^(u|~w))+s[4]-145523070,t=0|(t<<6|t>>>26)+u,w+=0|(u^(t|~v))+s[11]-1120210379,w=0|(w<<10|w>>>22)+t,v+=0|(t^(w|~u))+s[2]+718787259,v=0|(v<<15|v>>>17)+w,u+=0|(w^(v|~t))+s[9]-343485551,u=0|(u<<21|u>>>11)+v,r[0]=0|t+r[0],r[1]=0|u+r[1],r[2]=0|v+r[2],r[3]=0|w+r[3]},h=[],l=function(r){for(var u,v,w,s='0123456789abcdef',t=h,y=0;4>y;y++)for(v=8*y,u=r[y],w=0;8>w;w+=2)t[v+1+w]=s.charAt(15&u),u>>>=4,t[v+0+w]=s.charAt(15&u),u>>>=4;return t.join('')},m=function(){this._dataLength=0,this._state=new Int32Array(4),this._buffer=new ArrayBuffer(68),this._bufferLength=0,this._buffer8=new Uint8Array(this._buffer,0,68),this._buffer32=new Uint32Array(this._buffer,0,17),this.start()},o=new Int32Array([1732584193,-271733879,-1732584194,271733878]),p=new Int32Array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]);m.prototype.appendStr=function(r){for(var v,s=this._buffer8,t=this._buffer32,u=this._bufferLength,w=0;w<r.length;w++){if(v=r.charCodeAt(w),128>v)s[u++]=v;else if(2048>v)s[u++]=(v>>>6)+192,s[u++]=128|63&v;else if(55296>v||56319<v)s[u++]=(v>>>12)+224,s[u++]=128|63&v>>>6,s[u++]=128|63&v;else{if(v=1024*(v-55296)+(r.charCodeAt(++w)-56320)+65536,1114111<v)throw'Unicode standard supports code points up to U+10FFFF';s[u++]=(v>>>18)+240,s[u++]=128|63&v>>>12,s[u++]=128|63&v>>>6,s[u++]=128|63&v}64<=u&&(this._dataLength+=64,f(this._state,t),u-=64,t[0]=t[16])}return this._bufferLength=u,this},m.prototype.start=function(){return this._dataLength=0,this._bufferLength=0,this._state.set(o),this},m.prototype.end=function(r){var s=this._bufferLength;this._dataLength+=s;var t=this._buffer8;t[s]=128,t[s+1]=t[s+2]=t[s+3]=0;var u=this._buffer32,v=(s>>2)+1;u.set(p.subarray(v),v),55<s&&(f(this._state,u),u.set(p));var w=8*this._dataLength;if(4294967295>=w)u[14]=w;else{var y=w.toString(16).match(/(.*?)(.{0,8})$/),z=parseInt(y[2],16),A=parseInt(y[1],16)||0;u[14]=z,u[15]=A}return f(this._state,u),r?this._state:l(this._state)};var q=new m;return function(r,s){return q.start().appendStr(r).end(s)}};
2115
2116/*========
2117| jQuery |
2118=========*/
2119
2120a.jQueryFactory=function(a,b){"use strict";var c=[],d=a.document,e=Object.getPrototypeOf,f=c.slice,g=c.concat,h=c.push,i=c.indexOf,j={},k=j.toString,l=j.hasOwnProperty,m=l.toString,n=m.call(Object),o={};function p(a,b){b=b||d;var c=b.createElement("script");c.text=a,b.head.appendChild(c).parentNode.removeChild(c)}var q="3.2.1",r=function(a,b){return new r.fn.init(a,b)},s=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,t=/^-ms-/,u=/-([a-z])/g,v=function(a,b){return b.toUpperCase()};r.fn=r.prototype={jquery:q,constructor:r,length:0,toArray:function(){return f.call(this)},get:function(a){return null==a?f.call(this):a<0?this[a+this.length]:this[a]},pushStack:function(a){var b=r.merge(this.constructor(),a);return b.prevObject=this,b},each:function(a){return r.each(this,a)},map:function(a){return this.pushStack(r.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(f.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(a<0?b:0);return this.pushStack(c>=0&&c<b?[this[c]]:[])},end:function(){return this.prevObject||this.constructor()},push:h,sort:c.sort,splice:c.splice},r.extend=r.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||r.isFunction(g)||(g={}),h===i&&(g=this,h--);h<i;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(r.isPlainObject(d)||(e=Array.isArray(d)))?(e?(e=!1,f=c&&Array.isArray(c)?c:[]):f=c&&r.isPlainObject(c)?c:{},g[b]=r.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},r.extend({expando:"jQuery"+(q+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===r.type(a)},isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){var b=r.type(a);return("number"===b||"string"===b)&&!isNaN(a-parseFloat(a))},isPlainObject:function(a){var b,c;return!(!a||"[object Object]"!==k.call(a))&&(!(b=e(a))||(c=l.call(b,"constructor")&&b.constructor,"function"==typeof c&&m.call(c)===n))},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?j[k.call(a)]||"object":typeof a},globalEval:function(a){p(a)},camelCase:function(a){return a.replace(t,"ms-").replace(u,v)},each:function(a,b){var c,d=0;if(w(a)){for(c=a.length;d<c;d++)if(b.call(a[d],d,a[d])===!1)break}else for(d in a)if(b.call(a[d],d,a[d])===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(s,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(w(Object(a))?r.merge(c,"string"==typeof a?[a]:a):h.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:i.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;d<c;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;f<g;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,e,f=0,h=[];if(w(a))for(d=a.length;f<d;f++)e=b(a[f],f,c),null!=e&&h.push(e);else for(f in a)e=b(a[f],f,c),null!=e&&h.push(e);return g.apply([],h)},guid:1,proxy:function(a,b){var c,d,e;if("string"==typeof b&&(c=a[b],b=a,a=c),r.isFunction(a))return d=f.call(arguments,2),e=function(){return a.apply(b||this,d.concat(f.call(arguments)))},e.guid=a.guid=a.guid||r.guid++,e},now:Date.now,support:o}),"function"==typeof Symbol&&(r.fn[Symbol.iterator]=c[Symbol.iterator]),r.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(a,b){j["[object "+b+"]"]=b.toLowerCase()});function w(a){var b=!!a&&"length"in a&&a.length,c=r.type(a);return"function"!==c&&!r.isWindow(a)&&("array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a)}var x=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ha(),z=ha(),A=ha(),B=function(a,b){return a===b&&(l=!0),0},C={}.hasOwnProperty,D=[],E=D.pop,F=D.push,G=D.push,H=D.slice,I=function(a,b){for(var c=0,d=a.length;c<d;c++)if(a[c]===b)return c;return-1},J="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",K="[\\x20\\t\\r\\n\\f]",L="(?:\\\\.|[\\w-]|[^\0-\\xa0])+",M="\\["+K+"*("+L+")(?:"+K+"*([*^$|!~]?=)"+K+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+L+"))|)"+K+"*\\]",N=":("+L+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+M+")*)|.*)\\)|)",O=new RegExp(K+"+","g"),P=new RegExp("^"+K+"+|((?:^|[^\\\\])(?:\\\\.)*)"+K+"+$","g"),Q=new RegExp("^"+K+"*,"+K+"*"),R=new RegExp("^"+K+"*([>+~]|"+K+")"+K+"*"),S=new RegExp("="+K+"*([^\\]'\"]*?)"+K+"*\\]","g"),T=new RegExp(N),U=new RegExp("^"+L+"$"),V={ID:new RegExp("^#("+L+")"),CLASS:new RegExp("^\\.("+L+")"),TAG:new RegExp("^("+L+"|[*])"),ATTR:new RegExp("^"+M),PSEUDO:new RegExp("^"+N),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+K+"*(even|odd|(([+-]|)(\\d*)n|)"+K+"*(?:([+-]|)"+K+"*(\\d+)|))"+K+"*\\)|)","i"),bool:new RegExp("^(?:"+J+")$","i"),needsContext:new RegExp("^"+K+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+K+"*((?:-\\d)?\\d*)"+K+"*\\)|)(?=[^-]|$)","i")},W=/^(?:input|select|textarea|button)$/i,X=/^h\d$/i,Y=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,$=/[+~]/,_=new RegExp("\\\\([\\da-f]{1,6}"+K+"?|("+K+")|.)","ig"),aa=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:d<0?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},ba=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ca=function(a,b){return b?"\0"===a?"\ufffd":a.slice(0,-1)+"\\"+a.charCodeAt(a.length-1).toString(16)+" ":"\\"+a},da=function(){m()},ea=ta(function(a){return a.disabled===!0&&("form"in a||"label"in a)},{dir:"parentNode",next:"legend"});try{G.apply(D=H.call(v.childNodes),v.childNodes),D[v.childNodes.length].nodeType}catch(fa){G={apply:D.length?function(a,b){F.apply(a,H.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function ga(a,b,d,e){var f,h,j,k,l,o,r,s=b&&b.ownerDocument,w=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==w&&9!==w&&11!==w)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==w&&(l=Z.exec(a)))if(f=l[1]){if(9===w){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(s&&(j=s.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(l[2])return G.apply(d,b.getElementsByTagName(a)),d;if((f=l[3])&&c.getElementsByClassName&&b.getElementsByClassName)return G.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==w)s=b,r=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(ba,ca):b.setAttribute("id",k=u),o=g(a),h=o.length;while(h--)o[h]="#"+k+" "+sa(o[h]);r=o.join(","),s=$.test(a)&&qa(b.parentNode)||b}if(r)try{return G.apply(d,s.querySelectorAll(r)),d}catch(x){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(P,"$1"),b,d,e)}function ha(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ia(a){return a[u]=!0,a}function ja(a){var b=n.createElement("fieldset");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ka(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function la(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&a.sourceIndex-b.sourceIndex;if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function na(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function oa(a){return function(b){return"form"in b?b.parentNode&&b.disabled===!1?"label"in b?"label"in b.parentNode?b.parentNode.disabled===a:b.disabled===a:b.isDisabled===a||b.isDisabled!==!a&&ea(b)===a:b.disabled===a:"label"in b&&b.disabled===a}}function pa(a){return ia(function(b){return b=+b,ia(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function qa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=ga.support={},f=ga.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return!!b&&"HTML"!==b.nodeName},m=ga.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),v!==n&&(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ja(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ja(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Y.test(n.getElementsByClassName),c.getById=ja(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){return a.getAttribute("id")===b}},d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}}):(d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}},d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c,d,e,f=b.getElementById(a);if(f){if(c=f.getAttributeNode("id"),c&&c.value===a)return[f];e=b.getElementsByName(a),d=0;while(f=e[d++])if(c=f.getAttributeNode("id"),c&&c.value===a)return[f]}return[]}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){if("undefined"!=typeof b.getElementsByClassName&&p)return b.getElementsByClassName(a)},r=[],q=[],(c.qsa=Y.test(n.querySelectorAll))&&(ja(function(a){o.appendChild(a).innerHTML="<a id='"+u+"'></a><select id='"+u+"-\r\\' msallowcapture=''><option selected=''></option></select>",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+K+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+K+"*(?:value|"+J+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ja(function(a){a.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+K+"*[*^$|!~]?="),2!==a.querySelectorAll(":enabled").length&&q.push(":enabled",":disabled"),o.appendChild(a).disabled=!0,2!==a.querySelectorAll(":disabled").length&&q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Y.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ja(function(a){c.disconnectedMatch=s.call(a,"*"),s.call(a,"[s!='']:x"),r.push("!=",N)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Y.test(o.compareDocumentPosition),t=b||Y.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?I(k,a)-I(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?I(k,a)-I(k,b):0;if(e===f)return la(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?la(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},ga.matches=function(a,b){return ga(a,null,null,b)},ga.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(S,"='$1']"),c.matchesSelector&&p&&!A[b+" "]&&(!r||!r.test(b))&&(!q||!q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return ga(b,n,null,[a]).length>0},ga.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},ga.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&C.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},ga.escape=function(a){return(a+"").replace(ba,ca)},ga.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},ga.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=ga.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=ga.selectors={cacheLength:50,createPseudo:ia,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(_,aa),a[3]=(a[3]||a[4]||a[5]||"").replace(_,aa),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||ga.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&ga.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return V.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&T.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(_,aa).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+K+")"+a+"("+K+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=ga.attr(d,a);return null==e?"!="===b:!b||(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(O," ")+" ").indexOf(c)>-1:"|="===b&&(e===c||e.slice(0,c.length+1)===c+"-"))}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||ga.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ia(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=I(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ia(function(a){var b=[],c=[],d=h(a.replace(P,"$1"));return d[u]?ia(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ia(function(a){return function(b){return ga(a,b).length>0}}),contains:ia(function(a){return a=a.replace(_,aa),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ia(function(a){return U.test(a||"")||ga.error("unsupported lang: "+a),a=a.replace(_,aa).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:oa(!1),disabled:oa(!0),checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return X.test(a.nodeName)},input:function(a){return W.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:pa(function(){return[0]}),last:pa(function(a,b){return[b-1]}),eq:pa(function(a,b,c){return[c<0?c+b:c]}),even:pa(function(a,b){for(var c=0;c<b;c+=2)a.push(c);return a}),odd:pa(function(a,b){for(var c=1;c<b;c+=2)a.push(c);return a}),lt:pa(function(a,b,c){for(var d=c<0?c+b:c;--d>=0;)a.push(d);return a}),gt:pa(function(a,b,c){for(var d=c<0?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=ma(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=na(b);function ra(){}ra.prototype=d.filters=d.pseudos,d.setFilters=new ra,g=ga.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){c&&!(e=Q.exec(h))||(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=R.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(P," ")}),h=h.slice(c.length));for(g in d.filter)!(e=V[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?ga.error(a):z(a,i).slice(0)};function sa(a){for(var b=0,c=a.length,d="";b<c;b++)d+=a[b].value;return d}function ta(a,b,c){var d=b.dir,e=b.next,f=e||d,g=c&&"parentNode"===f,h=x++;return b.first?function(b,c,e){while(b=b[d])if(1===b.nodeType||g)return a(b,c,e);return!1}:function(b,c,i){var j,k,l,m=[w,h];if(i){while(b=b[d])if((1===b.nodeType||g)&&a(b,c,i))return!0}else while(b=b[d])if(1===b.nodeType||g)if(l=b[u]||(b[u]={}),k=l[b.uniqueID]||(l[b.uniqueID]={}),e&&e===b.nodeName.toLowerCase())b=b[d]||b;else{if((j=k[f])&&j[0]===w&&j[1]===h)return m[2]=j[2];if(k[f]=m,m[2]=a(b,c,i))return!0}return!1}}function ua(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function va(a,b,c){for(var d=0,e=b.length;d<e;d++)ga(a,b[d],c);return c}function wa(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;h<i;h++)(f=a[h])&&(c&&!c(f,d,e)||(g.push(f),j&&b.push(h)));return g}function xa(a,b,c,d,e,f){return d&&!d[u]&&(d=xa(d)),e&&!e[u]&&(e=xa(e,f)),ia(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||va(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:wa(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=wa(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?I(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=wa(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):G.apply(g,r)})}function ya(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ta(function(a){return a===b},h,!0),l=ta(function(a){return I(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];i<f;i++)if(c=d.relative[a[i].type])m=[ta(ua(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;e<f;e++)if(d.relative[a[e].type])break;return xa(i>1&&ua(m),i>1&&sa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(P,"$1"),c,i<e&&ya(a.slice(i,e)),e<f&&ya(a=a.slice(e)),e<f&&sa(a))}m.push(c)}return ua(m)}function za(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s="0",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG("*",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=E.call(i));u=wa(u)}G.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&ga.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ia(f):f}return h=ga.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=ya(b[c]),f[u]?d.push(f):e.push(f);f=A(a,za(e,d)),f.selector=a}return f},i=ga.select=function(a,b,c,e){var f,i,j,k,l,m="function"==typeof a&&a,n=!e&&g(a=m.selector||a);if(c=c||[],1===n.length){if(i=n[0]=n[0].slice(0),i.length>2&&"ID"===(j=i[0]).type&&9===b.nodeType&&p&&d.relative[i[1].type]){if(b=(d.find.ID(j.matches[0].replace(_,aa),b)||[])[0],!b)return c;m&&(b=b.parentNode),a=a.slice(i.shift().value.length)}f=V.needsContext.test(a)?0:i.length;while(f--){if(j=i[f],d.relative[k=j.type])break;if((l=d.find[k])&&(e=l(j.matches[0].replace(_,aa),$.test(i[0].type)&&qa(b.parentNode)||b))){if(i.splice(f,1),a=e.length&&sa(i),!a)return G.apply(c,e),c;break}}}return(m||h(a,n))(e,b,!p,c,!b||$.test(a)&&qa(b.parentNode)||b),c},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ja(function(a){return 1&a.compareDocumentPosition(n.createElement("fieldset"))}),ja(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||ka("type|href|height|width",function(a,b,c){if(!c)return a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ja(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ka("value",function(a,b,c){if(!c&&"input"===a.nodeName.toLowerCase())return a.defaultValue}),ja(function(a){return null==a.getAttribute("disabled")})||ka(J,function(a,b,c){var d;if(!c)return a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),ga}(a);r.find=x,r.expr=x.selectors,r.expr[":"]=r.expr.pseudos,r.uniqueSort=r.unique=x.uniqueSort,r.text=x.getText,r.isXMLDoc=x.isXML,r.contains=x.contains,r.escapeSelector=x.escape;var y=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&r(a).is(c))break;d.push(a)}return d},z=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},A=r.expr.match.needsContext;function B(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()}var C=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i,D=/^.[^:#\[\.,]*$/;function E(a,b,c){return r.isFunction(b)?r.grep(a,function(a,d){return!!b.call(a,d,a)!==c}):b.nodeType?r.grep(a,function(a){return a===b!==c}):"string"!=typeof b?r.grep(a,function(a){return i.call(b,a)>-1!==c}):D.test(b)?r.filter(b,a,c):(b=r.filter(b,a),r.grep(a,function(a){return i.call(b,a)>-1!==c&&1===a.nodeType}))}r.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?r.find.matchesSelector(d,a)?[d]:[]:r.find.matches(a,r.grep(b,function(a){return 1===a.nodeType}))},r.fn.extend({find:function(a){var b,c,d=this.length,e=this;if("string"!=typeof a)return this.pushStack(r(a).filter(function(){for(b=0;b<d;b++)if(r.contains(e[b],this))return!0}));for(c=this.pushStack([]),b=0;b<d;b++)r.find(a,e[b],c);return d>1?r.uniqueSort(c):c},filter:function(a){return this.pushStack(E(this,a||[],!1))},not:function(a){return this.pushStack(E(this,a||[],!0))},is:function(a){return!!E(this,"string"==typeof a&&A.test(a)?r(a):a||[],!1).length}});var F,G=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,H=r.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||F,"string"==typeof a){if(e="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:G.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof r?b[0]:b,r.merge(this,r.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),C.test(e[1])&&r.isPlainObject(b))for(e in b)r.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}return f=d.getElementById(e[2]),f&&(this[0]=f,this.length=1),this}return a.nodeType?(this[0]=a,this.length=1,this):r.isFunction(a)?void 0!==c.ready?c.ready(a):a(r):r.makeArray(a,this)};H.prototype=r.fn,F=r(d);var I=/^(?:parents|prev(?:Until|All))/,J={children:!0,contents:!0,next:!0,prev:!0};r.fn.extend({has:function(a){var b=r(a,this),c=b.length;return this.filter(function(){for(var a=0;a<c;a++)if(r.contains(this,b[a]))return!0})},closest:function(a,b){var c,d=0,e=this.length,f=[],g="string"!=typeof a&&r(a);if(!A.test(a))for(;d<e;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&r.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?r.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?i.call(r(a),this[0]):i.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(r.uniqueSort(r.merge(this.get(),r(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function K(a,b){while((a=a[b])&&1!==a.nodeType);return a}r.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return y(a,"parentNode")},parentsUntil:function(a,b,c){return y(a,"parentNode",c)},next:function(a){return K(a,"nextSibling")},prev:function(a){return K(a,"previousSibling")},nextAll:function(a){return y(a,"nextSibling")},prevAll:function(a){return y(a,"previousSibling")},nextUntil:function(a,b,c){return y(a,"nextSibling",c)},prevUntil:function(a,b,c){return y(a,"previousSibling",c)},siblings:function(a){return z((a.parentNode||{}).firstChild,a)},children:function(a){return z(a.firstChild)},contents:function(a){return B(a,"iframe")?a.contentDocument:(B(a,"template")&&(a=a.content||a),r.merge([],a.childNodes))}},function(a,b){r.fn[a]=function(c,d){var e=r.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=r.filter(d,e)),this.length>1&&(J[a]||r.uniqueSort(e),I.test(a)&&e.reverse()),this.pushStack(e)}});var L=/[^\x20\t\r\n\f]+/g;function M(a){var b={};return r.each(a.match(L)||[],function(a,c){b[c]=!0}),b}r.Callbacks=function(a){a="string"==typeof a?M(a):r.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=e||a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h<f.length)f[h].apply(c[0],c[1])===!1&&a.stopOnFalse&&(h=f.length,c=!1)}a.memory||(c=!1),b=!1,e&&(f=c?[]:"")},j={add:function(){return f&&(c&&!b&&(h=f.length-1,g.push(c)),function d(b){r.each(b,function(b,c){r.isFunction(c)?a.unique&&j.has(c)||f.push(c):c&&c.length&&"string"!==r.type(c)&&d(c)})}(arguments),c&&!b&&i()),this},remove:function(){return r.each(arguments,function(a,b){var c;while((c=r.inArray(b,f,c))>-1)f.splice(c,1),c<=h&&h--}),this},has:function(a){return a?r.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c="",this},disabled:function(){return!f},lock:function(){return e=g=[],c||b||(f=c=""),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j};function N(a){return a}function O(a){throw a}function P(a,b,c,d){var e;try{a&&r.isFunction(e=a.promise)?e.call(a).done(b).fail(c):a&&r.isFunction(e=a.then)?e.call(a,b,c):b.apply(void 0,[a].slice(d))}catch(a){c.apply(void 0,[a])}}r.extend({Deferred:function(b){var c=[["notify","progress",r.Callbacks("memory"),r.Callbacks("memory"),2],["resolve","done",r.Callbacks("once memory"),r.Callbacks("once memory"),0,"resolved"],["reject","fail",r.Callbacks("once memory"),r.Callbacks("once memory"),1,"rejected"]],d="pending",e={state:function(){return d},always:function(){return f.done(arguments).fail(arguments),this},"catch":function(a){return e.then(null,a)},pipe:function(){var a=arguments;return r.Deferred(function(b){r.each(c,function(c,d){var e=r.isFunction(a[d[4]])&&a[d[4]];f[d[1]](function(){var a=e&&e.apply(this,arguments);a&&r.isFunction(a.promise)?a.promise().progress(b.notify).done(b.resolve).fail(b.reject):b[d[0]+"With"](this,e?[a]:arguments)})}),a=null}).promise()},then:function(b,d,e){var f=0;function g(b,c,d,e){return function(){var h=this,i=arguments,j=function(){var a,j;if(!(b<f)){if(a=d.apply(h,i),a===c.promise())throw new TypeError("Thenable self-resolution");j=a&&("object"==typeof a||"function"==typeof a)&&a.then,r.isFunction(j)?e?j.call(a,g(f,c,N,e),g(f,c,O,e)):(f++,j.call(a,g(f,c,N,e),g(f,c,O,e),g(f,c,N,c.notifyWith))):(d!==N&&(h=void 0,i=[a]),(e||c.resolveWith)(h,i))}},k=e?j:function(){try{j()}catch(a){r.Deferred.exceptionHook&&r.Deferred.exceptionHook(a,k.stackTrace),b+1>=f&&(d!==O&&(h=void 0,i=[a]),c.rejectWith(h,i))}};b?k():(r.Deferred.getStackHook&&(k.stackTrace=r.Deferred.getStackHook()),a.setTimeout(k))}}return r.Deferred(function(a){c[0][3].add(g(0,a,r.isFunction(e)?e:N,a.notifyWith)),c[1][3].add(g(0,a,r.isFunction(b)?b:N)),c[2][3].add(g(0,a,r.isFunction(d)?d:O))}).promise()},promise:function(a){return null!=a?r.extend(a,e):e}},f={};return r.each(c,function(a,b){var g=b[2],h=b[5];e[b[1]]=g.add,h&&g.add(function(){d=h},c[3-a][2].disable,c[0][2].lock),g.add(b[3].fire),f[b[0]]=function(){return f[b[0]+"With"](this===f?void 0:this,arguments),this},f[b[0]+"With"]=g.fireWith}),e.promise(f),b&&b.call(f,f),f},when:function(a){var b=arguments.length,c=b,d=Array(c),e=f.call(arguments),g=r.Deferred(),h=function(a){return function(c){d[a]=this,e[a]=arguments.length>1?f.call(arguments):c,--b||g.resolveWith(d,e)}};if(b<=1&&(P(a,g.done(h(c)).resolve,g.reject,!b),"pending"===g.state()||r.isFunction(e[c]&&e[c].then)))return g.then();while(c--)P(e[c],h(c),g.reject);return g.promise()}});var Q=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;r.Deferred.exceptionHook=function(b,c){a.console&&a.console.warn&&b&&Q.test(b.name)&&a.console.warn("jQuery.Deferred exception: "+b.message,b.stack,c)},r.readyException=function(b){a.setTimeout(function(){throw b})};var R=r.Deferred();r.fn.ready=function(a){return R.then(a)["catch"](function(a){r.readyException(a)}),this},r.extend({isReady:!1,readyWait:1,ready:function(a){(a===!0?--r.readyWait:r.isReady)||(r.isReady=!0,a!==!0&&--r.readyWait>0||R.resolveWith(d,[r]))}}),r.ready.then=R.then;function S(){d.removeEventListener("DOMContentLoaded",S),
2121a.removeEventListener("load",S),r.ready()}"complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll?a.setTimeout(r.ready):(d.addEventListener("DOMContentLoaded",S),a.addEventListener("load",S));var T=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===r.type(c)){e=!0;for(h in c)T(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,r.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(r(a),c)})),b))for(;h<i;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},U=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function V(){this.expando=r.expando+V.uid++}V.uid=1,V.prototype={cache:function(a){var b=a[this.expando];return b||(b={},U(a)&&(a.nodeType?a[this.expando]=b:Object.defineProperty(a,this.expando,{value:b,configurable:!0}))),b},set:function(a,b,c){var d,e=this.cache(a);if("string"==typeof b)e[r.camelCase(b)]=c;else for(d in b)e[r.camelCase(d)]=b[d];return e},get:function(a,b){return void 0===b?this.cache(a):a[this.expando]&&a[this.expando][r.camelCase(b)]},access:function(a,b,c){return void 0===b||b&&"string"==typeof b&&void 0===c?this.get(a,b):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d=a[this.expando];if(void 0!==d){if(void 0!==b){Array.isArray(b)?b=b.map(r.camelCase):(b=r.camelCase(b),b=b in d?[b]:b.match(L)||[]),c=b.length;while(c--)delete d[b[c]]}(void 0===b||r.isEmptyObject(d))&&(a.nodeType?a[this.expando]=void 0:delete a[this.expando])}},hasData:function(a){var b=a[this.expando];return void 0!==b&&!r.isEmptyObject(b)}};var W=new V,X=new V,Y=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,Z=/[A-Z]/g;function $(a){return"true"===a||"false"!==a&&("null"===a?null:a===+a+""?+a:Y.test(a)?JSON.parse(a):a)}function _(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(Z,"-$&").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c=$(c)}catch(e){}X.set(a,b,c)}else c=void 0;return c}r.extend({hasData:function(a){return X.hasData(a)||W.hasData(a)},data:function(a,b,c){return X.access(a,b,c)},removeData:function(a,b){X.remove(a,b)},_data:function(a,b,c){return W.access(a,b,c)},_removeData:function(a,b){W.remove(a,b)}}),r.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=X.get(f),1===f.nodeType&&!W.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=r.camelCase(d.slice(5)),_(f,d,e[d])));W.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){X.set(this,a)}):T(this,function(b){var c;if(f&&void 0===b){if(c=X.get(f,a),void 0!==c)return c;if(c=_(f,a),void 0!==c)return c}else this.each(function(){X.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){X.remove(this,a)})}}),r.extend({queue:function(a,b,c){var d;if(a)return b=(b||"fx")+"queue",d=W.get(a,b),c&&(!d||Array.isArray(c)?d=W.access(a,b,r.makeArray(c)):d.push(c)),d||[]},dequeue:function(a,b){b=b||"fx";var c=r.queue(a,b),d=c.length,e=c.shift(),f=r._queueHooks(a,b),g=function(){r.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return W.get(a,c)||W.access(a,c,{empty:r.Callbacks("once memory").add(function(){W.remove(a,[b+"queue",c])})})}}),r.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?r.queue(this[0],a):void 0===b?this:this.each(function(){var c=r.queue(this,a,b);r._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&r.dequeue(this,a)})},dequeue:function(a){return this.each(function(){r.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=r.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=W.get(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var aa=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,ba=new RegExp("^(?:([+-])=|)("+aa+")([a-z%]*)$","i"),ca=["Top","Right","Bottom","Left"],da=function(a,b){return a=b||a,"none"===a.style.display||""===a.style.display&&r.contains(a.ownerDocument,a)&&"none"===r.css(a,"display")},ea=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};function fa(a,b,c,d){var e,f=1,g=20,h=d?function(){return d.cur()}:function(){return r.css(a,b,"")},i=h(),j=c&&c[3]||(r.cssNumber[b]?"":"px"),k=(r.cssNumber[b]||"px"!==j&&+i)&&ba.exec(r.css(a,b));if(k&&k[3]!==j){j=j||k[3],c=c||[],k=+i||1;do f=f||".5",k/=f,r.style(a,b,k+j);while(f!==(f=h()/i)&&1!==f&&--g)}return c&&(k=+k||+i||0,e=c[1]?k+(c[1]+1)*c[2]:+c[2],d&&(d.unit=j,d.start=k,d.end=e)),e}var ga={};function ha(a){var b,c=a.ownerDocument,d=a.nodeName,e=ga[d];return e?e:(b=c.body.appendChild(c.createElement(d)),e=r.css(b,"display"),b.parentNode.removeChild(b),"none"===e&&(e="block"),ga[d]=e,e)}function ia(a,b){for(var c,d,e=[],f=0,g=a.length;f<g;f++)d=a[f],d.style&&(c=d.style.display,b?("none"===c&&(e[f]=W.get(d,"display")||null,e[f]||(d.style.display="")),""===d.style.display&&da(d)&&(e[f]=ha(d))):"none"!==c&&(e[f]="none",W.set(d,"display",c)));for(f=0;f<g;f++)null!=e[f]&&(a[f].style.display=e[f]);return a}r.fn.extend({show:function(){return ia(this,!0)},hide:function(){return ia(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){da(this)?r(this).show():r(this).hide()})}});var ja=/^(?:checkbox|radio)$/i,ka=/<([a-z][^\/\0>\x20\t\r\n\f]+)/i,la=/^$|\/(?:java|ecma)script/i,ma={option:[1,"<select multiple='multiple'>","</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};ma.optgroup=ma.option,ma.tbody=ma.tfoot=ma.colgroup=ma.caption=ma.thead,ma.th=ma.td;function na(a,b){var c;return c="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):[],void 0===b||b&&B(a,b)?r.merge([a],c):c}function oa(a,b){for(var c=0,d=a.length;c<d;c++)W.set(a[c],"globalEval",!b||W.get(b[c],"globalEval"))}var pa=/<|&#?\w+;/;function qa(a,b,c,d,e){for(var f,g,h,i,j,k,l=b.createDocumentFragment(),m=[],n=0,o=a.length;n<o;n++)if(f=a[n],f||0===f)if("object"===r.type(f))r.merge(m,f.nodeType?[f]:f);else if(pa.test(f)){g=g||l.appendChild(b.createElement("div")),h=(ka.exec(f)||["",""])[1].toLowerCase(),i=ma[h]||ma._default,g.innerHTML=i[1]+r.htmlPrefilter(f)+i[2],k=i[0];while(k--)g=g.lastChild;r.merge(m,g.childNodes),g=l.firstChild,g.textContent=""}else m.push(b.createTextNode(f));l.textContent="",n=0;while(f=m[n++])if(d&&r.inArray(f,d)>-1)e&&e.push(f);else if(j=r.contains(f.ownerDocument,f),g=na(l.appendChild(f),"script"),j&&oa(g),c){k=0;while(f=g[k++])la.test(f.type||"")&&c.push(f)}return l}!function(){var a=d.createDocumentFragment(),b=a.appendChild(d.createElement("div")),c=d.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),o.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="<textarea>x</textarea>",o.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var ra=d.documentElement,sa=/^key/,ta=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,ua=/^([^.]*)(?:\.(.+)|)/;function va(){return!0}function wa(){return!1}function xa(){try{return d.activeElement}catch(a){}}function ya(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)ya(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=wa;else if(!e)return a;return 1===f&&(g=e,e=function(a){return r().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=r.guid++)),a.each(function(){r.event.add(this,b,e,d,c)})}r.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=W.get(a);if(q){c.handler&&(f=c,c=f.handler,e=f.selector),e&&r.find.matchesSelector(ra,e),c.guid||(c.guid=r.guid++),(i=q.events)||(i=q.events={}),(g=q.handle)||(g=q.handle=function(b){return"undefined"!=typeof r&&r.event.triggered!==b.type?r.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(L)||[""],j=b.length;while(j--)h=ua.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n&&(l=r.event.special[n]||{},n=(e?l.delegateType:l.bindType)||n,l=r.event.special[n]||{},k=r.extend({type:n,origType:p,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&r.expr.match.needsContext.test(e),namespace:o.join(".")},f),(m=i[n])||(m=i[n]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,o,g)!==!1||a.addEventListener&&a.addEventListener(n,g)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),r.event.global[n]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=W.hasData(a)&&W.get(a);if(q&&(i=q.events)){b=(b||"").match(L)||[""],j=b.length;while(j--)if(h=ua.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n){l=r.event.special[n]||{},n=(d?l.delegateType:l.bindType)||n,m=i[n]||[],h=h[2]&&new RegExp("(^|\\.)"+o.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&p!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,o,q.handle)!==!1||r.removeEvent(a,n,q.handle),delete i[n])}else for(n in i)r.event.remove(a,n+b[j],c,d,!0);r.isEmptyObject(i)&&W.remove(a,"handle events")}},dispatch:function(a){var b=r.event.fix(a),c,d,e,f,g,h,i=new Array(arguments.length),j=(W.get(this,"events")||{})[b.type]||[],k=r.event.special[b.type]||{};for(i[0]=b,c=1;c<arguments.length;c++)i[c]=arguments[c];if(b.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,b)!==!1){h=r.event.handlers.call(this,b,j),c=0;while((f=h[c++])&&!b.isPropagationStopped()){b.currentTarget=f.elem,d=0;while((g=f.handlers[d++])&&!b.isImmediatePropagationStopped())b.rnamespace&&!b.rnamespace.test(g.namespace)||(b.handleObj=g,b.data=g.data,e=((r.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==e&&(b.result=e)===!1&&(b.preventDefault(),b.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,b),b.result}},handlers:function(a,b){var c,d,e,f,g,h=[],i=b.delegateCount,j=a.target;if(i&&j.nodeType&&!("click"===a.type&&a.button>=1))for(;j!==this;j=j.parentNode||this)if(1===j.nodeType&&("click"!==a.type||j.disabled!==!0)){for(f=[],g={},c=0;c<i;c++)d=b[c],e=d.selector+" ",void 0===g[e]&&(g[e]=d.needsContext?r(e,this).index(j)>-1:r.find(e,this,null,[j]).length),g[e]&&f.push(d);f.length&&h.push({elem:j,handlers:f})}return j=this,i<b.length&&h.push({elem:j,handlers:b.slice(i)}),h},addProp:function(a,b){Object.defineProperty(r.Event.prototype,a,{enumerable:!0,configurable:!0,get:r.isFunction(b)?function(){if(this.originalEvent)return b(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[a]},set:function(b){Object.defineProperty(this,a,{enumerable:!0,configurable:!0,writable:!0,value:b})}})},fix:function(a){return a[r.expando]?a:new r.Event(a)},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==xa()&&this.focus)return this.focus(),!1},delegateType:"focusin"},blur:{trigger:function(){if(this===xa()&&this.blur)return this.blur(),!1},delegateType:"focusout"},click:{trigger:function(){if("checkbox"===this.type&&this.click&&B(this,"input"))return this.click(),!1},_default:function(a){return B(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}}},r.removeEvent=function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c)},r.Event=function(a,b){return this instanceof r.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?va:wa,this.target=a.target&&3===a.target.nodeType?a.target.parentNode:a.target,this.currentTarget=a.currentTarget,this.relatedTarget=a.relatedTarget):this.type=a,b&&r.extend(this,b),this.timeStamp=a&&a.timeStamp||r.now(),void(this[r.expando]=!0)):new r.Event(a,b)},r.Event.prototype={constructor:r.Event,isDefaultPrevented:wa,isPropagationStopped:wa,isImmediatePropagationStopped:wa,isSimulated:!1,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=va,a&&!this.isSimulated&&a.preventDefault()},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=va,a&&!this.isSimulated&&a.stopPropagation()},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=va,a&&!this.isSimulated&&a.stopImmediatePropagation(),this.stopPropagation()}},r.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,"char":!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:function(a){var b=a.button;return null==a.which&&sa.test(a.type)?null!=a.charCode?a.charCode:a.keyCode:!a.which&&void 0!==b&&ta.test(a.type)?1&b?1:2&b?3:4&b?2:0:a.which}},r.event.addProp),r.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){r.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return e&&(e===d||r.contains(d,e))||(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),r.fn.extend({on:function(a,b,c,d){return ya(this,a,b,c,d)},one:function(a,b,c,d){return ya(this,a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,r(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return b!==!1&&"function"!=typeof b||(c=b,b=void 0),c===!1&&(c=wa),this.each(function(){r.event.remove(this,a,c,b)})}});var za=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi,Aa=/<script|<style|<link/i,Ba=/checked\s*(?:[^=]|=\s*.checked.)/i,Ca=/^true\/(.*)/,Da=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;function Ea(a,b){return B(a,"table")&&B(11!==b.nodeType?b:b.firstChild,"tr")?r(">tbody",a)[0]||a:a}function Fa(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function Ga(a){var b=Ca.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Ha(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(W.hasData(a)&&(f=W.access(a),g=W.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;c<d;c++)r.event.add(b,e,j[e][c])}X.hasData(a)&&(h=X.access(a),i=r.extend({},h),X.set(b,i))}}function Ia(a,b){var c=b.nodeName.toLowerCase();"input"===c&&ja.test(a.type)?b.checked=a.checked:"input"!==c&&"textarea"!==c||(b.defaultValue=a.defaultValue)}function Ja(a,b,c,d){b=g.apply([],b);var e,f,h,i,j,k,l=0,m=a.length,n=m-1,q=b[0],s=r.isFunction(q);if(s||m>1&&"string"==typeof q&&!o.checkClone&&Ba.test(q))return a.each(function(e){var f=a.eq(e);s&&(b[0]=q.call(this,e,f.html())),Ja(f,b,c,d)});if(m&&(e=qa(b,a[0].ownerDocument,!1,a,d),f=e.firstChild,1===e.childNodes.length&&(e=f),f||d)){for(h=r.map(na(e,"script"),Fa),i=h.length;l<m;l++)j=e,l!==n&&(j=r.clone(j,!0,!0),i&&r.merge(h,na(j,"script"))),c.call(a[l],j,l);if(i)for(k=h[h.length-1].ownerDocument,r.map(h,Ga),l=0;l<i;l++)j=h[l],la.test(j.type||"")&&!W.access(j,"globalEval")&&r.contains(k,j)&&(j.src?r._evalUrl&&r._evalUrl(j.src):p(j.textContent.replace(Da,""),k))}return a}function Ka(a,b,c){for(var d,e=b?r.filter(b,a):a,f=0;null!=(d=e[f]);f++)c||1!==d.nodeType||r.cleanData(na(d)),d.parentNode&&(c&&r.contains(d.ownerDocument,d)&&oa(na(d,"script")),d.parentNode.removeChild(d));return a}r.extend({htmlPrefilter:function(a){return a.replace(za,"<$1></$2>")},clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=r.contains(a.ownerDocument,a);if(!(o.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||r.isXMLDoc(a)))for(g=na(h),f=na(a),d=0,e=f.length;d<e;d++)Ia(f[d],g[d]);if(b)if(c)for(f=f||na(a),g=g||na(h),d=0,e=f.length;d<e;d++)Ha(f[d],g[d]);else Ha(a,h);return g=na(h,"script"),g.length>0&&oa(g,!i&&na(a,"script")),h},cleanData:function(a){for(var b,c,d,e=r.event.special,f=0;void 0!==(c=a[f]);f++)if(U(c)){if(b=c[W.expando]){if(b.events)for(d in b.events)e[d]?r.event.remove(c,d):r.removeEvent(c,d,b.handle);c[W.expando]=void 0}c[X.expando]&&(c[X.expando]=void 0)}}}),r.fn.extend({detach:function(a){return Ka(this,a,!0)},remove:function(a){return Ka(this,a)},text:function(a){return T(this,function(a){return void 0===a?r.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=a)})},null,a,arguments.length)},append:function(){return Ja(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ea(this,a);b.appendChild(a)}})},prepend:function(){return Ja(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ea(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return Ja(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return Ja(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(r.cleanData(na(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null!=a&&a,b=null==b?a:b,this.map(function(){return r.clone(this,a,b)})},html:function(a){return T(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!Aa.test(a)&&!ma[(ka.exec(a)||["",""])[1].toLowerCase()]){a=r.htmlPrefilter(a);try{for(;c<d;c++)b=this[c]||{},1===b.nodeType&&(r.cleanData(na(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=[];return Ja(this,arguments,function(b){var c=this.parentNode;r.inArray(this,a)<0&&(r.cleanData(na(this)),c&&c.replaceChild(b,this))},a)}}),r.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){r.fn[a]=function(a){for(var c,d=[],e=r(a),f=e.length-1,g=0;g<=f;g++)c=g===f?this:this.clone(!0),r(e[g])[b](c),h.apply(d,c.get());return this.pushStack(d)}});var La=/^margin/,Ma=new RegExp("^("+aa+")(?!px)[a-z%]+$","i"),Na=function(b){var c=b.ownerDocument.defaultView;return c&&c.opener||(c=a),c.getComputedStyle(b)};!function(){function b(){if(i){i.style.cssText="box-sizing:border-box;position:relative;display:block;margin:auto;border:1px;padding:1px;top:1%;width:50%",i.innerHTML="",ra.appendChild(h);var b=a.getComputedStyle(i);c="1%"!==b.top,g="2px"===b.marginLeft,e="4px"===b.width,i.style.marginRight="50%",f="4px"===b.marginRight,ra.removeChild(h),i=null}}var c,e,f,g,h=d.createElement("div"),i=d.createElement("div");i.style&&(i.style.backgroundClip="content-box",i.cloneNode(!0).style.backgroundClip="",o.clearCloneStyle="content-box"===i.style.backgroundClip,h.style.cssText="border:0;width:8px;height:0;top:0;left:-9999px;padding:0;margin-top:1px;position:absolute",h.appendChild(i),r.extend(o,{pixelPosition:function(){return b(),c},boxSizingReliable:function(){return b(),e},pixelMarginRight:function(){return b(),f},reliableMarginLeft:function(){return b(),g}}))}();function Oa(a,b,c){var d,e,f,g,h=a.style;return c=c||Na(a),c&&(g=c.getPropertyValue(b)||c[b],""!==g||r.contains(a.ownerDocument,a)||(g=r.style(a,b)),!o.pixelMarginRight()&&Ma.test(g)&&La.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0!==g?g+"":g}function Pa(a,b){return{get:function(){return a()?void delete this.get:(this.get=b).apply(this,arguments)}}}var Qa=/^(none|table(?!-c[ea]).+)/,Ra=/^--/,Sa={position:"absolute",visibility:"hidden",display:"block"},Ta={letterSpacing:"0",fontWeight:"400"},Ua=["Webkit","Moz","ms"],Va=d.createElement("div").style;function Wa(a){if(a in Va)return a;var b=a[0].toUpperCase()+a.slice(1),c=Ua.length;while(c--)if(a=Ua[c]+b,a in Va)return a}function Xa(a){var b=r.cssProps[a];return b||(b=r.cssProps[a]=Wa(a)||a),b}function Ya(a,b,c){var d=ba.exec(b);return d?Math.max(0,d[2]-(c||0))+(d[3]||"px"):b}function Za(a,b,c,d,e){var f,g=0;for(f=c===(d?"border":"content")?4:"width"===b?1:0;f<4;f+=2)"margin"===c&&(g+=r.css(a,c+ca[f],!0,e)),d?("content"===c&&(g-=r.css(a,"padding"+ca[f],!0,e)),"margin"!==c&&(g-=r.css(a,"border"+ca[f]+"Width",!0,e))):(g+=r.css(a,"padding"+ca[f],!0,e),"padding"!==c&&(g+=r.css(a,"border"+ca[f]+"Width",!0,e)));return g}function $a(a,b,c){var d,e=Na(a),f=Oa(a,b,e),g="border-box"===r.css(a,"boxSizing",!1,e);return Ma.test(f)?f:(d=g&&(o.boxSizingReliable()||f===a.style[b]),"auto"===f&&(f=a["offset"+b[0].toUpperCase()+b.slice(1)]),f=parseFloat(f)||0,f+Za(a,b,c||(g?"border":"content"),d,e)+"px")}r.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Oa(a,"opacity");return""===c?"1":c}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":"cssFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=r.camelCase(b),i=Ra.test(b),j=a.style;return i||(b=Xa(h)),g=r.cssHooks[b]||r.cssHooks[h],void 0===c?g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:j[b]:(f=typeof c,"string"===f&&(e=ba.exec(c))&&e[1]&&(c=fa(a,b,e),f="number"),null!=c&&c===c&&("number"===f&&(c+=e&&e[3]||(r.cssNumber[h]?"":"px")),o.clearCloneStyle||""!==c||0!==b.indexOf("background")||(j[b]="inherit"),g&&"set"in g&&void 0===(c=g.set(a,c,d))||(i?j.setProperty(b,c):j[b]=c)),void 0)}},css:function(a,b,c,d){var e,f,g,h=r.camelCase(b),i=Ra.test(b);return i||(b=Xa(h)),g=r.cssHooks[b]||r.cssHooks[h],g&&"get"in g&&(e=g.get(a,!0,c)),void 0===e&&(e=Oa(a,b,d)),"normal"===e&&b in Ta&&(e=Ta[b]),""===c||c?(f=parseFloat(e),c===!0||isFinite(f)?f||0:e):e}}),r.each(["height","width"],function(a,b){r.cssHooks[b]={get:function(a,c,d){if(c)return!Qa.test(r.css(a,"display"))||a.getClientRects().length&&a.getBoundingClientRect().width?$a(a,b,d):ea(a,Sa,function(){return $a(a,b,d)})},set:function(a,c,d){var e,f=d&&Na(a),g=d&&Za(a,b,d,"border-box"===r.css(a,"boxSizing",!1,f),f);return g&&(e=ba.exec(c))&&"px"!==(e[3]||"px")&&(a.style[b]=c,c=r.css(a,b)),Ya(a,c,g)}}}),r.cssHooks.marginLeft=Pa(o.reliableMarginLeft,function(a,b){if(b)return(parseFloat(Oa(a,"marginLeft"))||a.getBoundingClientRect().left-ea(a,{marginLeft:0},function(){return a.getBoundingClientRect().left}))+"px"}),r.each({margin:"",padding:"",border:"Width"},function(a,b){r.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];d<4;d++)e[a+ca[d]+b]=f[d]||f[d-2]||f[0];return e}},La.test(a)||(r.cssHooks[a+b].set=Ya)}),r.fn.extend({css:function(a,b){return T(this,function(a,b,c){var d,e,f={},g=0;if(Array.isArray(b)){for(d=Na(a),e=b.length;g<e;g++)f[b[g]]=r.css(a,b[g],!1,d);return f}return void 0!==c?r.style(a,b,c):r.css(a,b)},a,b,arguments.length>1)}});function _a(a,b,c,d,e){return new _a.prototype.init(a,b,c,d,e)}r.Tween=_a,_a.prototype={constructor:_a,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||r.easing._default,this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(r.cssNumber[c]?"":"px")},cur:function(){var a=_a.propHooks[this.prop];return a&&a.get?a.get(this):_a.propHooks._default.get(this)},run:function(a){var b,c=_a.propHooks[this.prop];return this.options.duration?this.pos=b=r.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):_a.propHooks._default.set(this),this}},_a.prototype.init.prototype=_a.prototype,_a.propHooks={_default:{get:function(a){var b;return 1!==a.elem.nodeType||null!=a.elem[a.prop]&&null==a.elem.style[a.prop]?a.elem[a.prop]:(b=r.css(a.elem,a.prop,""),b&&"auto"!==b?b:0)},set:function(a){r.fx.step[a.prop]?r.fx.step[a.prop](a):1!==a.elem.nodeType||null==a.elem.style[r.cssProps[a.prop]]&&!r.cssHooks[a.prop]?a.elem[a.prop]=a.now:r.style(a.elem,a.prop,a.now+a.unit)}}},_a.propHooks.scrollTop=_a.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},r.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2},_default:"swing"},r.fx=_a.prototype.init,r.fx.step={};var ab,bb,cb=/^(?:toggle|show|hide)$/,db=/queueHooks$/;function eb(){bb&&(d.hidden===!1&&a.requestAnimationFrame?a.requestAnimationFrame(eb):a.setTimeout(eb,r.fx.interval),r.fx.tick())}function fb(){return a.setTimeout(function(){ab=void 0}),ab=r.now()}function gb(a,b){var c,d=0,e={height:a};for(b=b?1:0;d<4;d+=2-b)c=ca[d],e["margin"+c]=e["padding"+c]=a;return b&&(e.opacity=e.width=a),e}function hb(a,b,c){for(var d,e=(kb.tweeners[b]||[]).concat(kb.tweeners["*"]),f=0,g=e.length;f<g;f++)if(d=e[f].call(c,b,a))return d}function ib(a,b,c){var d,e,f,g,h,i,j,k,l="width"in b||"height"in b,m=this,n={},o=a.style,p=a.nodeType&&da(a),q=W.get(a,"fxshow");c.queue||(g=r._queueHooks(a,"fx"),null==g.unqueued&&(g.unqueued=0,h=g.empty.fire,g.empty.fire=function(){g.unqueued||h()}),g.unqueued++,m.always(function(){m.always(function(){g.unqueued--,r.queue(a,"fx").length||g.empty.fire()})}));for(d in b)if(e=b[d],cb.test(e)){if(delete b[d],f=f||"toggle"===e,e===(p?"hide":"show")){if("show"!==e||!q||void 0===q[d])continue;p=!0}n[d]=q&&q[d]||r.style(a,d)}if(i=!r.isEmptyObject(b),i||!r.isEmptyObject(n)){l&&1===a.nodeType&&(c.overflow=[o.overflow,o.overflowX,o.overflowY],j=q&&q.display,null==j&&(j=W.get(a,"display")),k=r.css(a,"display"),"none"===k&&(j?k=j:(ia([a],!0),j=a.style.display||j,k=r.css(a,"display"),ia([a]))),("inline"===k||"inline-block"===k&&null!=j)&&"none"===r.css(a,"float")&&(i||(m.done(function(){o.display=j}),null==j&&(k=o.display,j="none"===k?"":k)),o.display="inline-block")),c.overflow&&(o.overflow="hidden",m.always(function(){o.overflow=c.overflow[0],o.overflowX=c.overflow[1],o.overflowY=c.overflow[2]})),i=!1;for(d in n)i||(q?"hidden"in q&&(p=q.hidden):q=W.access(a,"fxshow",{display:j}),f&&(q.hidden=!p),p&&ia([a],!0),m.done(function(){p||ia([a]),W.remove(a,"fxshow");for(d in n)r.style(a,d,n[d])})),i=hb(p?q[d]:0,d,m),d in q||(q[d]=i.start,p&&(i.end=i.start,i.start=0))}}function jb(a,b){var c,d,e,f,g;for(c in a)if(d=r.camelCase(c),e=b[d],f=a[c],Array.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=r.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function kb(a,b,c){var d,e,f=0,g=kb.prefilters.length,h=r.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=ab||fb(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;g<i;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),f<1&&i?c:(i||h.notifyWith(a,[j,1,0]),h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:r.extend({},b),opts:r.extend(!0,{specialEasing:{},easing:r.easing._default},c),originalProperties:b,originalOptions:c,startTime:ab||fb(),duration:c.duration,tweens:[],createTween:function(b,c){var d=r.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;c<d;c++)j.tweens[c].run(1);return b?(h.notifyWith(a,[j,1,0]),h.resolveWith(a,[j,b])):h.rejectWith(a,[j,b]),this}}),k=j.props;for(jb(k,j.opts.specialEasing);f<g;f++)if(d=kb.prefilters[f].call(j,a,k,j.opts))return r.isFunction(d.stop)&&(r._queueHooks(j.elem,j.opts.queue).stop=r.proxy(d.stop,d)),d;return r.map(k,hb,j),r.isFunction(j.opts.start)&&j.opts.start.call(a,j),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always),r.fx.timer(r.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j}r.Animation=r.extend(kb,{tweeners:{"*":[function(a,b){var c=this.createTween(a,b);return fa(c.elem,a,ba.exec(b),c),c}]},tweener:function(a,b){r.isFunction(a)?(b=a,a=["*"]):a=a.match(L);for(var c,d=0,e=a.length;d<e;d++)c=a[d],kb.tweeners[c]=kb.tweeners[c]||[],kb.tweeners[c].unshift(b)},prefilters:[ib],prefilter:function(a,b){b?kb.prefilters.unshift(a):kb.prefilters.push(a)}}),r.speed=function(a,b,c){var d=a&&"object"==typeof a?r.extend({},a):{complete:c||!c&&b||r.isFunction(a)&&a,duration:a,easing:c&&b||b&&!r.isFunction(b)&&b};return r.fx.off?d.duration=0:"number"!=typeof d.duration&&(d.duration in r.fx.speeds?d.duration=r.fx.speeds[d.duration]:d.duration=r.fx.speeds._default),null!=d.queue&&d.queue!==!0||(d.queue="fx"),d.old=d.complete,d.complete=function(){r.isFunction(d.old)&&d.old.call(this),d.queue&&r.dequeue(this,d.queue)},d},r.fn.extend({fadeTo:function(a,b,c,d){return this.filter(da).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=r.isEmptyObject(a),f=r.speed(b,c,d),g=function(){var b=kb(this,r.extend({},a),f);(e||W.get(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=r.timers,g=W.get(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&db.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));!b&&c||r.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=W.get(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=r.timers,g=d?d.length:0;for(c.finish=!0,r.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;b<g;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),r.each(["toggle","show","hide"],function(a,b){var c=r.fn[b];r.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(gb(b,!0),a,d,e)}}),r.each({slideDown:gb("show"),slideUp:gb("hide"),slideToggle:gb("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){r.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),r.timers=[],r.fx.tick=function(){var a,b=0,c=r.timers;for(ab=r.now();b<c.length;b++)a=c[b],a()||c[b]!==a||c.splice(b--,1);c.length||r.fx.stop(),ab=void 0},r.fx.timer=function(a){r.timers.push(a),r.fx.start()},r.fx.interval=13,r.fx.start=function(){bb||(bb=!0,eb())},r.fx.stop=function(){bb=null},r.fx.speeds={slow:600,fast:200,_default:400},r.fn.delay=function(b,c){return b=r.fx?r.fx.speeds[b]||b:b,c=c||"fx",this.queue(c,function(c,d){var e=a.setTimeout(c,b);d.stop=function(){a.clearTimeout(e)}})},function(){var a=d.createElement("input"),b=d.createElement("select"),c=b.appendChild(d.createElement("option"));a.type="checkbox",o.checkOn=""!==a.value,o.optSelected=c.selected,a=d.createElement("input"),a.value="t",a.type="radio",o.radioValue="t"===a.value}();var lb,mb=r.expr.attrHandle;r.fn.extend({attr:function(a,b){return T(this,r.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){r.removeAttr(this,a)})}}),r.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return"undefined"==typeof a.getAttribute?r.prop(a,b,c):(1===f&&r.isXMLDoc(a)||(e=r.attrHooks[b.toLowerCase()]||(r.expr.match.bool.test(b)?lb:void 0)),void 0!==c?null===c?void r.removeAttr(a,b):e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:(a.setAttribute(b,c+""),c):e&&"get"in e&&null!==(d=e.get(a,b))?d:(d=r.find.attr(a,b),
2122null==d?void 0:d))},attrHooks:{type:{set:function(a,b){if(!o.radioValue&&"radio"===b&&B(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}},removeAttr:function(a,b){var c,d=0,e=b&&b.match(L);if(e&&1===a.nodeType)while(c=e[d++])a.removeAttribute(c)}}),lb={set:function(a,b,c){return b===!1?r.removeAttr(a,c):a.setAttribute(c,c),c}},r.each(r.expr.match.bool.source.match(/\w+/g),function(a,b){var c=mb[b]||r.find.attr;mb[b]=function(a,b,d){var e,f,g=b.toLowerCase();return d||(f=mb[g],mb[g]=e,e=null!=c(a,b,d)?g:null,mb[g]=f),e}});var nb=/^(?:input|select|textarea|button)$/i,ob=/^(?:a|area)$/i;r.fn.extend({prop:function(a,b){return T(this,r.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[r.propFix[a]||a]})}}),r.extend({prop:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return 1===f&&r.isXMLDoc(a)||(b=r.propFix[b]||b,e=r.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=r.find.attr(a,"tabindex");return b?parseInt(b,10):nb.test(a.nodeName)||ob.test(a.nodeName)&&a.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),o.optSelected||(r.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null},set:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}}),r.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){r.propFix[this.toLowerCase()]=this});function pb(a){var b=a.match(L)||[];return b.join(" ")}function qb(a){return a.getAttribute&&a.getAttribute("class")||""}r.fn.extend({addClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).addClass(a.call(this,b,qb(this)))});if("string"==typeof a&&a){b=a.match(L)||[];while(c=this[i++])if(e=qb(c),d=1===c.nodeType&&" "+pb(e)+" "){g=0;while(f=b[g++])d.indexOf(" "+f+" ")<0&&(d+=f+" ");h=pb(d),e!==h&&c.setAttribute("class",h)}}return this},removeClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).removeClass(a.call(this,b,qb(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof a&&a){b=a.match(L)||[];while(c=this[i++])if(e=qb(c),d=1===c.nodeType&&" "+pb(e)+" "){g=0;while(f=b[g++])while(d.indexOf(" "+f+" ")>-1)d=d.replace(" "+f+" "," ");h=pb(d),e!==h&&c.setAttribute("class",h)}}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):r.isFunction(a)?this.each(function(c){r(this).toggleClass(a.call(this,c,qb(this),b),b)}):this.each(function(){var b,d,e,f;if("string"===c){d=0,e=r(this),f=a.match(L)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else void 0!==a&&"boolean"!==c||(b=qb(this),b&&W.set(this,"__className__",b),this.setAttribute&&this.setAttribute("class",b||a===!1?"":W.get(this,"__className__")||""))})},hasClass:function(a){var b,c,d=0;b=" "+a+" ";while(c=this[d++])if(1===c.nodeType&&(" "+pb(qb(c))+" ").indexOf(b)>-1)return!0;return!1}});var rb=/\r/g;r.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=r.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,r(this).val()):a,null==e?e="":"number"==typeof e?e+="":Array.isArray(e)&&(e=r.map(e,function(a){return null==a?"":a+""})),b=r.valHooks[this.type]||r.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=r.valHooks[e.type]||r.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(rb,""):null==c?"":c)}}}),r.extend({valHooks:{option:{get:function(a){var b=r.find.attr(a,"value");return null!=b?b:pb(r.text(a))}},select:{get:function(a){var b,c,d,e=a.options,f=a.selectedIndex,g="select-one"===a.type,h=g?null:[],i=g?f+1:e.length;for(d=f<0?i:g?f:0;d<i;d++)if(c=e[d],(c.selected||d===f)&&!c.disabled&&(!c.parentNode.disabled||!B(c.parentNode,"optgroup"))){if(b=r(c).val(),g)return b;h.push(b)}return h},set:function(a,b){var c,d,e=a.options,f=r.makeArray(b),g=e.length;while(g--)d=e[g],(d.selected=r.inArray(r.valHooks.option.get(d),f)>-1)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),r.each(["radio","checkbox"],function(){r.valHooks[this]={set:function(a,b){if(Array.isArray(b))return a.checked=r.inArray(r(a).val(),b)>-1}},o.checkOn||(r.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var sb=/^(?:focusinfocus|focusoutblur)$/;r.extend(r.event,{trigger:function(b,c,e,f){var g,h,i,j,k,m,n,o=[e||d],p=l.call(b,"type")?b.type:b,q=l.call(b,"namespace")?b.namespace.split("."):[];if(h=i=e=e||d,3!==e.nodeType&&8!==e.nodeType&&!sb.test(p+r.event.triggered)&&(p.indexOf(".")>-1&&(q=p.split("."),p=q.shift(),q.sort()),k=p.indexOf(":")<0&&"on"+p,b=b[r.expando]?b:new r.Event(p,"object"==typeof b&&b),b.isTrigger=f?2:3,b.namespace=q.join("."),b.rnamespace=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=e),c=null==c?[b]:r.makeArray(c,[b]),n=r.event.special[p]||{},f||!n.trigger||n.trigger.apply(e,c)!==!1)){if(!f&&!n.noBubble&&!r.isWindow(e)){for(j=n.delegateType||p,sb.test(j+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),i=h;i===(e.ownerDocument||d)&&o.push(i.defaultView||i.parentWindow||a)}g=0;while((h=o[g++])&&!b.isPropagationStopped())b.type=g>1?j:n.bindType||p,m=(W.get(h,"events")||{})[b.type]&&W.get(h,"handle"),m&&m.apply(h,c),m=k&&h[k],m&&m.apply&&U(h)&&(b.result=m.apply(h,c),b.result===!1&&b.preventDefault());return b.type=p,f||b.isDefaultPrevented()||n._default&&n._default.apply(o.pop(),c)!==!1||!U(e)||k&&r.isFunction(e[p])&&!r.isWindow(e)&&(i=e[k],i&&(e[k]=null),r.event.triggered=p,e[p](),r.event.triggered=void 0,i&&(e[k]=i)),b.result}},simulate:function(a,b,c){var d=r.extend(new r.Event,c,{type:a,isSimulated:!0});r.event.trigger(d,null,b)}}),r.fn.extend({trigger:function(a,b){return this.each(function(){r.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];if(c)return r.event.trigger(a,b,c,!0)}}),r.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(a,b){r.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),r.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),o.focusin="onfocusin"in a,o.focusin||r.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){r.event.simulate(b,a.target,r.event.fix(a))};r.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=W.access(d,b);e||d.addEventListener(a,c,!0),W.access(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=W.access(d,b)-1;e?W.access(d,b,e):(d.removeEventListener(a,c,!0),W.remove(d,b))}}});var tb=a.location,ub=r.now(),vb=/\?/;r.parseXML=function(b){var c;if(!b||"string"!=typeof b)return null;try{c=(new a.DOMParser).parseFromString(b,"text/xml")}catch(d){c=void 0}return c&&!c.getElementsByTagName("parsererror").length||r.error("Invalid XML: "+b),c};var wb=/\[\]$/,xb=/\r?\n/g,yb=/^(?:submit|button|image|reset|file)$/i,zb=/^(?:input|select|textarea|keygen)/i;function Ab(a,b,c,d){var e;if(Array.isArray(b))r.each(b,function(b,e){c||wb.test(a)?d(a,e):Ab(a+"["+("object"==typeof e&&null!=e?b:"")+"]",e,c,d)});else if(c||"object"!==r.type(b))d(a,b);else for(e in b)Ab(a+"["+e+"]",b[e],c,d)}r.param=function(a,b){var c,d=[],e=function(a,b){var c=r.isFunction(b)?b():b;d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(null==c?"":c)};if(Array.isArray(a)||a.jquery&&!r.isPlainObject(a))r.each(a,function(){e(this.name,this.value)});else for(c in a)Ab(c,a[c],b,e);return d.join("&")},r.fn.extend({serialize:function(){return r.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=r.prop(this,"elements");return a?r.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!r(this).is(":disabled")&&zb.test(this.nodeName)&&!yb.test(a)&&(this.checked||!ja.test(a))}).map(function(a,b){var c=r(this).val();return null==c?null:Array.isArray(c)?r.map(c,function(a){return{name:b.name,value:a.replace(xb,"\r\n")}}):{name:b.name,value:c.replace(xb,"\r\n")}}).get()}});var Bb=/%20/g,Cb=/#.*$/,Db=/([?&])_=[^&]*/,Eb=/^(.*?):[ \t]*([^\r\n]*)$/gm,Fb=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Gb=/^(?:GET|HEAD)$/,Hb=/^\/\//,Ib={},Jb={},Kb="*/".concat("*"),Lb=d.createElement("a");Lb.href=tb.href;function Mb(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(L)||[];if(r.isFunction(c))while(d=f[e++])"+"===d[0]?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Nb(a,b,c,d){var e={},f=a===Jb;function g(h){var i;return e[h]=!0,r.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Ob(a,b){var c,d,e=r.ajaxSettings.flatOptions||{};for(c in b)void 0!==b[c]&&((e[c]?a:d||(d={}))[c]=b[c]);return d&&r.extend(!0,a,d),a}function Pb(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===d&&(d=a.mimeType||b.getResponseHeader("Content-Type"));if(d)for(e in h)if(h[e]&&h[e].test(d)){i.unshift(e);break}if(i[0]in c)f=i[0];else{for(e in c){if(!i[0]||a.converters[e+" "+i[0]]){f=e;break}g||(g=e)}f=f||g}if(f)return f!==i[0]&&i.unshift(f),c[f]}function Qb(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}r.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:tb.href,type:"GET",isLocal:Fb.test(tb.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Kb,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":r.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Ob(Ob(a,r.ajaxSettings),b):Ob(r.ajaxSettings,a)},ajaxPrefilter:Mb(Ib),ajaxTransport:Mb(Jb),ajax:function(b,c){"object"==typeof b&&(c=b,b=void 0),c=c||{};var e,f,g,h,i,j,k,l,m,n,o=r.ajaxSetup({},c),p=o.context||o,q=o.context&&(p.nodeType||p.jquery)?r(p):r.event,s=r.Deferred(),t=r.Callbacks("once memory"),u=o.statusCode||{},v={},w={},x="canceled",y={readyState:0,getResponseHeader:function(a){var b;if(k){if(!h){h={};while(b=Eb.exec(g))h[b[1].toLowerCase()]=b[2]}b=h[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return k?g:null},setRequestHeader:function(a,b){return null==k&&(a=w[a.toLowerCase()]=w[a.toLowerCase()]||a,v[a]=b),this},overrideMimeType:function(a){return null==k&&(o.mimeType=a),this},statusCode:function(a){var b;if(a)if(k)y.always(a[y.status]);else for(b in a)u[b]=[u[b],a[b]];return this},abort:function(a){var b=a||x;return e&&e.abort(b),A(0,b),this}};if(s.promise(y),o.url=((b||o.url||tb.href)+"").replace(Hb,tb.protocol+"//"),o.type=c.method||c.type||o.method||o.type,o.dataTypes=(o.dataType||"*").toLowerCase().match(L)||[""],null==o.crossDomain){j=d.createElement("a");try{j.href=o.url,j.href=j.href,o.crossDomain=Lb.protocol+"//"+Lb.host!=j.protocol+"//"+j.host}catch(z){o.crossDomain=!0}}if(o.data&&o.processData&&"string"!=typeof o.data&&(o.data=r.param(o.data,o.traditional)),Nb(Ib,o,c,y),k)return y;l=r.event&&o.global,l&&0===r.active++&&r.event.trigger("ajaxStart"),o.type=o.type.toUpperCase(),o.hasContent=!Gb.test(o.type),f=o.url.replace(Cb,""),o.hasContent?o.data&&o.processData&&0===(o.contentType||"").indexOf("application/x-www-form-urlencoded")&&(o.data=o.data.replace(Bb,"+")):(n=o.url.slice(f.length),o.data&&(f+=(vb.test(f)?"&":"?")+o.data,delete o.data),o.cache===!1&&(f=f.replace(Db,"$1"),n=(vb.test(f)?"&":"?")+"_="+ub++ +n),o.url=f+n),o.ifModified&&(r.lastModified[f]&&y.setRequestHeader("If-Modified-Since",r.lastModified[f]),r.etag[f]&&y.setRequestHeader("If-None-Match",r.etag[f])),(o.data&&o.hasContent&&o.contentType!==!1||c.contentType)&&y.setRequestHeader("Content-Type",o.contentType),y.setRequestHeader("Accept",o.dataTypes[0]&&o.accepts[o.dataTypes[0]]?o.accepts[o.dataTypes[0]]+("*"!==o.dataTypes[0]?", "+Kb+"; q=0.01":""):o.accepts["*"]);for(m in o.headers)y.setRequestHeader(m,o.headers[m]);if(o.beforeSend&&(o.beforeSend.call(p,y,o)===!1||k))return y.abort();if(x="abort",t.add(o.complete),y.done(o.success),y.fail(o.error),e=Nb(Jb,o,c,y)){if(y.readyState=1,l&&q.trigger("ajaxSend",[y,o]),k)return y;o.async&&o.timeout>0&&(i=a.setTimeout(function(){y.abort("timeout")},o.timeout));try{k=!1,e.send(v,A)}catch(z){if(k)throw z;A(-1,z)}}else A(-1,"No Transport");function A(b,c,d,h){var j,m,n,v,w,x=c;k||(k=!0,i&&a.clearTimeout(i),e=void 0,g=h||"",y.readyState=b>0?4:0,j=b>=200&&b<300||304===b,d&&(v=Pb(o,y,d)),v=Qb(o,v,y,j),j?(o.ifModified&&(w=y.getResponseHeader("Last-Modified"),w&&(r.lastModified[f]=w),w=y.getResponseHeader("etag"),w&&(r.etag[f]=w)),204===b||"HEAD"===o.type?x="nocontent":304===b?x="notmodified":(x=v.state,m=v.data,n=v.error,j=!n)):(n=x,!b&&x||(x="error",b<0&&(b=0))),y.status=b,y.statusText=(c||x)+"",j?s.resolveWith(p,[m,x,y]):s.rejectWith(p,[y,x,n]),y.statusCode(u),u=void 0,l&&q.trigger(j?"ajaxSuccess":"ajaxError",[y,o,j?m:n]),t.fireWith(p,[y,x]),l&&(q.trigger("ajaxComplete",[y,o]),--r.active||r.event.trigger("ajaxStop")))}return y},getJSON:function(a,b,c){return r.get(a,b,c,"json")},getScript:function(a,b){return r.get(a,void 0,b,"script")}}),r.each(["get","post"],function(a,b){r[b]=function(a,c,d,e){return r.isFunction(c)&&(e=e||d,d=c,c=void 0),r.ajax(r.extend({url:a,type:b,dataType:e,data:c,success:d},r.isPlainObject(a)&&a))}}),r._evalUrl=function(a){return r.ajax({url:a,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},r.fn.extend({wrapAll:function(a){var b;return this[0]&&(r.isFunction(a)&&(a=a.call(this[0])),b=r(a,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstElementChild)a=a.firstElementChild;return a}).append(this)),this},wrapInner:function(a){return r.isFunction(a)?this.each(function(b){r(this).wrapInner(a.call(this,b))}):this.each(function(){var b=r(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=r.isFunction(a);return this.each(function(c){r(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(a){return this.parent(a).not("body").each(function(){r(this).replaceWith(this.childNodes)}),this}}),r.expr.pseudos.hidden=function(a){return!r.expr.pseudos.visible(a)},r.expr.pseudos.visible=function(a){return!!(a.offsetWidth||a.offsetHeight||a.getClientRects().length)},r.ajaxSettings.xhr=function(){try{return new a.XMLHttpRequest}catch(b){}};var Rb={0:200,1223:204},Sb=r.ajaxSettings.xhr();o.cors=!!Sb&&"withCredentials"in Sb,o.ajax=Sb=!!Sb,r.ajaxTransport(function(b){var c,d;if(o.cors||Sb&&!b.crossDomain)return{send:function(e,f){var g,h=b.xhr();if(h.open(b.type,b.url,b.async,b.username,b.password),b.xhrFields)for(g in b.xhrFields)h[g]=b.xhrFields[g];b.mimeType&&h.overrideMimeType&&h.overrideMimeType(b.mimeType),b.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest");for(g in e)h.setRequestHeader(g,e[g]);c=function(a){return function(){c&&(c=d=h.onload=h.onerror=h.onabort=h.onreadystatechange=null,"abort"===a?h.abort():"error"===a?"number"!=typeof h.status?f(0,"error"):f(h.status,h.statusText):f(Rb[h.status]||h.status,h.statusText,"text"!==(h.responseType||"text")||"string"!=typeof h.responseText?{binary:h.response}:{text:h.responseText},h.getAllResponseHeaders()))}},h.onload=c(),d=h.onerror=c("error"),void 0!==h.onabort?h.onabort=d:h.onreadystatechange=function(){4===h.readyState&&a.setTimeout(function(){c&&d()})},c=c("abort");try{h.send(b.hasContent&&b.data||null)}catch(i){if(c)throw i}},abort:function(){c&&c()}}}),r.ajaxPrefilter(function(a){a.crossDomain&&(a.contents.script=!1)}),r.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(a){return r.globalEval(a),a}}}),r.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET")}),r.ajaxTransport("script",function(a){if(a.crossDomain){var b,c;return{send:function(e,f){b=r("<script>").prop({charset:a.scriptCharset,src:a.url}).on("load error",c=function(a){b.remove(),c=null,a&&f("error"===a.type?404:200,a.type)}),d.head.appendChild(b[0])},abort:function(){c&&c()}}}});var Tb=[],Ub=/(=)\?(?=&|$)|\?\?/;r.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=Tb.pop()||r.expando+"_"+ub++;return this[a]=!0,a}}),r.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(Ub.test(b.url)?"url":"string"==typeof b.data&&0===(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ub.test(b.data)&&"data");if(h||"jsonp"===b.dataTypes[0])return e=b.jsonpCallback=r.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(Ub,"$1"+e):b.jsonp!==!1&&(b.url+=(vb.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||r.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){void 0===f?r(a).removeProp(e):a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,Tb.push(e)),g&&r.isFunction(f)&&f(g[0]),g=f=void 0}),"script"}),o.createHTMLDocument=function(){var a=d.implementation.createHTMLDocument("").body;return a.innerHTML="<form></form><form></form>",2===a.childNodes.length}(),r.parseHTML=function(a,b,c){if("string"!=typeof a)return[];"boolean"==typeof b&&(c=b,b=!1);var e,f,g;return b||(o.createHTMLDocument?(b=d.implementation.createHTMLDocument(""),e=b.createElement("base"),e.href=d.location.href,b.head.appendChild(e)):b=d),f=C.exec(a),g=!c&&[],f?[b.createElement(f[1])]:(f=qa([a],b,g),g&&g.length&&r(g).remove(),r.merge([],f.childNodes))},r.fn.load=function(a,b,c){var d,e,f,g=this,h=a.indexOf(" ");return h>-1&&(d=pb(a.slice(h)),a=a.slice(0,h)),r.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(e="POST"),g.length>0&&r.ajax({url:a,type:e||"GET",dataType:"html",data:b}).done(function(a){f=arguments,g.html(d?r("<div>").append(r.parseHTML(a)).find(d):a)}).always(c&&function(a,b){g.each(function(){c.apply(this,f||[a.responseText,b,a])})}),this},r.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){r.fn[b]=function(a){return this.on(b,a)}}),r.expr.pseudos.animated=function(a){return r.grep(r.timers,function(b){return a===b.elem}).length},r.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=r.css(a,"position"),l=r(a),m={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=r.css(a,"top"),i=r.css(a,"left"),j=("absolute"===k||"fixed"===k)&&(f+i).indexOf("auto")>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),r.isFunction(b)&&(b=b.call(a,c,r.extend({},h))),null!=b.top&&(m.top=b.top-h.top+g),null!=b.left&&(m.left=b.left-h.left+e),"using"in b?b.using.call(a,m):l.css(m)}},r.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){r.offset.setOffset(this,a,b)});var b,c,d,e,f=this[0];if(f)return f.getClientRects().length?(d=f.getBoundingClientRect(),b=f.ownerDocument,c=b.documentElement,e=b.defaultView,{top:d.top+e.pageYOffset-c.clientTop,left:d.left+e.pageXOffset-c.clientLeft}):{top:0,left:0}},position:function(){if(this[0]){var a,b,c=this[0],d={top:0,left:0};return"fixed"===r.css(c,"position")?b=c.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),B(a[0],"html")||(d=a.offset()),d={top:d.top+r.css(a[0],"borderTopWidth",!0),left:d.left+r.css(a[0],"borderLeftWidth",!0)}),{top:b.top-d.top-r.css(c,"marginTop",!0),left:b.left-d.left-r.css(c,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent;while(a&&"static"===r.css(a,"position"))a=a.offsetParent;return a||ra})}}),r.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c="pageYOffset"===b;r.fn[a]=function(d){return T(this,function(a,d,e){var f;return r.isWindow(a)?f=a:9===a.nodeType&&(f=a.defaultView),void 0===e?f?f[b]:a[d]:void(f?f.scrollTo(c?f.pageXOffset:e,c?e:f.pageYOffset):a[d]=e)},a,d,arguments.length)}}),r.each(["top","left"],function(a,b){r.cssHooks[b]=Pa(o.pixelPosition,function(a,c){if(c)return c=Oa(a,b),Ma.test(c)?r(a).position()[b]+"px":c})}),r.each({Height:"height",Width:"width"},function(a,b){r.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){r.fn[d]=function(e,f){var g=arguments.length&&(c||"boolean"!=typeof e),h=c||(e===!0||f===!0?"margin":"border");return T(this,function(b,c,e){var f;return r.isWindow(b)?0===d.indexOf("outer")?b["inner"+a]:b.document.documentElement["client"+a]:9===b.nodeType?(f=b.documentElement,Math.max(b.body["scroll"+a],f["scroll"+a],b.body["offset"+a],f["offset"+a],f["client"+a])):void 0===e?r.css(b,c,h):r.style(b,c,e,h)},b,g?e:void 0,g)}})}),r.fn.extend({bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}}),r.holdReady=function(a){a?r.readyWait++:r.ready(!0)},r.isArray=Array.isArray,r.parseJSON=JSON.parse,r.nodeName=B,"function"==typeof define&&define.amd&&define("jquery",[],function(){return r});var Vb=a.jQuery,Wb=a.$;return r.noConflict=function(b){return a.$===r&&(a.$=Wb),b&&a.jQuery===r&&(a.jQuery=Vb),r},b||(a.jQuery=a.$=r),r};
2123
2124/*==============================================================================
2125| uBlock Protector Website Rules |
2126| Pulled & Converted from https://github.com/jspenguin2017/uBlockProtector |
2127===============================================================================*/
2128
2129
2130/*=========================================================================
2131| AAK Website Rules |
2132| (Please keep in alphabetical order to avoid unnecessary duplicates.) |
2133==========================================================================*/
2134
2135//@pragma-keepline uBlock Protector Rules Start
2136//@pragma-keepline Solutions from Anti-Adblock Killer (originally by Reek) are modified to fit my Core API
2137//@pragma-keepline Anti-Adblock Killer Repository (contains original source code and license): https://github.com/reek/anti-adblock-killer
2138
2139//Initialization
2140a.init({
2141 all: a.domCmp(["360.cn", "apple.com", "ask.com", "baidu.com", "bing.com", "bufferapp.com",
2142 "chromeactions.com", "easyinplay.net", "ebay.com", "facebook.com", "flattr.com", "flickr.com",
2143 "ghacks.net", "imdb.com", "imgbox.com", "imgur.com", "instagram.com", "jsbin.com", "jsfiddle.net",
2144 "linkedin.com", "live.com", "mail.ru", "microsoft.com", "msn.com", "paypal.com", "pinterest.com",
2145 "preloaders.net", "qq.com", "reddit.com", "stackoverflow.com", "tampermonkey.net", "twitter.com",
2146 "vimeo.com", "wikipedia.org", "w3schools.com", "yandex.ru", "youtu.be", "youtube.com", "xemvtv.net",
2147 "vod.pl", "agar.io", "pandoon.info", "fsf.org", "adblockplus.org", "plnkr.co", "exacttarget.com",
2148 "dolldivine.com", "popmech.ru", "calm.com", "chatango.com", "spaste.com"], true) ||
2149 a.domInc(["192.168.0", "192.168.1", "google", "google.co", "google.com", "amazon", "ebay", "yahoo"], true),
2150 Adfly: a.domCmp(["adf.ly", "ay.gy", "j.gs", "q.gs", "gamecopyworld.click", "babblecase.com",
2151 "pintient.com", "atominik.com", "bluenik.com", "sostieni.ilwebmaster21.com", "auto-login-xxx.com",
2152 "microify.com", "riffhold.com"]),
2153 adsjsV2: !a.domCmp(["gamersclub.com.br", "uploadboy.com", "vidoza.net", "videohelp.com", "zeiz.me",
2154 "passionea300allora.it", "memurlar.net", "palemoon.org", "stocks.cafe", "listamais.com.br",
2155 "acquavivalive.it"]),
2156 NoAdBlock: a.domCmp([], true)
2157});
2158
2159
2160//Rules start
2161if (a.domCmp(["aetv.com", "history.com", "mylifetime.com"])) {
2162 a.addScript(() => {
2163 "use strict";
2164 let val;
2165 window.Object.defineProperty(window, "_sp_", {
2166 configurable: false,
2167 set(value) {
2168 val = value;
2169 },
2170 get() {
2171 //Patch detection
2172 try {
2173 val.checkState = (e) => { e(false); };
2174 val.isAdBlocking = (e) => { e(false); };
2175 delete val._detectionInstance;
2176 } catch (err) { }
2177 return val;
2178 },
2179 });
2180 });
2181}
2182if (a.domCmp(["blockadblock.com"])) {
2183 a.filter("eval");
2184 a.ready(() => {
2185 a.$("#babasbmsgx").remove();
2186 });
2187}
2188if (a.domCmp(["sc2casts.com"])) {
2189 a.readOnly("scriptfailed", () => { });
2190 a.filter("setTimeout");
2191}
2192if (a.domCmp(["jagranjunction.com"])) {
2193 a.readOnly("canRunAds", true);
2194 a.readOnly("isAdsDisplayed", true);
2195}
2196if (a.domCmp(["usapoliticstoday.com"])) {
2197 a.filter("eval");
2198}
2199if (a.domCmp(["jansatta.com", "financialexpress.com", "indianexpress.com"])) {
2200 a.readOnly("RunAds", true);
2201}
2202if (a.domCmp(["livemint.com"])) {
2203 a.readOnly("canRun1", true);
2204}
2205if (a.domCmp(["userscloud.com"])) {
2206 a.on("load", () => {
2207 a.$("#dl_link").show();
2208 a.$("#adblock_msg").remove();
2209 });
2210}
2211if (a.domCmp(["vidlox.tv", "vidoza.net"])) {
2212 //NSFW!
2213 a.readOnly("xRds", false);
2214 a.readOnly("cRAds", true);
2215}
2216if (a.domCmp(["cwtv.com"])) {
2217 //Thanks to szymon1118
2218 a.readOnly("wallConfig", false);
2219}
2220if (a.domCmp(["theinquirer.net"])) {
2221 a.readOnly("_r3z", true);
2222}
2223if (a.domCmp(["tweaktown.com"])) {
2224 a.on("load", () => {
2225 //Force enable scrolling
2226 a.css("html, body { overflow:scroll; }");
2227 //Watch and remove block screen
2228 const blockScreenRemover = () => {
2229 if (a.$("body").children("div").last().text().indexOf("Ads slowing you down?") > -1) {
2230 a.$("body").children("div").last().remove();
2231 a.$("body").children("div").last().remove();
2232 } else {
2233 a.setTimeout(blockScreenRemover, 500);
2234 }
2235 };
2236 a.setTimeout(blockScreenRemover, 500);
2237 });
2238}
2239if (a.domCmp(["ratemyprofessors.com"])) {
2240 a.readOnly("adBlocker", false);
2241 a.filter("addEventListener", a.matchMethod.RegExp, /^resize$/i);
2242}
2243if (a.domCmp(["gamepedia.com"])) {
2244 a.on("load", () => {
2245 a.$("#atflb").remove();
2246 });
2247}
2248if (a.domCmp(["cbox.ws"])) {
2249 a.readOnly("koddostu_com_adblock_yok", true);
2250}
2251if (a.domCmp(["pinkrod.com", "wetplace.com"])) {
2252 //NSFW!
2253 a.readOnly("getAd", () => { });
2254 a.readOnly("getUtm", () => { });
2255}
2256if (a.domInc(["hackintosh"])) {
2257 //Undo BlockAdblock styles
2258 a.readOnly("eval", () => {
2259 a.$("#babasbmsgx").remove();
2260 a.doc.body.style.setProperty("visibility", "visible", "important");
2261 });
2262 //Prevent article hidding
2263 if (a.domCmp(["hackintosh.computer"], true)) {
2264 a.noAccess("google_jobrunner");
2265 }
2266}
2267if (a.domCmp(["tvregionalna24.pl"])) {
2268 let text = [];
2269 const matcher = /var _ended=(.*);var _skipButton/;
2270 a.readOnly("videojs", (a, b, func) => {
2271 let temp = "(" + matcher.exec(String(func))[1] + ")();";
2272 temp = temp.replace("player.dispose();", "");
2273 text.push(temp);
2274 });
2275 a.on("load", function replace() {
2276 if (text.length > 0 && a.$(".vjs-poster").length > 0) {
2277 for (let i = 0; i < text.length; i++) {
2278 a.win.eval(text[i]);
2279 }
2280 } else {
2281 a.setTimeout(replace, 1000);
2282 }
2283 });
2284}
2285if (a.domCmp(["tvn.pl", "tvnstyle.pl", "tvnturbo.pl", "kuchniaplus.pl", "miniminiplus.pl"])) {
2286 //tvn.pl and related domains
2287 //Replace player - Thanks to mikhoul, szymon1118, and xxcriticxx
2288 //Potential related domains: "tvnfabula.pl", "itvnextra.pl", "tvn24bis.pl", "ttv.pl",
2289 //"x-news.pl", "tvn7.pl", "itvn.pl"
2290 const homePages = ["http://www.tvn.pl/", "http://www.tvnstyle.pl/", "http://www.tvnturbo.pl/"];
2291 //Homepages are partially fixed and are handled by List
2292 if (!homePages.includes(a.doc.location.href)) {
2293 a.on("load", () => {
2294 a.$(".videoPlayer").parent().after(a.nativePlayer(a.$(".videoPlayer").data("src"))).remove();
2295 });
2296 }
2297}
2298if (a.domCmp(["player.pl"])) {
2299 const matcher = /[.,]/;
2300 a.on("load", () => {
2301 //Check element
2302 let elem;
2303 if (a.$("header.detailImage").length > 0) {
2304 elem = a.$("header.detailImage");
2305 } else {
2306 return;
2307 }
2308 //Get ID
2309 const parts = a.doc.location.href.split(matcher);
2310 const id = parts[parts.length - 2];
2311 const params = {
2312 platform: "ConnectedTV",
2313 terminal: "Panasonic",
2314 format: "json",
2315 authKey: "064fda5ab26dc1dd936f5c6e84b7d3c2",
2316 v: "3.1",
2317 m: "getItem",
2318 id: id,
2319 };
2320 const api = "https://api.tvnplayer.pl/api/?" + a.serialize(params);
2321 const proxy = "http://www.proxy.xmc.pl/index.php?hl=3e5&q=";
2322 //Send request
2323 const requestURL = (a.cookie("tvn_location2") === "1") ? api : proxy +
2324 a.win.encodeURIComponent(api);
2325 GM_xmlhttpRequest({
2326 method: "GET",
2327 url: requestURL,
2328 onload(result) {
2329 //Find media url
2330 let url;
2331 try {
2332 let data = JSON.parse(result.responseText);
2333 let vidSources = data.item.videos.main.video_content;
2334 if (vidSources[1].url) {
2335 //Native player
2336 elem.html("").append(a.nativePlayer(vidSources[1].url));
2337 a.$("video").css("max-height", "540px");
2338 } else if (vidSources[0].src) {
2339 //DRM protected
2340 a.out.error("AAK will not replace this video player " +
2341 "because it is DRM prtected.");
2342 }
2343 } catch (err) {
2344 a.out.error("AAK failed to find media URL!");
2345 }
2346 },
2347 onerror() {
2348 a.out.error("AAK failed to find media URL!");
2349 },
2350 });
2351 });
2352}
2353if (a.domCmp(["abczdrowie.pl", "autokrata.pl", "autokult.pl", "biztok.pl", "gadzetomania.pl", "hotmoney.pl",
2354 "kafeteria.pl", "kafeteria.tv", "komediowo.pl", "komorkomania.pl", "money.pl", "pudelek.tv", "sfora.pl",
2355 "snobka.pl", "wawalove.pl", "wp.pl", "wp.tv", "wrzuta.pl", "pudelek.pl", "fotoblogia.pl", "parenting.pl",
2356 "echirurgia.pl", "pudelekx.pl", "o2.pl", "kardiolo.pl"])) {
2357 //Issue: https://github.com/jspenguin2017/uBlockProtector/issues/70
2358 //Thanks to ghajini
2359 a.cookie("ABCABC", "true");
2360 a.filter("addEventListener", a.matchMethod.stringExact, "advertisement");
2361 a.readOnly("hasSentinel", () => false);
2362}
2363/*
2364if (a.domCmp(["abczdrowie.pl", "autokrata.pl", "autokult.pl", "biztok.pl", "gadzetomania.pl", "hotmoney.pl",
2365"kafeteria.pl", "kafeteria.tv", "komediowo.pl", "komorkomania.pl", "money.pl", "pudelek.tv", "sfora.pl",
2366"snobka.pl", "wawalove.pl", "wp.pl", "wp.tv", "wrzuta.pl", "pudelek.pl", "fotoblogia.pl"]) &&
2367!a.domCmp(["i.wp.pl"], true)) {
2368*/
2369if (a.domCmp(["money.pl", "parenting.pl", "tech.wp.pl", "sportowefakty.wp.pl", "teleshow.wp.pl", "moto.wp.pl"], true)) {
2370 //wp.pl and related domains
2371 //Thanks to szymon1118
2372 //Variables
2373 let mid; //Media ID of next video
2374 let midArray1 = []; //Media IDs method 1
2375 let midArray2 = []; //Media IDs method 2
2376 let url = null; //URL of the next video
2377 let replaceCounter = 0; //The number of video players that are replaced
2378 let loadCounter = 0; //The index of next item to load
2379 let networkBusy = false; //A flag to prevent sending a new request before the first one is done
2380 let networkErrorCounter = 0; //Will stop sending request if this is over 5
2381 let isInBackground = false; //A flag to prevent excessive CPU usage when the tab is in background
2382 //The player container matcher
2383 let containerMatcher = ".wp-player-outer, .player__container, .wp-player, .embed-container";
2384 //if (a.domCmp(["wp.tv"], true)) {
2385 // containerMatcher = "";
2386 //}
2387 //if (a.domCmp(["wiadomosci.wp.pl"], true)) {
2388 // containerMatcher = ".wp-player";
2389 //}
2390 //if (a.domCmp(["autokult.pl"], true)) {
2391 // containerMatcher = ".embed-container";
2392 //}
2393 const matcher = /mid[=,]([0-9]+)/;
2394 //Main function
2395 const main = () => {
2396 //Do not tick when in background
2397 if (isInBackground) {
2398 return;
2399 }
2400 //Log media ID arrays
2401 a.config.debugMode && a.out.log(midArray1, midArray2);
2402 //Mid grabbing method 1
2403 try {
2404 if (a.win.WP.player.list.length > midArray1.length) {
2405 let thisMid = a.win.WP.player.list[midArray1.length].p.url;
2406 if (thisMid) {
2407 thisMid = thisMid.substring(thisMid.lastIndexOf("=") + 1);
2408 }
2409 //Extra safety check
2410 if (thisMid) {
2411 midArray1.push(thisMid);
2412 }
2413 }
2414 } catch (err) {
2415 a.out.error("AAK failed to find media ID with method 1!");
2416 }
2417 //Mid grabbing method 2
2418 if (a.$(containerMatcher).length > 0) {
2419 const elem = a.$(containerMatcher).first().find(".titlecont a.title");
2420 let thisMid = elem.attr("href");
2421 //Check if I got the element
2422 if (thisMid) {
2423 thisMid = matcher.exec(thisMid)[1].toString();
2424 //I will destroy the player soon anyway, I will remove this now so I will not grab it twice
2425 elem.remove();
2426 }
2427 //Extra safety check
2428 if (thisMid) {
2429 midArray2.push(thisMid);
2430 }
2431 }
2432 //See if I need to load next URL
2433 if (loadCounter === replaceCounter) {
2434 //Check flag and error counter
2435 if (networkBusy || networkErrorCounter > 5) {
2436 return;
2437 }
2438 //Get media ID
2439 let mid;
2440 //Prefer media ID grabbing method 2
2441 let midArray = (midArray1.length > midArray2.length) ? midArray1 : midArray2;
2442 if (midArray.length > loadCounter) {
2443 mid = midArray[loadCounter];
2444 } else {
2445 return;
2446 }
2447 //Get media JSON, I do not need to check if mid is found since the function will return if it is not
2448 networkBusy = true;
2449 GM_xmlhttpRequest({
2450 method: "GET",
2451 url: `http://wp.tv/player/mid,${mid},embed.json`,
2452 onload(res) {
2453 //Try to find media URL
2454 try {
2455 const response = JSON.parse(res.responseText);
2456 for (let i = 0; i < response.clip.url.length; i++) {
2457 let item = response.clip.url[i];
2458 if (item.quality === "HQ" && item.type.startsWith("mp4")) {
2459 url = item.url;
2460 break;
2461 }
2462 }
2463 //Check if I found the URL
2464 if (!url) {
2465 throw "Media URL Not Found";
2466 }
2467 //Update counter
2468 loadCounter++;
2469 //Reset error counter
2470 networkErrorCounter = 0;
2471 } catch (err) {
2472 a.out.error("AAK failed to find media URL!");
2473 networkErrorCounter += 1;
2474 }
2475 //Update flag
2476 networkBusy = false;
2477 },
2478 onerror() {
2479 a.out.error("AAK failed to load media JSON!");
2480 networkErrorCounter += 0.5;
2481 //Update flag
2482 networkBusy = false;
2483 },
2484 });
2485 } else {
2486 if (a.$(containerMatcher).length > 0) {
2487 //Log element to be replace
2488 if (a.config.debugMode) {
2489 a.out.log("Replacing player...");
2490 a.out.log(a.$(containerMatcher)[0]);
2491 }
2492 //Replace player
2493 a.$(containerMatcher).first().after(a.nativePlayer(url)).remove();
2494 //Update variables and counter
2495 url = null;
2496 replaceCounter++;
2497 }
2498 }
2499 };
2500 //The function will not run if the page is in the background, once per second will be fine
2501 a.setInterval(main, 1000);
2502 a.on("focus", () => { isInBackground = false; });
2503 a.on("blur", () => { isInBackground = true; });
2504}
2505if (a.domCmp(["mid-day.com", "happytrips.com"])) {
2506 a.readOnly("canRun", true);
2507}
2508if (a.domCmp(["ewallstreeter.com"])) {
2509 a.readOnly("OAS_rdl", 1);
2510}
2511if (a.domCmp(["megogo.net"])) {
2512 a.readOnly("adBlock", false);
2513 a.readOnly("showAdBlockMessage", () => { });
2514}
2515if (a.domCmp(["elektroda.pl"])) {
2516 a.filter("setTimeout", a.matchMethod.string, "adBlockTest.offsetHeight");
2517}
2518if (a.domCmp(["anandabazar.com"])) {
2519 a.readOnly("canRunAds", false);
2520 a.config.allowGeneric = false;
2521}
2522if (a.domCmp(["wtkplay.pl"])) {
2523 a.readOnly("can_run_ads", true);
2524}
2525if (a.domCmp(["betterdocs.net"])) {
2526 a.filter("eval", a.matchMethod.string, "eval(function(p,a,c,k,e,d)");
2527}
2528if (a.domCmp(["webqc.org"])) {
2529 a.filter("setTimeout");
2530}
2531if (a.domCmp(["wired.com"])) {
2532 a.readOnly("google_onload_fired", true);
2533}
2534if (a.domInc(["knowlet3389.blogspot"])) {
2535 a.filter("setTimeout", a.matchMethod.string, '$("#gAds").height()');
2536}
2537if (a.domCmp(["freegameserverhost.com"])) {
2538 a.css("#fab13 { height:11px; }");
2539}
2540if (a.domCmp(["elahmad.com"])) {
2541 a.css("#adblock { height:1px; }");
2542}
2543if (a.domCmp(["mrtzcmp3.net"])) {
2544 a.css(".rtm_ad { height:1px; }");
2545}
2546if (a.domCmp(["bknime.com", "go4up.com", "debrido.com"])) {
2547 a.css(".myTestAd { height:1px; }");
2548}
2549if (a.domCmp(["debridfast.com", "getdebrid.com", "debrid.us", "leecher.us"])) {
2550 a.css(".myTestAd, .my24Ad, .nabil { height:1px; }");
2551 a.ready(() => {
2552 a.$("#simpleAd").html(`<p style="display:none;">debridfast.com</p>`);
2553 })
2554}
2555if (a.domCmp(["bg-gledai.tv"])) {
2556 a.css(".myAd { height:1px; }");
2557}
2558if (a.domCmp(["thepcspy.com"])) {
2559 a.css(".myTestAd { height:1px; }");
2560 a.css(".blocked { display:none; }");
2561 a.ready(() => {
2562 a.$(".blocked").remove();
2563 })
2564}
2565if (a.domCmp(["vg.no", "e24.no"])) {
2566 a.css(".ad { display:none; }");
2567}
2568if (a.domCmp(["automobile-sportive.com"])) {
2569 a.css(".myTestAd { height:51px; display:none; }");
2570}
2571if (a.domCmp(["snsw.us"])) {
2572 a.css("#ad_1 { height:1px; }");
2573}
2574if (a.domCmp(["urlchecker.net"])) {
2575 a.css("#adchecker { height:20px; }");
2576}
2577if (a.domCmp(["skiplimite.tv"])) {
2578 a.css("div.addthis_native_toolbox + div[id] { height:12px; }");
2579}
2580if (a.domCmp(["filecore.co.nz"])) {
2581 a.css(".adsense { height:5px; }");
2582}
2583if (a.domCmp(["thomas-n-ruth.com"])) {
2584 a.css(".Google { height:5px; }");
2585}
2586if (a.domCmp(["interfans.org"])) {
2587 a.css(".ad_global_header { height:1px; display:none; }");
2588}
2589if (a.domCmp(["maxdebrideur.com"])) {
2590 a.css(".clear + div[id] { height:12px; }");
2591}
2592if (a.domCmp(["topzone.lt"])) {
2593 a.css(".forumAd { height: 1px; display:none; }");
2594}
2595if (a.domInc(["nana10"])) {
2596 a.css("#advert-tracker { height:1px; }");
2597}
2598if (a.domCmp(["plej.tv"])) {
2599 a.css(".advert_box { height:1px; }");
2600}
2601if (a.domCmp(["mangamint.com"])) {
2602 a.css(".ad728 { height:31px; }");
2603}
2604if (a.domCmp(["debrideurstream.fr"])) {
2605 a.css("#content div[id][align=center] { height:12px; }");
2606}
2607if (a.domCmp(["preemlinks.com"])) {
2608 a.css("#divads { height:1px; }");
2609}
2610if (a.domCmp(["hentai.to"])) {
2611 a.css("#hentaito123 { height:11px; }");
2612}
2613if (a.domCmp(["prototurk.com"])) {
2614 a.css("#reklam { height:1px; }");
2615}
2616if (a.domCmp(["mufa.de"])) {
2617 a.css("#leaderboard { height:5px; }");
2618 a.css("#large-rectangle { height:5px; }");
2619 a.css("#ad-header-468x60 { height:5px; }");
2620}
2621if (a.domCmp(["watcharab.com"])) {
2622 a.css("#adblock { height:5px; }");
2623}
2624if (a.domCmp(["freedom-ip.com"])) {
2625 a.css(".pub_vertical ins, .pub_vertical div { height:11px; }");
2626}
2627if (a.domCmp(["wakanim.tv"])) {
2628 a.css("#detector { display:none; }");
2629 a.css("#nopub { display:block; }");
2630}
2631if (a.domCmp(["simply-debrid.com"])) {
2632 a.win.adsbygoogle = {};
2633 a.win.adsbygoogle.loaded = true;
2634}
2635if (a.domCmp(["manga9.com", "mangabee.co"])) {
2636 a.css(".adblock { height:31px; }");
2637}
2638if (a.domCmp(["onemanga2.com"])) {
2639 a.css(".afs_ads { height:5px; }");
2640}
2641if (a.domCmp(["mangabird.com"])) {
2642 a.css(".afs_ads { height:5px; }");
2643}
2644if (a.domCmp(["kodilive.eu"])) {
2645 a.css(".Ad { height:5px; }");
2646}
2647if (a.domCmp(["backin.net"])) {
2648 a.css("#divad { height:31px; }");
2649}
2650if (a.domCmp(["mobile-tracker-free.com"])) {
2651 a.css("#myAds { height:1px; }");
2652}
2653if (a.domCmp(["workupload.com"])) {
2654 a.always(() => {
2655 a.css(".adBlock, .adsbygoogle, #sad { height:11px; }");
2656 });
2657}
2658if (a.domCmp(["intoday.in", "businesstoday.in", "lovesutras.com"])) {
2659 //Issue: https://github.com/jspenguin2017/uBlockProtector/issues/109
2660 a.css("#adbocker_alt { display:none; }");
2661 a.readOnly("openPopup", () => { });
2662}
2663if (a.domCmp(["jc-mp.com"])) {
2664 a.css(".adsense { width:1px; height:1px; visibility:hidden; display:block; position:absolute; }");
2665}
2666if (a.domCmp(["mariage-franco-marocain.net"])) {
2667 a.css("#my_ad_div { height:1px; }");
2668}
2669if (a.domCmp(["happy-hack.ru"])) {
2670 a.css("#blockblockF4 { visibility:invisible; display:none; } #blockblockF4 td {visibility:invisible; display:none; } " +
2671 "#blockblockF4 td p { visibility:invisible; display:none; } #blockblockD3 { visibility:visible; display:block; }");
2672}
2673if (a.domCmp(["forbes.com"])) {
2674 if (a.win.location.pathname.includes("/welcome")) {
2675 a.cookie("welcomeAd", "true", 86400000, "/");
2676 a.cookie("dailyWelcomeCookie", "true", 86400000, "/");
2677 a.win.location = a.cookie("toUrl") || "https://www.forbes.com/";
2678 }
2679}
2680if (a.domCmp(["bitcoinaliens.com"])) {
2681 a.bait("ins", ".adsbygoogle");
2682}
2683if (a.domCmp(["osoarcade.com", "d3brid4y0u.info", "fileice.net", "nosteam.ro", "openrunner.com", "easybillets.com",
2684 "spox.fr", "yovoyages.com", "tv3.co.nz", "freeallmusic.info", "putlocker.com", "sockshare.com", "dramapassion.com",
2685 "yooclick.com", "online.ua"])) {
2686 a.bait("div", "#tester");
2687}
2688if (a.domCmp(["filecom.net", "upshare.org", "skippyfile.com", "mwfiles.net", "up-flow.org"])) {
2689 a.bait("div", "#add");
2690}
2691if (a.domCmp(["leaguesecretary.com", "teknogods.com", "hellsmedia.com"])) {
2692 a.bait("div", "#adpbtest");
2693}
2694if (a.domCmp(["freesportsbet.com", "sportsplays.com"])) {
2695 a.bait("div", "#ad-tester");
2696}
2697if (a.domCmp(["tgo-tv.com"])) {
2698 a.css("#adb, #bannerad1, .load_stream { display:none; }");
2699 a.bait("div", "#tester");
2700 a.on("load", () => {
2701 a.win.threshold = 1000;
2702 a.$(".chat_frame").remove();
2703 });
2704}
2705if (a.domCmp(["freegamehosting.nl"])) {
2706 a.bait("div", "#adtest");
2707}
2708if (a.domCmp(["theweatherspace.com"])) {
2709 a.bait("div", "#ab-bl-advertisement");
2710}
2711if (a.domCmp(["cleodesktop.com"])) {
2712 a.bait("div", "#myTestAd");
2713}
2714if (a.domCmp(["imageraider.com"])) {
2715 a.bait("div", "#myGContainer");
2716}
2717if (a.domCmp(["voici.fr", "programme-tv.net"])) {
2718 a.bait("div", "#sas_script2");
2719}
2720if (a.domCmp(["mil.ink"])) {
2721 a.bait("div", "#ads_div");
2722}
2723if (a.domCmp(["stream4free.eu"])) {
2724 a.bait("div", "#jpayday");
2725 a.readOnly("jpayday_alert", 1);
2726}
2727if (a.domCmp(["lg-firmware-rom.com"])) {
2728 a.readOnly("killads", true);
2729}
2730if (a.domCmp(["badtv.it", "badtaste.it", "badgames.it", "badcomics.it"])) {
2731 a.cookie("adBlockChecked", "disattivo");
2732}
2733if (a.domCmp(["independent.co.uk"])) {
2734 a.cookie("adblock_detected", "ignored");
2735}
2736if (a.domCmp(["3dnews.ru"])) {
2737 a.cookie("adblockwarn", "1");
2738 a.css("#earAds { width:401px; }");
2739 a.bait("div", "#earAds");
2740 a.readOnly("__AT_detected", true);
2741}
2742if (a.domCmp(["esmas.com"])) {
2743 a.readOnly("opened_adbblock", false);
2744}
2745if (a.domInc(["pinoy1tv"])) {
2746 a.readOnly("allowads", 1);
2747}
2748if (a.domCmp(["business-standard.com"])) {
2749 a.readOnly("adsLoaded", 1);
2750 a.cookie("_pw", "t");
2751}
2752/*
2753if (a.domCmp(["indiatimes.com", "samayam.com", "bangaloremirror.com"])) {
2754 //Patch HTML
2755 a.patchHTML(function (html) {
2756 html = html.replace("\\\\x61\\\\x64\\\\x62", a.c.syntaxBreaker);
2757 html = html.replace("function initBlock", a.c.syntaxBreaker);
2758 return html;
2759 });
2760}
2761*/
2762if (a.domCmp(["thechive.com"])) {
2763 a.readOnly("stephaneDetector", {
2764 hook(cb) { cb(false); },
2765 init() { },
2766 broadcastResult() { },
2767 });
2768}
2769if (a.domCmp(["richonrails.com"])) {
2770 a.ready(() => {
2771 const adsByGoogleHtml = `"<ins+id="aswift_0_expand"+style="display:inline-table;border:none;height:90px;` +
2772 `margin:0;padding:0;position:relative;visibility:visible;width:750px;background-color:transparent"><ins+id="aswi` +
2773 `ft_0_anchor"+style="display:block;border:none;height:90px;margin:0;padding:0;position:relative;visibility:visib` +
2774 `le;width:750px;background-color:transparent"><iframe+marginwidth="0"+marginheight="0"+vspace="0"+hspace="0"+all` +
2775 `owtransparency="true"+scrolling="no"+allowfullscreen="true"+onload="var+i=this.id,s=window.google_iframe_oncopy` +
2776 `,H=s&&s.handlers,h=H&&H[i],w=this.contentWindow,d;try{d=w.document}catch(e){}if(h&&d&am` +
2777 `p;&(!d.body||!d.body.firstChild)){if(h.call){setTimeout(h,0)}else+if(h.match){try{h=s.upd(h,i)}catch(e){}w.` +
2778 `location.replace(h)}}"+id="aswift_0"+name="aswift_0"+style="left:0;position:absolute;top:0;"+width="750"+frameb` +
2779 `order="0"+height="90"></iframe></ins></ins>"`;
2780 a.$.ajax({
2781 url: a.$(".article-content").data("url"),
2782 dataType: "script",
2783 method: "post",
2784 data: {
2785 html: adsByGoogleHtml,
2786 },
2787 success(result) {
2788 const exec = result.replace("$('.article-content')", "$('.article-content-2')");
2789 a.win.eval(exec);
2790 },
2791 });
2792 a.$(".article-content").after(`<div class="article-content-2"></div>`).remove();
2793 });
2794}
2795if (a.domCmp(["rmprepusb.com"])) {
2796 a.cookie("jot_viewer", "3");
2797}
2798if (a.domCmp(["cubeupload.com"])) {
2799 a.filter("document.write", a.matchMethod.string, "Please consider removing adblock to help us pay our bills");
2800}
2801if (a.domCmp(["hentaihaven.org"])) {
2802 //NSFW!
2803 //Thanks to uBlock-user
2804 //Issue: https://github.com/jspenguin2017/uBlockProtector/issues/76
2805 a.noAccess("desktop_variants");
2806}
2807if (a.domCmp(["primeshare.tv"])) {
2808 a.bait("div", "#adblock");
2809}
2810if (a.domCmp(["debridnet.com", "livedebrid.com"])) {
2811 a.css(".myTestAd2 { height:5px; }");
2812 a.bait("div", ".myTestAd2");
2813}
2814if (a.domCmp(["bluesatoshi.com"])) {
2815 a.css("#test { height:280px; }");
2816 a.bait("div", "#test");
2817}
2818if (a.domCmp(["razercrypt.com", "satoshiempire.com", "oneadfaucet.com"])) {
2819 a.css("#test { height:250px; }");
2820 a.bait("div", "#test");
2821}
2822if (a.domCmp(["jkanime.net"])) {
2823 a.bait("div", "#reco");
2824}
2825if (a.domCmp(["720pmkv.com"])) {
2826 a.bait("div", "#advert");
2827}
2828if (a.domCmp(["paidverts.com"])) {
2829 a.bait("div", ".afs_ads");
2830}
2831if (a.domCmp(["italiatv.org"])) {
2832 a.bait("div", "#fab13");
2833}
2834if (a.domCmp(["eventhubs.com"])) {
2835 a.bait("div", "#blahyblaci1");
2836}
2837if (a.domCmp(["superanimes.com"])) {
2838 a.bait("div", "#bannerLoja");
2839}
2840if (a.domCmp(["forum.pac-rom.com"])) {
2841 a.bait("div", ".banner_ads");
2842}
2843if (a.domCmp(["litv.tv"])) {
2844 a.bait("div", ".player_mask");
2845}
2846if (a.domCmp(["leveldown.fr"])) {
2847 a.bait("div", "#adblock");
2848 a.bait("div", "#adblocktest");
2849}
2850if (a.domCmp(["globeslot.com"])) {
2851 a.bait("div", "#add");
2852 a.bait("div", "#add1");
2853}
2854if (a.domCmp(["antennesport.com", "serverhd.eu"])) {
2855 a.ready(() => {
2856 a.$("#pub .pubclose").remove();
2857 a.$("#pub .embed iframe").attr("src", "/embed/embed.php");
2858 });
2859}
2860if (a.domCmp(["drivearabia.com", "putlocker.com", "doatoolsita.altervista.org", "sockshare.com",
2861 "free-movie-home.com", "pc.online143.com", "kooora.com", "str3amtv.co.nr", "str3amtv.altervista.org",
2862 "str3am.altervista.org", "filecom.net", "pipocas.tv", "generatupremium.biz", "mega-debrid.eu",
2863 "premiumst0re.blogspot.com", "dl-protect.com", "newsinlevels.com", "vipracing.biz", "businesstoday.in"])) {
2864 a.filter("alert");
2865}
2866if (a.domCmp(["generatupremium.biz"])) {
2867 a.cookie("genera", "false");
2868}
2869if (a.domCmp(["newstatesman.com"])) {
2870 a.cookie("donationPopup", "hide");
2871}
2872if (a.domCmp(["yes.fm"])) {
2873 a.readOnly("com_adswizz_synchro_initialize", () => { });
2874}
2875if (a.domCmp(["tek.no", "gamer.no", "teknofil.no", "insidetelecom.no", "prisguide.no", "diskusjon.no",
2876 "teknojobb.no", "akam.no", "hardware.no", "amobil.no"])) {
2877 a.ready(() => {
2878 a.$("<div>").attr("id", "google_ads_iframe_").html("<p></p>").appendTo("body");
2879 });
2880}
2881if (a.domInc(["planetatvonlinehd.blogspot"]) || a.domCmp(["planetatvonlinehd.com"])) {
2882 a.css(".adsantilok { height:1px; }");
2883}
2884if (a.domCmp(["beta.speedtest.net"])) {
2885 a.readOnly("adsOoklaComReachable", true);
2886 a.readOnly("scriptsLoaded", () => { });
2887}
2888if (a.domCmp(["binbucks.com"])) {
2889 a.readOnly("testJuicyPay", true);
2890 a.readOnly("testSensePay", true);
2891}
2892if (a.domCmp(["whiskyprijzen.com", "whiskyprices.co.uk", "whiskypreise.com", "whiskyprix.fr"])) {
2893 a.readOnly("OA_show", true);
2894}
2895if (a.domCmp(["di.se"])) {
2896 a.ready(() => {
2897 a.$("#header_overlay").remove();
2898 a.$("#message_modal").remove();
2899 });
2900}
2901if (a.domCmp(["libertaddigital.com"])) {
2902 a.readOnly("ad_already_played", true);
2903 a.readOnly("puedeMostrarAds", true);
2904}
2905if (a.domCmp(["folha.uol.com.br"])) {
2906 a.readOnly("paywall_access", true);
2907 a.readOnly("folha_ads", true);
2908}
2909if (a.domCmp(["gamer.com.tw"])) {
2910 a.readOnly("AntiAd", null);
2911};
2912if (a.domCmp(["armorgames.com"])) {
2913 a.readOnly("ga_detect", null);
2914}
2915if (a.domCmp(["mangahost.com"])) {
2916 a.readOnly("testDisplay", false);
2917}
2918if (a.domCmp(["videowood.tv"])) {
2919 a.filter("open");
2920 a.win.config = {};
2921 a.readOnly("adb_remind", false);
2922}
2923if (a.domCmp(["infojobs.com.br"])) {
2924 /*
2925 a.win.webUI = {};
2926 a.win.webUI.Utils = {};
2927 const noop = () => { };
2928 a.win.Object.defineProperty(a.win.webUI.Utils, "StopAdBlock", {
2929 configurable: false,
2930 set() { },
2931 get() {
2932 return noop;
2933 },
2934 });
2935 */
2936 //They changed detection method, the new detection method should be caught in the generic anti-bait filter
2937 //Enforce again just in case
2938 a.readOnly("adblock", 0);
2939}
2940if (a.domCmp(["cloudwebcopy.com"])) {
2941 a.filter("setTimeout");
2942}
2943if (a.domCmp(["narkive.com"])) {
2944 a.readOnly("adblock_status", () => false);
2945}
2946if (a.domCmp(["pregen.net"])) {
2947 a.cookie("pgn", "1");
2948}
2949if (a.domCmp(["phys.org"])) {
2950 a.readOnly("chkAB", () => { });
2951}
2952if (a.domCmp(["onvasortir.com"])) {
2953 a.readOnly("JeBloque", () => { });
2954}
2955if (a.domCmp(["fullhdzevki.com"])) {
2956 a.readOnly("check", () => { });
2957}
2958if (a.domCmp(["freecoins4.me"])) {
2959 a.readOnly("check", () => {
2960 return false;
2961 });
2962}
2963if (a.domCmp(["ville-ideale.com"])) {
2964 a.readOnly("execsp", () => { });
2965}
2966if (a.domCmp(["notre-planete.info"])) {
2967 a.readOnly("pubpop", () => { });
2968}
2969if (a.domCmp(["apkmirror.com"])) {
2970 //Issue: https://github.com/jspenguin2017/uBlockProtector/issues/241
2971 //a.readOnly("doCheck", () => { });
2972 a.noAccess("ranTwice");
2973 //Ready for them to closure their code
2974 a.timewarp("setInterval", a.matchMethod.stringExact, "1000");
2975}
2976if (a.domCmp(["mtlblog.com"])) {
2977 a.readOnly("puabs", () => { });
2978}
2979if (a.domCmp(["15min.lt"])) {
2980 a.noAccess("__adblock_config");
2981}
2982if (a.domCmp(["anizm.com"])) {
2983 a.always(() => {
2984 a.win.stopAdBlock = {};
2985 });
2986}
2987if (a.domCmp(["diarioinformacion.com"])) {
2988 a.readOnly("pr_okvalida", true);
2989}
2990if (a.domCmp(["cnbeta.com"])) {
2991 a.readOnly("JB", () => { });
2992}
2993if (a.domCmp(["haaretz.com", "haaretz.co.li", "themarker.com"])) {
2994 a.noAccess("AdBlockUtil");
2995}
2996if (a.domCmp(["pipocas.tv"])) {
2997 a.cookie("popup_user_login", "yes");
2998}
2999if (a.domCmp(["sc2casts.com"])) {
3000 a.win._gaq = { push() { } }
3001 a.readOnly("showdialog", () => { });
3002 a.readOnly("showPopup2", () => { });
3003}
3004if (a.domCmp(["vgunetwork.com"])) {
3005 a.ready(() => {
3006 a.cookie("stopIt", "1");
3007 a.$("#some_ad_block_key_close").click()
3008 });
3009}
3010if (a.domCmp(["eventosppv.me"])) {
3011 a.ready(() => {
3012 a.$("#nf37").remove();
3013 });
3014}
3015if (a.domCmp(["bolor-toli.com"])) {
3016 a.on("load", () => {
3017 a.$(".banner").html("<br>").css("height", "1px");
3018 });
3019}
3020if (a.domCmp(["vivo.sx"])) {
3021 a.on("load", () => {
3022 a.$("#alert-throttle").remove();
3023 a.$("button#access").removeAttr("id").removeAttr("disabled").html("Continue To Video");
3024 a.setTimeout(() => {
3025 a.$("input[name='throttle']").remove();
3026 }, 1000);
3027 });
3028}
3029if (a.domCmp(["luxyad.com"])) {
3030 a.ready(() => {
3031 if (a.win.location.pathname === "/Information.php") {
3032 const href = location.href;
3033 a.win.location.href = href.substr(href.indexOf("url=") + 4, href.length);
3034 }
3035 });
3036}
3037/*
3038if (a.domCmp(["mrpiracy.xyz", "mrpiracy.club"])) {
3039 //Crash script by keywords
3040 a.crashScript("Desativa o AdBlock para continuar");
3041}
3042*/
3043if (a.domCmp(["dbplanet.net"])) {
3044 a.cookie("newnoMoreAdsNow", "1");
3045}
3046if (a.domCmp(["aidemu.fr"])) {
3047 a.cookie("adblockPopup", "true");
3048}
3049if (a.domCmp(["eami.in"])) {
3050 a.always(() => {
3051 a.cookie("ad_locked", "1");
3052 });
3053}
3054if (a.domCmp(["bigdownloader.com"])) {
3055 a.ready(() => {
3056 a.$("#anti_adblock").remove();
3057 });
3058}
3059if (a.domCmp(["freeskier.com"])) {
3060 a.ready(() => {
3061 a.$("#adb-not-enabled").css("display", "");
3062 a.$("#videoContainer").css("display", "");
3063 });
3064}
3065if (a.domCmp(["gametrailers.com"])) {
3066 a.ready(() => {
3067 a.$("#ad_blocking").remove();
3068 });
3069}
3070if (a.domCmp(["scan-mx.com", "onepiece-mx.net", "naruto-mx.net"])) {
3071 a.readOnly("ad_block_test", () => { });
3072 a.ready(() => {
3073 a.$("#yop").attr("id", "");
3074 });
3075}
3076if (a.domCmp(["freebitcoins.nx.tc", "getbitcoins.nx.tc"])) {
3077 a.readOnly("ad_block_test", () => false);
3078}
3079if (a.domCmp(["bitcoinker.com"])) {
3080 a.readOnly("claim", () => true);
3081 a.ready(() => {
3082 a.$("#E33FCCcX2fW").remove();
3083 });
3084}
3085if (a.domCmp(["moondoge.co.in", "moonliteco.in", "moonbit.co.in", "bitcoinzebra.com"])) {
3086 a.ready(() => {
3087 a.$("#AB, #E442Dv, #eCC5h").remove();
3088 });
3089}
3090if (a.domCmp(["bitcoiner.net", "litecoiner.net"])) {
3091 a.bait("div", "#tester");
3092 a.bait("div", "#ad-top");
3093}
3094if (a.domCmp(["torrent-tv.ru"])) {
3095 a.readOnly("c_Oo_Advert_Shown", true);
3096}
3097if (a.domCmp(["cwtv.com"])) {
3098 a.readOnly("CWTVIsAdBlocking", undefined);
3099}
3100if (a.domCmp(["inn.co.il"])) {
3101 a.win.TRC = {};
3102 a.win.TRC.blocker = {
3103 states: {
3104 ABP_DETECTION_DISABLED: -2,
3105 ABP_NOT_DETECTED: 0,
3106 ABP_DETECTED: 1,
3107 },
3108 createBlockDetectionDiv() { return a.doc.createElement("div"); },
3109 isBlockDetectedOnDiv() { return 0; },
3110 isBlockDetectedOnClassNames() { return 0; },
3111 getBlockedState() { return 0; },
3112 };
3113}
3114if (a.domCmp(["bhaskar.com", "divyabhaskar.co.in"])) {
3115 a.readOnly("openPopUpForBreakPage", () => { });
3116 a.readOnly("canABP", true);
3117 a.readOnly("canCheckAds", true);
3118}
3119if (a.domCmp(["turkanime.tv"])) {
3120 a.always(() => {
3121 a.win.adblockblock = () => { };
3122 a.win.BlokKontrol = {};
3123 });
3124}
3125if (a.domCmp(["wtfbit.ch"])) {
3126 a.readOnly("writeHTMLasJS", () => { });
3127}
3128if (a.domCmp(["ndtv.com"])) {
3129 a.readOnly("___p__p", 1);
3130 a.readOnly("getNoTopLatestNews", () => { });
3131}
3132if (a.domCmp(["lesechos.fr", "lesechos.com"])) {
3133 a.readOnly("checkAdBlock", () => { });
3134 a.readOnly("paywall_adblock_article", () => { });
3135 a.readOnly("call_Ad", 1);
3136}
3137if (a.domCmp(["bitvisits.com"])) {
3138 a.readOnly("blockAdblockUser", () => { });
3139}
3140/*
3141if (a.domCmp(["exrapidleech.info"])) {
3142 //This does not work anymore
3143 //Set cookies, style, read only variables, disable open(), and create an element
3144 let tomorrow = new a.win.Date();
3145 tomorrow.setDate(tomorrow.getDate() + 1);
3146 //Cookies
3147 a.cookie("popcashpuCap", "1");
3148 a.cookie("popcashpu", "1");
3149 a.cookie("nopopatall", tomorrow.getTime().toString());
3150 a.cookie("noadvtday", "0");
3151 //Style
3152 a.css("div.alert.alert-danger.lead { opacity:0; }");
3153 //Read only variables
3154 a.readOnly("bdvbnr_pid", []);
3155 //a.readOnly("adblock", false);
3156 a.readOnly("PopAds", 1);
3157 //Filter open()
3158 a.filter("open");
3159 //Create element
3160 a.$("<iframe>").attr("src", "http://bdfrm.bidvertiser.com/BidVertiser.dbm?pid=383865&bid=1737418&RD=")
3161.attr("id", "bdvi").css("display", "none").appendTo("html");
3162}
3163*/
3164if (a.domCmp(["vipleague.is", "vipleague.ws", "vipleague.tv", "vipleague.se", "vipleague.tv", "vipleague.me",
3165 "vipleague.mobi", "vipleague.co", "vipleague.sx", "vipleague.ch", "vipbox.tv", "vipbox.co", "vipbox.biz",
3166 "vipbox.sx", "vipbox.eu", "vipbox.so", "vipbox.nu", "vipboxsa.co", "strikeout.co", "strikeout.me",
3167 "homerun.re", "vipboxtv.co", "vipapp.me"])) {
3168 a.readOnly("iExist", true);
3169 a.cookie("xclsvip", "1");
3170 a.css(".vip_052x003 { height:250px; }");
3171 a.css(".vip_09x827 { height:26px; }");
3172 a.css("#overlay { display:none; }");
3173}
3174if (a.domCmp(["zoomtv.me"])) {
3175 a.readOnly("iaxpEnabled", true);
3176}
3177if (a.domCmp(["vg.no", "e24.no"])) {
3178 a.readOnly("__AB__", () => { });
3179}
3180if (a.domCmp(["pornve.com"])) {
3181 //NSFW!
3182 a.readOnly("adxjwupdate", 1);
3183}
3184if (a.domCmp(["lol.moa.tw"])) {
3185 a.ready(() => {
3186 a.win.MoaObj = a.win.MoaObj || {};
3187 a.win.MoaObj.ad = a.win.MoaObj.ad || {};
3188 a.win.MoaObj.ad.hasAdblock = () => false;
3189 a.win.MoaObj.ad.checkABP = () => false;
3190 });
3191}
3192if (a.domCmp(["dailybitcoins.org"])) {
3193 a.ready(() => {
3194 a.$(".ad-img").remove();
3195 });
3196}
3197if (a.domCmp(["kozaczek.pl", "zeberka.pl"])) {
3198 a.cookie("ablc", "1");
3199 a.cookie("cookie_policy", "1");
3200}
3201if (a.domCmp(["spankwire.com", "keezmovies.com", "extremetube.com", "mofosex.com"])) {
3202 a.cookie("abClosed", "true");
3203 a.cookie("hide_ad_msg", "1");
3204}
3205if (a.domCmp(["youporn.com", "youporngay.com"])) {
3206 a.cookie("adblock_message", "closed");
3207}
3208if (a.domCmp(["citationmachine.net"])) {
3209 a.cookie("sbm_cm_citations", "0");
3210}
3211if (a.domCmp(["psarips.com"])) {
3212 a.bait("div", "#advert");
3213 a.noAccess("open");
3214}
3215if (a.domCmp(["extratorrent.cc", "extratorrent.com"])) {
3216 a.cookie("ppu_delay", "1");
3217 a.cookie("ppu_main", "1");
3218 a.cookie("ppu_sub", "1");
3219 a.cookie("ppu_show_on", "1");
3220}
3221if (a.domCmp(["tny.cz", "pasted.co"])) {
3222 a.cookie("__.popunderCap", "1");
3223 a.cookie("__.popunder", "1");
3224}
3225if (a.domCmp(["clubedohardware.com.br"])) {
3226 if (a.win.location.host.includes("forum")) {
3227 a.css("#banner, script { height:51px; }");
3228 a.bait("div", "#banner");
3229 } else {
3230 a.bait("div", ".banner_topo");
3231 }
3232 a.ready(() => {
3233 if (a.win.location.host.includes("forum")) {
3234 a.win.addBlocking.hide();
3235 a.win.addBlocking.kill();
3236 } else {
3237 a.doc.body.id = "";
3238 a.$(".adblock").remove();
3239 }
3240 });
3241}
3242if (a.domCmp(["debrastagi.com"])) {
3243 a.ready(() => {
3244 a.$("#stp-main").remove();
3245 a.$("#stp-bg").remove();
3246 });
3247}
3248if (a.domCmp(["ddlfrench.org"])) {
3249 a.ready(() => {
3250 a.$("#dle-content .d-content").removeClass();
3251 a.$("#content").attr("id", "");
3252 });
3253}
3254if (a.domCmp(["mega-debrid.eu"])) {
3255 a.on("load", () => {
3256 const elem = a.$(".realbutton")[0];
3257 elem.setAttribute("onclick", "");
3258 elem.setAttribute("type", "submit");
3259 });
3260}
3261if (a.domInc(["slideplayer"])) {
3262 a.on("load", () => {
3263 a.win.force_remove_ads = true;
3264 const slide_id = a.win.get_current_slide_id();
3265 const slide_srv = a.doc.getElementById("player_frame").src.split("/")[3];
3266 const time = 86400 + a.win.Math.floor(a.win.Date.now() / 1000);
3267 const secret = a.win.encodeURIComponent(a.win.strtr(a.win.MD5.base64("secret_preved slideplayer never solved " +
3268 time + slide_id + ".ppt"), "+/", "- "));
3269 const url = `http://player.slideplayer.org/download/${slide_srv}/${slide_id}/${secret}/${time}/${slide_id}.ppt`;
3270 let links = a.doc.querySelectorAll("a.download_link");
3271 for (let i = 0; i < links.length; i++) {
3272 let events = a.win.$._data(links[i]).events.click;
3273 events.splice(0, events.length);
3274 links[i].href = url;
3275 }
3276 });
3277}
3278if (a.domCmp(["bokepspot.com"])) {
3279 a.cookie("hideDialog", "hide");
3280 a.ready(() => {
3281 a.$("#tupiklan").remove();
3282 });
3283}
3284if (a.domCmp(["picload.org"])) {
3285 a.cookie("pl_adblocker", "false");
3286 a.ready(() => {
3287 a.win.ads_loaded = true;
3288 a.win.imageAds = false;
3289 a.$("div[oncontextmenu='return false;']").remove();
3290 });
3291}
3292if (a.domCmp(["freezedownload.com"])) {
3293 a.ready(() => {
3294 if (a.win.location.href.includes("freezedownload.com/download/")) {
3295 a.$("body > div[id]").remove();
3296 }
3297 });
3298}
3299if (a.domCmp(["monnsutogatya.com"])) {
3300 a.ready(() => {
3301 a.css("#site-box { display:block; }");
3302 a.$("#for-ad-blocker").remove();
3303 });
3304}
3305if (a.domCmp(["rapid8.com"])) {
3306 a.ready(() => {
3307 a.$("div.backk + #blcokMzg").remove();
3308 a.$("div.backk").remove();
3309 });
3310}
3311if (a.domCmp(["turkdown.com"])) {
3312 a.ready(() => {
3313 a.$("#duyuru").remove();
3314 });
3315}
3316if (a.domCmp(["privateinsta.com"])) {
3317 a.ready(() => {
3318 a.win.dont_scroll = false;
3319 a.$("#overlay_div").remove();
3320 a.$("#overlay_main_div").remove();
3321 });
3322}
3323if (a.domCmp(["oneplaylist.eu.pn"])) {
3324 a.readOnly("makePopunder", false);
3325}
3326if (a.domCmp(["onmeda.de"])) {
3327 a.readOnly("$ADP", true);
3328 a.readOnly("sas_callAd", () => { });
3329 a.readOnly("sas_callAds", () => { });
3330}
3331if (a.domCmp(["rockfile.eu"])) {
3332 a.ready(() => {
3333 a.$("<iframe>").attr("src", "about:blank").css("visibility", "hidden").appendTo("body");
3334 });
3335}
3336if (a.domCmp(["referencemega.com", "fpabd.com", "crackacc.com"])) {
3337 a.cookie("_lbGatePassed", "true");
3338}
3339if (a.domCmp(["link.tl"])) {
3340 a.css(".adblock { height:1px; }");
3341 a.readOnly("adblocker", false);
3342 a.timewarp("setInterval", a.matchMethod.stringExact, "1800");
3343}
3344if (a.domCmp(["wstream.video"])) {
3345 a.css("#adiv { height:4px; }");
3346}
3347if (a.domCmp(["4shared.com"])) {
3348 a.ready(() => {
3349 a.$("body").removeClass("jsBlockDetect");
3350 });
3351}
3352if (a.domCmp(["pro-zik.ws", "pro-tect.ws", "pro-ddl.ws", "pro-sport.ws"])) {
3353 a.cookie("visitedf", "true");
3354 a.cookie("visitedh", "true");
3355}
3356if (a.domCmp(["comptoir-hardware.com"])) {
3357 a.readOnly("adblock", "non");
3358}
3359if (a.domCmp(["bakersfield.com"])) {
3360 a.readOnly("AD_SLOT_RENDERED", true);
3361}
3362if (a.domCmp(["ekstrabladet.dk", "eb.dk"])) {
3363 a.noAccess("eb");
3364}
3365if (a.domCmp(["pcgames-download.net"])) {
3366 a.always(() => {
3367 a.cookie("noAdblockNiceMessage", "1");
3368 a.win.mgCanLoad30547 = true;
3369 });
3370}
3371if (a.domCmp(["lachainemeteo.com"])) {
3372 a.readOnly("js_loaded", true);
3373}
3374if (a.domCmp(["mac4ever.com"])) {
3375 a.readOnly("coquinou", () => { });
3376}
3377if (a.domCmp(["5278bbs.com"])) {
3378 a.readOnly("myaabpfun12", () => { });
3379}
3380if (a.domCmp(["thesimsresource.com"])) {
3381 a.readOnly("gadsize", true);
3382 a.readOnly("iHaveLoadedAds", true);
3383}
3384if (a.domCmp(["yellowbridge.com"])) {
3385 a.readOnly("finalizePage", () => { });
3386}
3387if (a.domCmp(["game-debate.com"])) {
3388 a.readOnly("ad_block_test", () => { });
3389}
3390if (a.domCmp(["kissanime.com", "kissanime.to", "kissanime.ru"])) {
3391 a.css("iframe[id^='adsIfrme'], .divCloseBut { display:none; }");
3392 a.ready(() => {
3393 const divContentVideo = a.doc.querySelector("#divContentVideo");
3394 if (a.win.DoDetect2) {
3395 a.win.DoDetect2 = null;
3396 a.win.CheckAdImage = null;
3397 } else if (divContentVideo) {
3398 const divDownload = a.doc.querySelector("#divDownload").cloneNode(true);
3399 a.setTimeout(() => {
3400 divContentVideo.innerHTML = "";
3401 a.win.DoHideFake();
3402 divContentVideo.appendChild(divDownload);
3403 a.$("iframe[id^='adsIfrme'], .divCloseBut").remove();
3404 }, 5500);
3405 }
3406 });
3407}
3408if (a.domCmp(["kissanime.io"])) {
3409 a.readOnly("check_adblock", true);
3410}
3411if (a.domCmp(["kisscartoon.me", "kisscartoon.se"])) {
3412 a.readOnly("xaZlE", () => { });
3413 a.ready(() => {
3414 a.$("iframe[id^='adsIfrme']").remove();
3415 });
3416}
3417if (a.domCmp(["openload.co", "openload.io", "openload.tv"])) {
3418 a.readOnly("adblock", false);
3419 a.readOnly("adblock2", false);
3420 a.readOnly("popAdsLoaded", true);
3421}
3422if (a.domCmp(["youwatch.to", "he2eini7ka.com", "shink.in"])) {
3423 a.readOnly("jsPopunder", () => { });
3424}
3425if (a.domCmp(["he2eini7ka.com"])) {
3426 a.readOnly("adsShowPopup1", 1);
3427}
3428if (a.domCmp(["youwatch.org", "chouhaa.info", "ahzahg6ohb.com", "ahzahg6ohb.com"])) {
3429 a.readOnly("adsShowPopup1", 1);
3430 a.ready(() => {
3431 a.$("#player_imj, #player_imj + div[id]").remove();
3432 });
3433}
3434if (a.domCmp(["exashare.com", "chefti.info", "bojem3a.info", "ajihezo.info", "yahmaib3ai.com",
3435 "yahmaib3ai.com"])) {
3436 a.readOnly("adsShowPopup1", 1);
3437 a.ready(() => {
3438 a.$("#player_gaz, #player_gaz + div[id]").remove();
3439 });
3440}
3441if (a.domCmp(["an1me.se"])) {
3442 a.readOnly("isBlockAds2", false);
3443}
3444if (a.domCmp(["hqq.tv"])) {
3445 a.ready(() => {
3446 if (a.win.location.pathname === "/player/embed_player.php") {
3447 a.$("form[id^='form-']").submit();
3448 }
3449 });
3450}
3451if (a.domCmp(["koscian.net"])) {
3452 a.ready(() => {
3453 a.$(".ban").remove();
3454 });
3455}
3456if (a.domCmp(["eclypsia.com"])) {
3457 a.generic.FuckAdBlock("MggAbd", "mggAbd");
3458}
3459if (a.domCmp(["gamingroom.tv"])) {
3460 a.readOnly("adblock_detect", () => { });
3461 a.readOnly("GR_adblock_hide_video", () => { });
3462 a.readOnly("adblock_video_msg_start", () => { });
3463 a.readOnly("adblock_video_msg_stop", () => { });
3464 a.readOnly("disable_chat", () => { });
3465}
3466if (a.domCmp(["rtl.de"])) {
3467 a.ready(() => {
3468 a.$("div[data-widget='video']").each(function () {
3469 const url = a.$(this).data("playerLayerCfg").videoinfo.mp4url;
3470 a.$(this).after(a.nativePlayer(url));
3471 a.$(this).remove();
3472 });
3473 });
3474}
3475if (a.domCmp(["play.radio1.se", "play.bandit.se", "play.lugnafavoriter.com", "play.rixfm.se"])) {
3476 a.on("load", () => {
3477 a.setTimeout(() => {
3478 a.win.player_load_live(a.win.stream_id);
3479 }, 1000);
3480 });
3481}
3482if (a.domCmp(["dplay.com", "dplay.dk", "dplay.se"])) {
3483 let date = new a.win.Date();
3484 date.setDate(date.getDate() + 365);
3485 const timestamp = date.getTime().toString();
3486 const value = JSON.stringify({
3487 notificationSubmission: "submitted",
3488 reportingExpiry: timestamp,
3489 notificationExpiry: timestamp,
3490 });
3491 a.cookie("dsc-adblock", value);
3492}
3493if (a.domCmp(["viafree.no", "viafree.dk", "viafree.se", "tvplay.skaties.lv", "play.tv3.lt", "tv3play.tv3.ee"])) {
3494 //Thanks to szymon1118
3495 let isInBackground = false;
3496 const idMatcher = /\/(\d+)/;
3497 const videoJS = (source, type, width, height) => {
3498 return `<iframe srcdoc='<html><head><link href="https://cdnjs.cloudflare.com/ajax/libs/video.js/5.10.5/al` +
3499 `t/video-js-cdn.min.css" rel="stylesheet"><script src="https://cdnjs.cloudflare.com/ajax/libs/video.j` +
3500 `s/5.10.5/video.min.js"><\/script><script src="https://cdnjs.cloudflare.com/ajax/libs/videojs-contrib` +
3501 `-hls/3.1.0/videojs-contrib-hls.min.js"><\/script><style type="text/css">html, body{padding:0; margin` +
3502 `:0;}.vjs-default-skin{color:#eee}.vjs-default-skin .vjs-play-progress,.vjs-default-skin .vjs-volume-` +
3503 `level{background-color:#eee}.vjs-default-skin .vjs-big-play-button,.vjs-default-skin .vjs-control-ba` +
3504 `r{background:rgba(0,0,0,.2)}.vjs-default-skin .vjs-slider{background:rgba(0,0,0,.3)}</style></head><` +
3505 `body><video id="uBlock_Protector_Video_Player" class="video-js vjs-default-skin" controls preload="a` +
3506 `uto" width="${width}" height="${height}"><source src="${source}" type="${type}"></video><script>vide` +
3507 `ojs("uBlock_Protector_Video_Player")<\/script></body></html>' width="${width}" height="${height}" fr` +
3508 `ameborder="0" scrolling="no" allowfullscreen="true"></iframe>`;
3509 };
3510 const handler = () => {
3511 if (isInBackground) {
3512 a.setTimeout(handler, 1000);
3513 return;
3514 }
3515 //Find player
3516 const elem = a.$("#video-player");
3517 if (elem.length === 0) {
3518 a.setTimeout(handler, 1000);
3519 return;
3520 }
3521 //Find ID
3522 let videoID;
3523 if (a.domCmp(["tvplay.skaties.lv", "play.tv3.lt", "tv3play.tv3.ee"], true)) {
3524 let tmp = idMatcher.exec(a.win.location.href);
3525 if (tmp) {
3526 videoID = tmp[1];
3527 }
3528 } else if (a.win.vfAvodpConfig) {
3529 videoID = a.win.vfAvodpConfig.videoId;
3530 }
3531 if (!videoID) {
3532 a.setTimeout(handler, 1000);
3533 return;
3534 }
3535 //Request data JSON
3536 //The proxy does not seem work anymore
3537 //const proxy = "http://www.sagkjeder.no/p/browse.php?u=";
3538 GM_xmlhttpRequest({
3539 method: "GET",
3540 url: `http://playapi.mtgx.tv/v3/videos/stream/${videoID}`,
3541 onload(result) {
3542 if (a.config.debugMode) {
3543 a.out.info("Response received:");
3544 a.out.info(result.responseText);
3545 }
3546 parser(result.responseText);
3547 },
3548 onerror() {
3549 a.out.error("AAK failed to find media URL!");
3550 },
3551 });
3552 };
3553 const parser = (data) => {
3554 //Parse response
3555 let streams;
3556 try {
3557 const parsedData = JSON.parse(data);
3558 streams = parsedData.streams;
3559 if (!streams) {
3560 throw "Media URL Not Found";
3561 }
3562 } catch (err) {
3563 a.out.error("AAK failed to find media URL!");
3564 return;
3565 }
3566 //Check source and type
3567 let source, type;
3568 if (streams.high && streams.high !== "") {
3569 source = streams.high;
3570 type = "video/mp4";
3571 } else if (streams.hls && streams.hls !== "") {
3572 source = streams.hls;
3573 type = "application/x-mpegURL";
3574 } else if (streams.medium && streams.medium !== "") {
3575 source = streams.medium;
3576 type = streams.medium.startsWith("rtmp") ? "rtmp/mp4" : "application/f4m+xml";
3577 } else {
3578 a.out.error("AAK failed to find media URL!");
3579 return;
3580 }
3581 if (a.config.debugMode) {
3582 a.out.info("Potential media URLs:");
3583 a.out.info([streams.high, streams.hls, streams.medium]);
3584 a.out.info("Used media URL:");
3585 a.out.info(source);
3586 }
3587 //Replace player
3588 const player = a.$("#video-player");
3589 const height = player.height();
3590 const width = player.width();
3591 player.after(videoJS(source, type, width, height)).remove();
3592 //Watch for more video players
3593 handler();
3594 };
3595 //Start
3596 handler();
3597 a.on("focus", () => { isInBackground = false; });
3598 a.on("blur", () => { isInBackground = true; });
3599}
3600if (a.domCmp(["firstrow.co", "firstrows.ru", "firstrows.tv", "firstrows.org", "firstrows.co",
3601 "firstrows.biz", "firstrowus.eu", "firstrow1us.eu", "firstsrowsports.eu", "firstrowsportes.tv",
3602 "firstrowsportes.com", "justfirstrowsports.com", "hahasport.me", "wiziwig.ru", "wiziwig.sx",
3603 "wiziwig.to", "wiziwig.tv", "myp2p.biz", "myp2p.tv", "myp2p.la", "myp2p.ec", "myp2p.eu", "myp2p.sx",
3604 "myp2p.ws", "myp2p.com", "atdhe.ru", "atdhe.se", "atdhe.bz", "atdhe.top", "atdhe.to", "atdhe.me",
3605 "atdhe.mx", "atdhe.li", "atdhe.al"])) {
3606 a.filter("open");
3607 a.always(() => {
3608 a.cookie("adb", "1");
3609 a.css("#bannerInCenter, #hiddenBannerCanvas { display:none; }");
3610 });
3611}
3612if (a.domCmp(["buzina.xyz", "farmet.info", "rimladi.com", "kitorelo.com", "omnipola.com", "porosin.co.uk",
3613 "rimleno.com", "simple4alls.com", "arsopo.com"])) {
3614 a.css("#adsframe { height:151px; }");
3615 a.ready(() => {
3616 a.$("#adsframe").remove();
3617 a.$("#remove-over").click();
3618 });
3619}
3620if (a.domCmp(["buzina.xyz"])) {
3621 a.css("#adsframe { height:151px; }");
3622 a.ready(() => {
3623 const elem = a.$("iframe[src*='.php?hash=']");
3624 if (elem.length > 0) {
3625 let parts = elem.attr("src").split("/");
3626 parts[2] = "arsopo.com";
3627 elem.attr("src", parts.join("/"));
3628 }
3629 });
3630}
3631if (a.domCmp(["allmyvideos.net", "amvtv.net"])) {
3632 a.cookie("_favbt33", "1");
3633}
3634if (a.domCmp(["ilive.to", "streamlive.to"])) {
3635 a.on("load", () => {
3636 if (a.win.location.pathname.toLowerCase().startsWith("/embedplayer.php")) {
3637 a.setTimeout(() => {
3638 a.win.removeOverlayHTML();
3639 }, 1000);
3640 }
3641 });
3642}
3643if (a.domCmp(["micast.tv"])) {
3644 a.cookie("vid_main", "true");
3645 a.cookie("vid_sub", "true");
3646 a.on("load", () => {
3647 if (a.win.removeOverlayHTML) {
3648 a.win.removeOverlayHTML();
3649 }
3650 })
3651}
3652if (a.domCmp(["pxstream.tv"])) {
3653 a.on("load", () => {
3654 if (a.win.location.pathname.startsWith("/embedrouter.php")) {
3655 a.setTimeout(() => {
3656 a.win.closeAd();
3657 }, 1000);
3658 }
3659 });
3660}
3661if (a.domCmp(["sawlive.tv"])) {
3662 a.ready(() => {
3663 if (a.win.location.pathname.toLowerCase().startsWith("/embed/watch/")) {
3664 a.win.display = false;
3665 a.win.closeMyAd();
3666 }
3667 });
3668}
3669if (a.domCmp(["goodcast.co"])) {
3670 a.ready(() => {
3671 if (a.win.location.pathname.startsWith("/stream.php")) {
3672 a.$(".advertisement").hide();
3673 a.$(".adsky iframe").attr("src", "about:blank");
3674 }
3675 });
3676}
3677if (a.domCmp(["showsport-tv.com"])) {
3678 a.ready(() => {
3679 if (a.win.location.pathname.startsWith("/ch.php")) {
3680 a.$("#advertisement, .advertisement").remove();
3681 }
3682 });
3683}
3684if (a.domCmp(["sharecast.to"])) {
3685 a.ready(() => {
3686 if (a.win.location.pathname.startsWith("/embed.php")) {
3687 const token = a.setInterval(() => {
3688 a.cookie("vid_main", "true");
3689 a.cookie("vid_sub", "2");
3690 a.cookie("vid_delay", "true");
3691 }, 100);
3692 a.setTimeout(() => {
3693 a.clearInterval(token);
3694 }, 5000);
3695 a.$("#table1").remove();
3696 }
3697 });
3698}
3699if (a.domCmp(["cityam.com", "computerworlduk.com", "techworld.com", "v3.co.uk"])) {
3700 a.ready(() => {
3701 a.$("#r3z-wait").remove();
3702 a.$(".r3z-hide").removeClass("r3z-hide");
3703 a.win._r3z = null;
3704 });
3705}
3706if (a.domCmp(["next-episode.net", "kingmaker.news", "gamespowerita.com", "todayidol.com", "receive-a-sms.com",
3707 "wakeupcallme.com", "ringmycellphone.com", "faqmozilla.org", "thememypc.com"])) {
3708 a.always(() => {
3709 a.win.google_jobrunner = {};
3710 });
3711}
3712if (a.domCmp(["dawn.com"])) {
3713 a.generic.FuckAdBlock("DetectAdBlock", "detectAdBlock");
3714}
3715if (a.domCmp(["sports.fr"])) {
3716 a.generic.FuckAdBlock("FabInstance", "fabInstance");
3717}
3718if (a.domCmp(["europe1.fr"])) {
3719 a.generic.FuckAdBlock("FabInstance", "fabInstance");
3720}
3721if (a.domCmp(["newyorker.com"])) {
3722 a.generic.FuckAdBlock("SniffAdBlock", "sniffAdBlock");
3723}
3724if (a.domCmp(["mangasproject.com.br", "mangasproject.net.br", "mangas.zlx.com.br"])) {
3725 a.generic.FuckAdBlock(a.uid(), "mangasLeitorSlider");
3726}
3727if (a.domCmp(["qnimate.com"])) {
3728 a.readOnly("adBlockDetected", () => { });
3729}
3730if (a.domCmp(["eurotransport.de"])) {
3731 a.generic.FuckAdBlock(a.uid(), "antiAdBlock");
3732}
3733if (a.domCmp(["tzetze.it", "beppegrillo.it", "la-cosa.it"])) {
3734 a.generic.FuckAdBlock("CADetect", "cadetect");
3735}
3736if (a.domCmp(["agario.sx", "agarabi.com"])) {
3737 a.generic.FuckAdBlock(a.uid(), "agario_SX_ads");
3738}
3739if (a.domCmp(["filespace.com"])) {
3740 a.generic.FuckAdBlock(a.uid(), "fAB");
3741}
3742if (a.domCmp(["topserialy.sk"])) {
3743 a.generic.FuckAdBlock(a.uid(), "sratNaVas");
3744}
3745if (a.domCmp(["sport-show.fr", "vipflash.net", "2site.me"])) {
3746 a.css("#blockblockA { visibility:invisible; display:none; } #blockblockA td { visibility:invisible; " +
3747 "display:none; } #blockblockA td p { visibility:invisible; display:none; } #blockblockB " +
3748 "{ visibility:visible; display:block; }");
3749}
3750if (a.domCmp(["gametransfers.com", "winandmac.com", "free-steam-giveaways.com", "canalwp.com",
3751 "alphahistory.com", "nordpresse.be", "sospc.name", "baboo.com.br", "nflix.pl"])) {
3752 a.always(() => {
3753 a.cookie("anCookie", "true");
3754 a.win.anOptions = {};
3755 });
3756}
3757if (a.domCmp(["lewebtvbouquetfrancophone.overblog.com", "webtv.bloguez.com", "latelegratuite.blogspot.com",
3758 "totaldebrid.org", "37.187.173.205", "tvgratuite.blogspot.com"])) {
3759 a.bait("div", "#my_ad_div");
3760 a.readOnly("jabbahud", () => { });
3761}
3762if (a.domCmp(["mybank.pl", "rapidgrab.pl"])) {
3763 a.filter("addEventListener", a.matchMethod.string, ".nextFunction()}");
3764}
3765if (a.domCmp(["linkdrop.net", "revclouds.com", "leporno.org", "uploadshub.com", "dasolo.org",
3766 "fullstuff.net", "zeusnews.it", "cheminots.net", "lolsy.tv", "animes-mangas-ddl.com",
3767 "noticiasautomotivas.com.br", "darkstars.org", "corepacks.com", "naturalbd.com",
3768 "coolsoft.altervista.org", "openload.us", "cda-online.pl", "urbanplanet.org", "mamahd.com",
3769 "sadeempc.com", "avmoo.com", "thailande-fr.com", "btaia.com", "tusoft.org", "hisse.net",
3770 "europeup.com", "nrj.fr", "srnk.co", "animmex.co", "socketloop.com", "crackhex.com",
3771 "revealedtricks4u.com", "pizzamaking.com", "computerworm.net", "yourlifeupdated.net"])) {
3772 a.filter("setTimeout", a.matchMethod.string, "bab_elementid");
3773}
3774/*
3775if (a.domCmp(["commentcamarche.net", "journaldesfemmes.com", "linternaute.com"])) {
3776 //Crash script by keywords
3777 a.crashScript("Asl.prototype.inject");
3778}
3779*/
3780if (a.domCmp(["fourchette-et-bikini.fr", "meteocity.com"])) {
3781 a.readOnly("adProtect", 1);
3782}
3783if (a.domCmp(["demo-phoenix.com", "dpstream.net", "gum-gum-streaming.com", "jeu.info", "sofoot.com",
3784 "gaara-fr.com", "gaytube.com", "tuxboard.com", "xstory-fr.com", "hentaifr.net", "filmstreaming-hd.com",
3785 "filmvf.net", "hentaihaven.org", "narutoshippudenvf.com", "thebadbuzz.com", "manga-news.com", "jeu.video",
3786 "mangas-fr.com"])) {
3787 //crashScript breaks uBO element picker
3788 //a.crashScript("PHENV");
3789 a.css("body { visibility:visible; }");
3790}
3791/*
3792if (a.domCmp(["tvspielfilm.de", "finanzen.ch"])) {
3793 //crashScript breaks uBO element picker
3794 a.crashScript("UABPInject");
3795}
3796if (a.domCmp(["watchgeneration.fr", "turbo.fr", "24matins.fr", "foot01.com", "clubic.com", "macg.co",
3797"begeek.fr", "igen.fr", "gamestar.de", "focus.de", "stern.de", "fem.com", "wetter.com",
3798"wetteronline.de", "pcwelt.de", "boerse-online.de", "sportauto.de", "auto-motor-und-sport.de",
3799"motor-klassik.de", "4wheelfun.de", "autostrassenverkehr.de", "lustich.de", "spox.com", "shz.de",
3800"transfermarkt.de", "rp-online.de", "motorradonline.de", "20min.ch", "main-spitze.de",
3801"wormser-zeitung.de", "lampertheimer-zeitung.de", "wiesbdener-tagblatt.de", "buerstaedter-zeitung.de",
3802"wiesbdener-kurier.de", "rhein-main-presse.de", "allgemeine-zeitung.de", "ariva.de", "spiegel.de",
3803"brigitte.de", "dshini.net", "gala.de", "gamepro.de", "gamona.de", "pnn.de", "promobil.de", "sportal.de",
3804"webfail.com", "computerbild.de", "finanzen.net", "comunio.de", "medisite.fr"]) || a.domInc(["sat1",
3805"prosieben", "kabeleins", "sat1gold", "sixx", "prosiebenmaxx", "the-voice-of-germany"])) {
3806 //crashScript breaks uBO element picker
3807 a.crashScript("uabInject");
3808}
3809*/
3810if (a.domCmp(["emuparadise.me"])) {
3811 a.always(() => {
3812 a.$("h2:contains('Bandwidth is expensive')").parent().remove();
3813 });
3814}
3815if (a.domCmp(["sapib.ca"])) {
3816 a.readOnly("Abd_Detector", () => { });
3817}
3818if (a.domCmp(["wowhead.com"])) {
3819 a.ready(() => {
3820 a.$("div[id^='ad-']").parent().parent().parent().remove();
3821 });
3822}
3823if (a.domCmp(["epiotrkow.pl"])) {
3824 a.bait("div", "#adboxx");
3825}
3826if (a.domCmp(["fox.com.tr"])) {
3827 a.readOnly("adblockDetector", {
3828 init() { }
3829 });
3830}
3831if (a.domCmp(["thebatavian.com"])) {
3832 a.readOnly("broadstreet", true);
3833}
3834if (a.domCmp(["zrabatowani.pl"])) {
3835 a.cookie("adblockAlert", "yes");
3836}
3837if (a.domCmp(["hanime.tv"])) {
3838 //NSFW!
3839 //Issue: https://github.com/jspenguin2017/uBlockProtector/issues/76
3840 const _open = a.win.open;
3841 a.win.open = (...args) => {
3842 _open.apply(a.win, args);
3843 //This will close the tab instantly with Violentmonkey
3844 window.close();
3845 };
3846 //Old solution, I will run it just in case
3847 a.readOnly("BetterJsPop", () => { });
3848}
3849if (a.domCmp(["firstonetv.eu"])) {
3850 a.readOnly("blocked", () => { });
3851 a.readOnly("adFuckBlock", () => { });
3852}
3853if (a.domCmp(["whosampled.com"])) {
3854 a.readOnly("showAdBlockerOverlay", () => { });
3855}
3856if (a.domCmp(["pornhub.com", "redtube.com", "youporn.com", "tube8.com", "pornmd.com",
3857 "thumbzilla.com", "xtube.com", "peeperz.com", "czechhq.net", "29443kmq.video"])) {
3858 //NSFW!
3859 //29443kmq.video is the iframe of czechhq.net, other domains are part of Porthub Network
3860 a.win.open = (arg) => {
3861 if (arg.includes(a.dom)) {
3862 a.win.location.href = arg;
3863 }
3864 };
3865}
3866if (a.domCmp(["pastebin.com"])) {
3867 a.readOnly("abdd", "");
3868}
3869if (a.domCmp(["debridnet.com"])) {
3870 a.noAccess("_pop");
3871}
3872if (a.domCmp(["xnxx.com"])) {
3873 a.cookie("wpn-popupunder", "1");
3874 a.readOnly("openpop", () => { });
3875}
3876if (a.domCmp(["burning-feed.com"])) {
3877 //Thanks to uBlock-user
3878 //a.readOnly("testab", "1");
3879 //a.readOnly("ads_enable", "true");
3880 a.readOnly("ads_enable", () => { });
3881}
3882if (a.domCmp(["chip.de"])) {
3883 //https://github.com/uBlockOrigin/uAssets/blob/2a444825eb93f5abaf90b7f8594ed45ecef2f823/filters/filters.txt#L1435
3884 a.noAccess("stop");
3885}
3886if (a.domCmp(["ghame.ru"])) {
3887 a.$("<p class='adsbygoogle' style='display:none;'>hi</p>").prependTo("html");
3888}
3889if (a.domCmp(["thevideo.me", "fmovies.to", "fmovies.se", "fmovies.is"])) {
3890 //Issue: https://github.com/jspenguin2017/uBlockProtector/issues/86
3891 //Issue: https://github.com/jspenguin2017/uBlockProtector/issues/99
3892 a.win.open = () => { };
3893}
3894if (a.domCmp(["is.fi", "viasatsport.fi"])) {
3895 //Issue: https://github.com/jspenguin2017/uBlockProtector/issues/88
3896 a.readOnly("Sabdetect_load", false);
3897 if (a.domCmp(["viasatsport.fi"], true)) {
3898 a.config.allowGeneric = false;
3899 }
3900}
3901if (a.domCmp(["mooseroots.com", "insidegov.com", "gearsuite.com"])) {
3902 //Issue: https://github.com/jspenguin2017/uBlockProtector/issues/96
3903 a.css("html,body { overflow-y:scroll; } .BOX-wrap { display:none; }");
3904}
3905if (a.domCmp(["sandiegouniontribune.com"])) {
3906 const token = a.setInterval(() => {
3907 if (a.$("#reg-overlay").length) {
3908 a.$("#reg-overlay").remove()
3909 a.$("<style> html[data-dss-meterup], [data-dss-meterup] body { " +
3910 "overflow: scroll !important; } </style>").appendTo("head");
3911 a.clearInterval(token);
3912 }
3913 }, 1000);
3914 a.filter("addEventListener", a.matchMethod.stringExact, "scroll");
3915}
3916if (a.domCmp(["adz.bz", "mellow.link", "hop.bz", "mellowads.com", "url.vin",
3917 "clik.bz"])) {
3918 //Issue: https://github.com/jspenguin2017/uBlockProtector/issues/106
3919 let val;
3920 a.win.Object.defineProperty(a.win, "linkVM", {
3921 configurable: false,
3922 set(arg) {
3923 val = arg;
3924 },
3925 get() {
3926 if (val.verify) {
3927 val.verify = (() => {
3928 callAPI(
3929 "publishing",
3930 "VerifyLinkClick",
3931 {
3932 linkRef: val.linkRef(),
3933 linkClickRef: $("#LinkClickRef")[0].value,
3934 recaptchaResponse: val.recaptchaResponse()
3935 },
3936 "Verify",
3937 "Verifying",
3938 (response) => {
3939 if (response.result) {
3940 window.location.href = response.linkURL;
3941 } else {
3942 showMessageModal("Verify failed", response.resultHtml, response.result);
3943 }
3944 },
3945 null,
3946 () => {
3947 grecaptcha.reset();
3948 }
3949 );
3950 }).bind(val);
3951 }
3952 return val;
3953 },
3954 });
3955}
3956if (a.domCmp(["zap.in"])) {
3957 //Issue: https://github.com/jspenguin2017/uBlockProtector/issues/201
3958 let val;
3959 a.win.Object.defineProperty(a.win, "zapVM", {
3960 configurable: false,
3961 set(arg) {
3962 val = arg;
3963 },
3964 get() {
3965 if (val.verify) {
3966 val.verify = (() => {
3967 callAPI(
3968 "VerifyZapClick",
3969 {
3970 linkRef: val.linkRef(),
3971 linkClickRef: $("#LinkClickRef")[0].value,
3972 recaptchaResponse: val.recaptchaResponse()
3973 },
3974 "Verify",
3975 "Verifying",
3976 (response) => {
3977 if (response.result) {
3978 window.location.href = response.zapURL;
3979 } else {
3980 showMessageModal("Verify failed", response.resultHtml, response.result);
3981 }
3982 },
3983 null,
3984 () => {
3985 grecaptcha.reset();
3986 }
3987 );
3988 }).bind(val);
3989 }
3990 return val;
3991 },
3992 });
3993}
3994if (a.domCmp(["adbull.me", "freepdf-books.com", "bc.vc", "themeslide.com", "linkdrop.net", "fas.li", "123link.top"])) {
3995 a.timewarp("setInterval", a.matchMethod.stringExact, "1000");
3996}
3997if (a.domCmp(["shink.in"])) {
3998 //Prevent block screen
3999 a.readOnly("RunAds", true);
4000 //Skip countdown
4001 if (a.win.location.pathname.startsWith("/go/")) {
4002 a.ready(() => {
4003 const link = a.doc.getElementById("btn-main");
4004 const i = link.href.lastIndexOf("http");
4005 const url = link.href.substr(i);
4006 a.win.location.href = url;
4007 });
4008 }
4009 //Block popup
4010 a.readOnly("jsPopunder", () => { });
4011 a.win.open = () => { };
4012 a.filter('document.createElement', a.matchMethod.callback, function(args) {
4013 var elem = (args[0]||"").toLowerCase();
4014 return elem == "a";
4015 }, function(args) {
4016 switch (args[0].toLowerCase()) {
4017 case "a":
4018 return null;
4019 }
4020 });
4021}
4022if (a.domCmp(["gamezhero.com"])) {
4023 a.readOnly("ads", true);
4024 a.timewarp("setInterval", a.matchMethod.string, "function (){var _0x");
4025}
4026if (a.domCmp(["freetvall.com"])) {
4027 a.readOnly("clickNS", () => { });
4028}
4029if (a.domCmp(["hotslogs.com"])) {
4030 //Issue: https://github.com/jspenguin2017/uBlockProtector/issues/121
4031 a.win.MonkeyBroker = {};
4032 a.noAccess("MonkeyBroker.regSlotsMap");
4033}
4034if (a.domCmp(["undeniable.info"])) {
4035 a.bait("div", "#testadblock");
4036}
4037if (a.domInc(["gamereactor"])) {
4038 //Issue: https://github.com/jspenguin2017/uBlockProtector/issues/124
4039 a.cookie("countdownToAd", "-1");
4040 //Skip welcome page
4041 a.ready(() => {
4042 if (a.doc.querySelector("a.buttonBox.continue > span").innerHTML.startsWith("Continue to ")) {
4043 location.reload();
4044 }
4045 });
4046}
4047if (a.domCmp(["dasolo.co"])) {
4048 //Issue: https://github.com/jspenguin2017/uBlockProtector/issues/126
4049 a.win.eval = () => { };
4050 a.noAccess("adblockblock");
4051 a.bait("div", "#loveyou");
4052 //Remove right click and shortcut keys blocker
4053 //a.readOnly will crash function declaration, so these are enough
4054 a.readOnly("nocontext", null);
4055 a.readOnly("mischandler", null);
4056 a.readOnly("disableselect", null);
4057 a.filter("document.addEventListener", a.matchMethod.stringExact, "contextmenu");
4058 //Issue: https://github.com/jspenguin2017/uBlockProtector/issues/280
4059 a.filter("alert");
4060 a.on("load", () => {
4061 a.doc.oncontextmenu = null;
4062 a.doc.onmousedown = null;
4063 a.doc.onmouseup = null;
4064 a.setTimeout(() => {
4065 a.win.$("body").unbind("contextmenu");
4066 a.win.$("#id").unbind("contextmenu");
4067 }, 250);
4068 });
4069}
4070if (a.domCmp(["titulky.com"])) {
4071 //Issue: https://github.com/jspenguin2017/uBlockProtector/issues/128
4072 a.generic.FuckAdBlock("FADB", "fADB");
4073}
4074if (a.domCmp(["discoveryrom.org"])) {
4075 a.win.adsbygoogle = [];
4076}
4077if (a.domCmp(["sthelensstar.co.uk", "runcornandwidnesworld.co.uk", "leighjournal.co.uk",
4078 "warringtonguardian.co.uk", "northwichguardian.co.uk", "middlewichguardian.co.uk",
4079 "knutsfordguardian.co.uk", "wilmslowguardian.co.uk", "creweguardian.co.uk",
4080 "thewestmorlandgazette.co.uk", "newsquest.co.uk", "messengernewspapers.co.uk",
4081 "lancashiretelegraph.co.uk", "asianimage.co.uk", "chorleycitizen.co.uk",
4082 "theboltonnews.co.uk", "burytimes.co.uk", "prestwichandwhitefieldguide.co.uk",
4083 "wirralglobe.co.uk", "autoexchange.co.uk", "chesterlestreetadvertiser.co.uk",
4084 "consettstanleyadvertiser.co.uk", "darlingtonaycliffesedgefieldadvertiser.co.uk",
4085 "darlingtonandstocktontimes.co.uk", "durhamadvertiser.co.uk",
4086 "edition.pagesuite-professional.co.uk", "durhamtimes.co.uk", "northyorkshireadvertiser.co.uk",
4087 "thenorthernecho.co.uk", "northernfarmer.co.uk", "wearvalleyadvertiser.co.uk",
4088 "gazetteherald.co.uk", "yorkpress.co.uk", "cravenherald.co.uk", "ilkleygazette.co.uk",
4089 "keighleynews.co.uk", "thetelegraphandargus.co.uk", "wharfedaleobserver.co.uk",
4090 "herefordtimes.com", "ludlowadvertiser.co.uk", "redditchadvertiser.co.uk",
4091 "bromsgroveadvertiser.co.uk", "droitwichadvertiser.co.uk", "cotswoldjournal.co.uk",
4092 "eveshamjournal.co.uk", "tewkesburyadmag.co.uk", "dudleynews.co.uk", "halesowennews.co.uk",
4093 "stourbridgenews.co.uk", "kidderminstershuttle.co.uk", "ledburyreporter.co.uk",
4094 "malverngazette.co.uk", "worcesternews.co.uk", "southendstandard.co.uk",
4095 "essexcountystandard.co.uk", "gazette-news.co.uk", "clactonandfrintongazette.co.uk",
4096 "harwichandmanningtreestandard.co.uk", "braintreeandwithamtimes.co.uk", "halsteadgazette.co.uk",
4097 "guardian-series.co.uk", "brentwoodweeklynews.co.uk", "chelmsfordweeklynews.co.uk",
4098 "maldonandburnhamstandard.co.uk", "thurrockgazette.co.uk", "basildonrecorder.co.uk",
4099 "echo-news.co.uk", "bucksfreepress.co.uk", "theargus.co.uk", "redhillandreigatelife.co.uk",
4100 "romseyadvertiser.co.uk", "dailyecho.co.uk", "hampshirechronicle.co.uk",
4101 "basingstokegazette.co.uk", "andoveradvertiser.co.uk", "stalbansreview.co.uk",
4102 "watfordobserver.co.uk", "heraldseries.co.uk", "banburycake.co.uk", "bicesteradvertiser.net",
4103 "oxfordmail.co.uk", "oxfordtimes.co.uk", "witneygazette.co.uk", "falmouthpacket.co.uk",
4104 "smallholder.co.uk", "southwestfarmer.co.uk", "dorsetecho.co.uk", "bournmouthecho.co.uk",
4105 "bridportnews.co.uk", "wiltsglosstandard.co.uk", "gazetteseries.co.uk", "bridgwatermercury.co.uk",
4106 "burnhamandhighbridgeweeklynews.co.uk", "chardandilminsternews.co.uk", "middevonstar.co.uk",
4107 "somersetcountygazette.co.uk", "thisisthewestcountry.co.uk", "yeovilexpress.co.uk",
4108 "wiltshiretimes.co.uk", "swindonadvertiser.co.uk", "salisburyjournal.co.uk",
4109 "boxingnewsonline.net", "engagedinvestor.co.uk", "globalreinsurance.com", "insurancetimes.co.uk",
4110 "pensions-insight.co.uk", "strategic-risk-global.com", "reward-guide.co.uk", "thestrad.com",
4111 "times-series.co.uk", "borehamwoodtimes.co.uk", "ealingtimes.co.uk", "enfieldindependent.co.uk",
4112 "haringeyindependent.co.uk", "harrowtimes.co.uk", "hillingdontimes.co.uk", "newsshopper.co.uk",
4113 "croydonguardian.co.uk", "epsomguardian.co.uk", "streathamguardian.co.uk", "suttonguardian.co.uk",
4114 "wandsworthguardian.co.uk", "wimbledonguardian.co.uk", "surreycomet.co.uk", "kingstonguardian.co.uk",
4115 "richmondandtwickenhamtimes.co.uk", "campaignseries.co.uk", "southwalesguardian.co.uk",
4116 "milfordmercury.co.uk", "pembrokeshirecountyliving.co.uk", "westerntelegraph.co.uk",
4117 "tivysideadvertiser.co.uk", "southwalesargus.co.uk", "cotswoldessence.co.uk",
4118 "freepressseries.co.uk", "monmouthshirecountylife.co.uk", "barryanddistrictnews.co.uk",
4119 "penarthtimes.co.uk", "eveningtimes.co.uk", "s1cars.com", "s1community.com", "s1homes.com",
4120 "s1jobs.com", "s1rental.com", "thescottishfarmer.co.uk", "heraldscotland.com", "thenational.scot"])) {
4121 //Issue: https://github.com/jspenguin2017/uBlockProtector/issues/137
4122 a.readOnly("_sp_", null);
4123}
4124if (a.domCmp(["securenetsystems.net"])) {
4125 a.readOnly("iExist", true);
4126}
4127if (a.domCmp(["finalservers.net"])) {
4128 //Issue: https://github.com/jspenguin2017/uBlockProtector/issues/125
4129 a.ready(() => {
4130 a.win.videojs("video_1").videoJsResolutionSwitcher();
4131 });
4132}
4133if (a.domCmp(["filmy.to", "histock.info"])) {
4134 //Issue: https://github.com/jspenguin2017/uBlockProtector/issues/130
4135 a.win.open = () => {
4136 return { closed: false };
4137 };
4138}
4139if (a.domCmp(["flashx.tv"])) {
4140 a.filter("addEventListener", a.matchMethod.stringExact, "keydown", "window.document");
4141}
4142if (a.domCmp(["multiup.org", "multiup.eu"])) {
4143 a.cookie("visit", "1");
4144 a.readOnly("hi", () => { });
4145 a.ready(() => {
4146 a.$(".alert").each(function () {
4147 if (a.$(this).text().includes("Tired of ads ? Remove them")) {
4148 a.$(this).remove();
4149 }
4150 });
4151 const elem = a.$("#M130814ScriptRootC54591");
4152 elem.text().includes("Loading...") && elem.remove();
4153 });
4154}
4155if (a.domCmp(["linkneverdie.com"])) {
4156 //Issue: https://github.com/jspenguin2017/uBlockProtector/issues/146
4157 a.readOnly("eval", () => {
4158 //Remove block screen
4159 a.$("div").each(function () {
4160 if (this.id.length === 30) {
4161 this.remove();
4162 }
4163 });
4164 });
4165 a.ready(() => {
4166 a.$(".SC_TBlock").each(function () {
4167 if (a.$(this).text() === "loading...") {
4168 this.remove();
4169 }
4170 });
4171 a.$("#wrapper").show();
4172 });
4173}
4174if (a.domCmp(["ally.sh", "al.ly", "croco.site"])) {
4175 a.timewarp("setInterval", a.matchMethod.stringExact, "1000");
4176 a.win.open = null;
4177}
4178if (a.domCmp(["nbc.com"])) {
4179 a.noAccess("mps");
4180}
4181if (a.domCmp(["filmyiseriale.net"])) {
4182 //https://github.com/jspenguin2017/uBlockProtector/issues/152
4183 a.ready(() => {
4184 a.win.konik = 1;
4185 });
4186}
4187if (a.domCmp(["tf2center.com"])) {
4188 //Issue: https://github.com/jspenguin2017/uBlockProtector/issues/141
4189 a.filter("setInterval", a.matchMethod.string, '"/adblock"');
4190 a.filter("setTimeout", a.matchMethod.stringExact, "function (){B(F+1)}");
4191}
4192if (a.domCmp(["gaybeeg.info"])) {
4193 //NSFW!
4194 a.observe("insert", (node) => {
4195 if (node && node.innerHTML && node.innerHTML.includes("AdBloker Detected")) {
4196 node.remove();
4197 }
4198 });
4199 a.ready(() => {
4200 //Execute some in-line scripts manually
4201 a.$("script").each((i, elem) => {
4202 if (!elem || !elem.text) {
4203 return;
4204 }
4205 const hash = a.md5(elem.text);
4206 //Emoji script
4207 if (hash === "780f6a53e6a6ce733d964a5b93c4a703") {
4208 a.win.eval(elem.text);
4209 return;
4210 }
4211 //Archive
4212 if (elem.text.includes("/* Collapse Functions, version 2.0")) {
4213 const temp = elem.text.split("/* Collapse Functions, version 2.0");
4214 if (temp.length === 2) {
4215 const hash = a.md5(temp[1]);
4216 if (hash === "2e4a544c72f4f71e64c86ab9c5f1dd49") {
4217 a.win.eval(elem.text);
4218 } else if (a.config.debugMode) {
4219 a.out.warn("Archive related inline script does not match expected hash:");
4220 a.out.warn(temp[1]);
4221 a.out.warn(`Hash: ${hash}`);
4222 } else {
4223 a.out.warn("Archive related inline script does not match expected hash.");
4224 }
4225 //Return here to prevent it from being logged twice
4226 return;
4227 }
4228 }
4229 //Log blocked code
4230 if (a.config.debugMode) {
4231 a.out.warn("This inline script is not executed:")
4232 a.out.warn(elem.text);
4233 a.out.warn(`Hash: ${hash}`);
4234 } else {
4235 a.out.warn("An inline script is not executed.");
4236 }
4237 });
4238 //Patch download button
4239 a.$(".download a.button").each((i, el) => {
4240 a.$(el).removeClass("locked").attr("href", a.$(el).data("href"))
4241 .removeAttr("data-href");
4242 });
4243 });
4244}
4245if (a.domCmp(["mma-core.com"])) {
4246 a.noAccess("displayAdBlockedVideo");
4247}
4248if (a.domCmp(["menshealth.pl", "womenshealth.pl", "runners-world.pl",
4249 "auto-motor-i-sport.pl", "motocykl-online.pl", "mojeauto.pl"])) {
4250 a.ready(() => {
4251 if (a.win.location.pathname.startsWith("/welcome-page")) {
4252 a.win.location.href = a.$("#timeLink").attr("href");
4253 }
4254 });
4255}
4256if (a.domCmp(["dovathd.com"])) {
4257 a.ready(() => {
4258 a.$(".onp-sl-social-buttons-enabled").remove();
4259 a.$(".onp-sl-content").show();
4260 });
4261}
4262if (a.domCmp(["temp-mail.org"])) {
4263 a.readOnly("checkadBlock", () => { });
4264}
4265if (a.domCmp(["gaana.com"])) {
4266 const noop = () => { };
4267 const pType = {
4268 _auds: "", //all
4269 isauds: false,
4270 lotamecall: false,
4271 itemInfo: [],
4272 colombiaAdeURL: "",
4273 deviceType: "", //desktop
4274 colombiaCookies: "",
4275 privateMode: true,
4276 adIconInfo: [],
4277 fns: { push: noop },
4278 update: noop,
4279 colombiaAdRequest: noop,
4280 resetAdDivClass: noop,
4281 clear: noop,
4282 clearData: noop,
4283 notifyColombiaAd: noop,
4284 refresh: noop,
4285 refreshFBAd: noop,
4286 timeoutHandler: noop,
4287 load: noop,
4288 loadDataAd: noop,
4289 drawIconHtml: noop,
4290 loadDisplayAd: noop,
4291 jsonCallback: noop,
4292 getCB: noop,
4293 repllaceMacro: noop,
4294 getAdJSON: noop,
4295 fireImpression: noop,
4296 fireThirdPartyImp: noop,
4297 storeThirdPartyImprURL: noop,
4298 dataResponseFormat: noop,
4299 storeAdIcons: noop,
4300 checkDevice: noop,
4301 dfpLog: noop,
4302 };
4303 let obj = function () { };
4304 obj.prototype = pType;
4305 a.readyOnly("colombia", new obj());
4306}
4307if (a.domCmp(["gelbooru.com"])) {
4308 if (a.win.location.pathname === "/") {
4309 a.on("load", () => {
4310 a.$("div").each(function () {
4311 if (a.$(this).text() === "Have you first tried disabling your AdBlock?") {
4312 a.$(this).empty();
4313 }
4314 });
4315 });
4316 } else {
4317 a.noAccess("abvertDar");
4318 }
4319}
4320if (a.domCmp(["urle.co"])) {
4321 a.filter("setTimeout", a.matchMethod.string, "captchaCheckAdblockUser();");
4322 a.filter("eval");
4323 a.timewarp("setInterval", a.matchMethod.stringExact, "1000");
4324}
4325if (a.domCmp(["playbb.me", "easyvideo.me", "videowing.me", "videozoo.me"])) {
4326 a.ready(() => {
4327 $(".safeuploada-content").css("background", "transparent");
4328 });
4329}
4330if (a.domCmp(["nicematin.com"])) {
4331 a.noAccess("checkAds");
4332}
4333if (a.domCmp(["up-4ever.com"])) {
4334 a.filter("setTimeout", a.matchMethod.string, "$('#adblock_detected').val(1);");
4335 //Force show download links
4336 a.css("#hiddensection { display:block; }");
4337 a.ready(() => {
4338 a.$("#hiddensection").show();
4339 a.$("#hiddensection2").remove();
4340 });
4341}
4342if (a.domCmp(["exrapidleech.info"])) {
4343 //Thanks to lain566
4344 a.filter("eval");
4345 //Prevent sending to verify page
4346 a.readOnly("PopAds", "this is a string");
4347 a.cookie("popcashpuCap", "1");
4348 a.cookie("popcashpu", "1");
4349 //Remove warnings
4350 a.ready(() => {
4351 a.$(".alert-danger.lead:contains('block')").remove();
4352 a.$("p:contains('Please disable ads block')").remove();
4353 a.$("p:contains('Please turn on popup')").remove();
4354 });
4355}
4356if (a.domCmp(["ouo.io"])) {
4357 a.win.localStorage.setItem("snapLastPopAt", (new a.win.Date()).getTime());
4358 a.timewarp("setInterval", a.matchMethod.stringExact, "1000");
4359}
4360if (a.domCmp(["canalplus.fr"])) {
4361 let original; //Will be set later
4362 let currentVideoId = null; //So I do not switch unless it is different
4363 let videoElem; //Current video player element, used to replace it when changing episode
4364 //New handler
4365 const newFunc = function (onglet, liste, page, pid, ztid, videoId, progid) {
4366 //Switch video
4367 if (videoId !== currentVideoId) {
4368 currentVideoId = videoId;
4369 videoSwitch(videoId);
4370 }
4371 //Run original function
4372 original.apply(a.win, arguments);
4373 };
4374 //Video switcher
4375 const videoSwitch = function (videoID) {
4376 videoElem.text("Loading...");
4377 GM_xmlhttpRequest({
4378 method: "GET",
4379 url: `http://service.canal-plus.com/video/rest/getVideos/cplus/${videoID}?format=json`,
4380 onload(res) {
4381 //Try to find media URL
4382 try {
4383 const response = JSON.parse(res.responseText);
4384 const url = response.MEDIA.VIDEOS.HD;
4385 if (url) {
4386 const tempElem = a.$(a.nativePlayer(url + "?secret=pqzerjlsmdkjfoiuerhsdlfknaes"));
4387 videoElem.after(tempElem).remove();
4388 videoElem = tempElem;
4389 } else {
4390 throw "Media URL Not Found";
4391 }
4392 } catch (err) {
4393 a.out.error("AAK failed to find media URL!");
4394 }
4395 },
4396 onerror() {
4397 a.out.error("AAK failed to load media JSON!");
4398 },
4399 });
4400 };
4401 //Initialization
4402 a.ready(() => {
4403 //Insert our handler in between theirs
4404 original = a.win.changeOngletColonneCentrale;
4405 a.win.changeOngletColonneCentrale = newFunc;
4406 //Get the original player
4407 videoElem = a.$("#onePlayerHolder");
4408 //Set current video ID then patch the player for the first time
4409 if (currentVideoId = videoElem.data("video")) {
4410 videoSwitch(currentVideoId);
4411 }
4412 });
4413}
4414if (a.domCmp(["translatica.pl"])) {
4415 a.readOnly("adblock", false);
4416}
4417if (a.domCmp(["vidlox.tv"])) {
4418 a.readOnly("adb", 0);
4419}
4420if (a.domCmp(["receive-sms-online.info"])) {
4421 a.filter("addEventListener", a.matchMethod.stringExact, `function (b){return"undefined"!=typeof n&&` +
4422 `n.event.triggered!==b.type?n.event.dispatch.apply(a,arguments):void 0}`);
4423}
4424if (a.domCmp(["3dgames.com.ar"])) {
4425 a.generic.FuckAdBlock(a.uid(), "gw");
4426}
4427if (a.domCmp(["mexashare.com", "kisshentai.net"])) {
4428 a.readOnly("BetterJsPop", () => { });
4429}
4430if (a.domCmp(["comicallyincorrect.com"])) {
4431 a.observe("insert", (node) => {
4432 if (node && node.tagName === "DIV" && node.innerHTML && node.innerHTML.includes("Paid Content:")) {
4433 node.remove();
4434 }
4435 });
4436}
4437if (a.domCmp(["cda.pl"])) {
4438 a.readOnly("adblockV1", true);
4439}
4440if (a.domCmp(["linternaute.com"])) {
4441 let val;
4442 a.win.Object.defineProperty(a.win, "OO", {
4443 configurable: false,
4444 set(arg) {
4445 val = arg;
4446 },
4447 get() {
4448 val && (val.AAB = null);
4449 return val;
4450 },
4451 });
4452}
4453if (a.domCmp(["new-skys.net"])) {
4454 a.noAccess("alert");
4455}
4456if (a.domCmp(["gentside.com"])) {
4457 a.readOnly("adblockPopup", {
4458 IS_BLOCKED: false,
4459 init() { },
4460 removeAdblockPopup() { },
4461 });
4462}
4463if (a.domCmp(["idlelivelink.blogspot.com"])) {
4464 a.timewarp("setInterval", a.matchMethod.stringExact, "1000");
4465 a.ready(() => {
4466 a.doc.body.oncontextmenu = null;
4467 a.doc.body.onkeydown = null;
4468 a.doc.body.onmousedown = null;
4469 });
4470}
4471if (a.domCmp(["hackinformer.com"])) {
4472 a.ready(() => {
4473 a.$(".special-message-wrapper:contains(your ad blocker)").remove();
4474 });
4475}
4476if (a.domCmp(["tg007.net"])) {
4477 a.bait("div", "#gads", true);
4478}
4479if (a.domCmp(["bild.de"])) {
4480 a.filter("document.querySelector", a.matchMethod.stringExact, "body");
4481}
4482if (a.domCmp(["codepo8.github.io"]) && a.win.location.pathname.startsWith("/detecting-adblock/")) {
4483 a.css(".notblocked { display:block; } .blocked { display:none; }");
4484}
4485if (a.domCmp(["altadefinizione.media"])) {
4486 //Issue: https://gitlab.com/xuhaiyang1234/uBlockProtectorSecretIssues/issues/1
4487 a.ready(() => {
4488 a.$("a[href='http://altarisoluzione.online/HD/play5.php']").remove();
4489 });
4490}
4491if (a.domCmp(["hdpass.net"])) {
4492 //Issue: https://gitlab.com/xuhaiyang1234/uBlockProtectorSecretIssues/issues/1
4493 let flag = false;
4494 a.win.open = () => {
4495 flag = true;
4496 };
4497 a.on("load", () => {
4498 let token = a.setInterval(() => {
4499 a.win.$(".wrapSpot span#closeSpot").click();
4500 if (flag) {
4501 a.clearInterval(token);
4502 }
4503 }, 500);
4504 });
4505}
4506if (a.domCmp(["nowvideo.ec", "nowvideo.li", "ewingoset.info"])) {
4507 //Issue: https://gitlab.com/xuhaiyang1234/uBlockProtectorSecretIssues/issues/2
4508 //Issue: https://gitlab.com/xuhaiyang1234/uBlockProtectorSecretIssues/issues/5
4509 a.ready(() => {
4510 a.$("#cty").append(`<input type="hidden" name="ab" value="1">`);
4511 });
4512}
4513if (a.domCmp(["karibusana.org"])) {
4514 //Issue: https://github.com/jspenguin2017/uBlockProtector/issues/253
4515 a.noAccess("bizpanda");
4516 a.css(".onp-locker-call { display:block; }");
4517}
4518if (a.domCmp(["lewat.id", "u2s.io"])) {
4519 //Issue: https://gitlab.com/xuhaiyang1234/uBlockProtectorSecretIssues/issues/4
4520 a.timewarp("setInterval", a.matchMethod.stringExact, "1000");
4521 let matcher;
4522 if (a.domCmp(["lewat.id"], true)) {
4523 matcher = /^https?:\/\/lewat\.id\//i;
4524 } else if (a.domCmp(["u2s.io"], true)) {
4525 matcher = /^https?:\/\/u2s\.io\//i;
4526 }
4527 const token = a.setInterval(() => {
4528 const elem = a.$(".skip-ad a");
4529 if (elem.length && elem[0].href && !matcher.test(elem[0].href)) {
4530 a.$(".skip-ad").hide();
4531 a.win.location.href = elem[0].href;
4532 a.clearInterval(token);
4533 }
4534 }, 250);
4535}
4536if (a.domCmp(["shinden.pl"])) {
4537 a.readOnly("shinden_ads", true);
4538}
4539if (a.domCmp(["onhax.me"])) {
4540 const _open = a.win.open;
4541 a.win.open = (...args) => {
4542 if (args[1].startsWith("wpcom")) {
4543 return _open.apply(a.win, args);
4544 }
4545 }
4546}
4547if (a.domCmp(["null-24.com"])) {
4548 a.ready(() => {
4549 a.$("#custom-links .custom-url-wrap a").each(function () {
4550 this.href = this.innerHTML;
4551 });
4552 a.setTimeout(() => {
4553 a.win.jQuery("span:contains(Download Direct Link)").parent().unbind("click");
4554 }, 250);
4555 });
4556}
4557if (a.domCmp(["searchftps.net"])) {
4558 a.$(`<iframe width="336" height="280" style="display:none;"></iframe>`).appendTo("html");
4559}
4560if (a.domCmp(["cyberterminators.co"])) {
4561 a.ready(() => {
4562 a.doc.oncontextmenu = null;
4563 });
4564}
4565if (a.domCmp(["youtube-videos.tv"])) {
4566 a.css(".cactus-video-content div { display:block; } .mts-cl-horizontal.mts-cl-social-locker { display:none; }");
4567 a.noAccess("KillAdBlock");
4568}
4569if (a.domCmp(["dailyuploads.net"])) {
4570 a.css("#downloadBtnClickOrignal { display:block; } #downloadBtnClick { display:none; } #chkIsAdd { display:none; }");
4571}
4572if (a.domCmp(["buickforums.com"])) {
4573 a.bait("div", "#TestAdBlock", true);
4574}
4575if (a.domCmp(["realkana.com"])) {
4576 a.generic.FuckAdBlock("HooAdBlock", "hooAdBlock");
4577}
4578if (a.domCmp(["generatorlinkpremium.com"])) {
4579 $(document).ready(() => {
4580 const normal = $("#normal").attr("href") + "&h=1";
4581 $("#quick").attr("href", normal);
4582 $("#quick").attr("title", "Download this file with a faster download speed");
4583 $("#quick").css("cursor", "pointer");
4584 });
4585}
4586if (a.domCmp(["genbird.com"])) {
4587 a.filter("addEventListener", a.matchMethod.string, "Please disable your ad blocker.");
4588}
4589if (a.domCmp(["pg3dhacks.com"])) {
4590 a.ready(() => {
4591 const buttons = document.querySelectorAll("button");
4592 const matcher = /Unlock.*Download/;
4593 for (let i = 0; i < buttons.length; i++) {
4594 if (buttons[i].innerText === "Download") {
4595 buttons[i].disabled = false;
4596 } else if (matcher.test(buttons[i].innerText)) {
4597 buttons[i].remove();
4598 }
4599 }
4600 });
4601}
4602if (a.domCmp(["lne.es"])) {
4603 a.ready(() => {
4604 a.addScript(() => {
4605 window.onload = null;
4606 });
4607 });
4608}
4609if (a.domCmp(["cutwin.com", "cut-urls.com", "adbull.me", "xess.pro", "clik.pw", "admove.co"])) {
4610 a.bait("div", "#test-block", true);
4611 a.timewarp("setInterval", a.matchMethod.stringExact, "1000");
4612}
4613if (a.domCmp(["adshort.co", "linksh.top", "adshorte.com", "coinb.ink", "gratisjuegos.co"])) {
4614 a.noAccess("F3Z9");
4615}
4616if (a.domCmp(["gamersclub.com.br", "uploadboy.com", "vidoza.net", "videohelp.com"])) {
4617 a.generic.adsjsV2();
4618}
4619if (a.domCmp(["noticiasautomotivas.com.br"])) {
4620 a.css("html, body { overflow:scroll; } cloudflare-app[app-id='no-adblock'] { display:none; }", true);
4621}
4622if (a.domCmp(["tf1.fr"])) {
4623 a.xhrSpoof("@@||louccrossc.com^", "");
4624 a.xhrSpoof("@@||foilpolyth.com^", "");
4625}
4626if (a.domCmp(["sport365.live"])) {
4627 a.inject(() => {
4628 "use strict";
4629 const _eval = window.eval;
4630 window.eval = (...args) => {
4631 try {
4632 window.$.adblock = false;
4633 } catch (err) { }
4634 _eval.apply(window, args);
4635 };
4636 });
4637}
4638if (a.domCmp(["gsmarena.com"])) {
4639 a.filter("eval");
4640}
4641if (a.domCmp(["myfxbook.com"])) {
4642 a.inject(() => {
4643 "use strict";
4644 const err = new window.Error("This property may not be accessed!");
4645 window.Object.defineProperty(window, "isAdBlockerExist", {
4646 configurable: false,
4647 get() {
4648 throw err;
4649 },
4650 set(val) {
4651 if (val) {
4652 throw err;
4653 }
4654 }
4655 });
4656 });
4657}
4658if (a.domCmp(["ptztv.com", "mahobeachcam.com"])) {
4659 a.readOnly("PTZtv", true);
4660}
4661if (a.domCmp(["mywrestling.com.pl"])) {
4662 a.generic.FuckAdBlock("KillAdBlock", "killAdBlock");
4663}
4664if (a.domCmp(["vvvvid.it"])) {
4665 a.ready(() => {
4666 a.inject(() => {
4667 //Based on KAADIVVVV
4668 //License: https://github.com/Robotex/KAADIVVVV/blob/master/LICENSE
4669 "use strict";
4670 if (window.vvvvid) {
4671 const re = /var a=function.*};/;
4672 const data = `var a=function(){vvvvid.advPlayer=null,$(c.playerControlsClass).removeClass("ppad"),d()};`;
4673 //Patch properties
4674 window.vvvvid.cab4 = function (a, b) {
4675 this.isAdBlockActive = false;
4676 b && b(false);
4677 };
4678 const func = window.String(window.vvvvid.models.PlayerObj.prototype.startAdv);
4679 if (!re.test(func)) {
4680 window.console.error("AAK failed to set up VVVVID detector defuser!");
4681 }
4682 //That variable name feels like a trap
4683 //https://github.com/Robotex/KAADIVVVV/issues/16
4684 window.eval("window[mnsJHnyT] = window.vvvvid.models.PlayerObj.prototype.startAdv = " + func.replace(re, data));
4685 }
4686 });
4687 });
4688}
4689if (a.domCmp(["nekopoi.bid"])) {
4690 //NSFW!
4691 a.readOnly("adblock", false);
4692 a.readOnly("isAdsDisplayed", true);
4693}
4694if (a.domCmp(["wunderground.com"])) {
4695 a.readOnly("noAdBlocker", "no");
4696}
4697if (a.domCmp(["short.am"])) {
4698 if (location.pathname !== "/") {
4699 a.readOnly("RunAds", undefined);
4700 a.ready(() => {
4701 let check = a.$("#disable > div.alert-danger");
4702 if (check.length) {
4703 check.text("Please wait...");
4704 a.on("load", () => {
4705 //Based on AdsBypasser
4706 //License: https://github.com/adsbypasser/adsbypasser/blob/master/LICENSE
4707 let f = document.createElement("form");
4708 f.style.display = "none";
4709 f.method = "post";
4710 let i = document.createElement("input");
4711 i.name = "_image";
4712 i.value = "Continue";
4713 f.appendChild(i);
4714 document.body.append(f);
4715 f.submit();
4716 });
4717 }
4718 });
4719 }
4720}
4721if (a.domCmp(["jbzdy.pl"])) {
4722 a.inject(() => {
4723 "use strict";
4724 let val;
4725 window.Object.defineProperty(window, "App", {
4726 configurable: false,
4727 set(arg) {
4728 val = arg;
4729 try {
4730 val.adb.init = () => { };
4731 } catch (err) { }
4732 },
4733 get() {
4734 return val;
4735 },
4736 });
4737 });
4738}
4739if (a.domCmp(["egobits.com"])) {
4740 a.noAccess("detector_launch");
4741}
4742if (a.domCmp(["cbs.com"])) {
4743 if (!a.cookie("first_page_today") && !sessionStorage.getItem("_first_page_today_fallback")) {
4744 sessionStorage.setItem("_first_page_today_fallback", true);
4745 a.ready(() => {
4746 location.reload();
4747 });
4748 }
4749}
4750if (a.domCmp(["cdn-surfline.com"])) {
4751 a.filter("setTimeout", a.matchMethod.string, "ad blocker");
4752 a.ready(() => {
4753 a.inject(() => {
4754 "use strict";
4755 window.doFallBackonAdError = () => { };
4756 });
4757 });
4758}
4759if (a.domCmp(["zimuku.net"])) {
4760 a.readOnly("isAdEnabled", true);
4761}
4762if (a.domCmp(["timesofindia.indiatimes.com"])) {
4763 a.ready(() => {
4764 setTimeout(() => {
4765 if (location.href.includes("interstitial")) {
4766 a.cookie("nsIstial_Cook", "1");
4767 a.cookie("ns", "1");
4768 location.href = "https://timesofindia.indiatimes.com/";
4769 }
4770 }, 300);
4771 });
4772}
4773if (a.domCmp(["anonymousemail.me"])) {
4774 a.beforeScript((script) => {
4775 if (script.textContent && script.textContent.includes("anonymousemail.me/adblock.php")) {
4776 script.remove();
4777 }
4778 });
4779}
4780if (a.domCmp(["solowrestling.com"])) {
4781 a.readOnly("bloq", 1);
4782}
4783if (a.domCmp(["arenavision.us"])) {
4784 a.noAccess("H7WWWW");
4785}
4786if (a.domCmp(["wowtoken.info"])) {
4787 const re = /fail\(\);/g;
4788 a.beforeScript((script) => {
4789 if (script.src && script.src.includes("/js/main.js")) {
4790 $.request({
4791 method: "GET",
4792 url: script.src,
4793 }, (data) => {
4794 a.inject(data.replace(re, "true;"), true);
4795 }, () => {
4796 console.error("AAK failed to patch main script!");
4797 });
4798 script.remove();
4799 }
4800 });
4801}
4802if (a.domCmp(["wifihack.me"])) {
4803 a.noAccess("AdBlocked");
4804}
4805if (a.domCmp(["gntai.xyz"])) {
4806 a.readOnly("showAds", true);
4807}
4808if (a.domCmp(["viasatsport.se", "viasport.fi", "tv3sport.dk", "viasport.no"])) {
4809 a.inject(() => {
4810 "use strict";
4811 const observer = new window.MutationObserver(() => {
4812 const videos = window.document.querySelectorAll("video.blurred");
4813 for (let i = 0; i < videos.length; i++) {
4814 videos[i].classList.remove("blurred");
4815 }
4816 const buttons = window.document.querySelectorAll(".vjs-overlay-message-close-button");
4817 for (let i = 0; i < buttons.length; i++) {
4818 buttons[i].click();
4819 }
4820 if (window.videoPlayers instanceof window.Object) {
4821 for (let key in window.videoPlayers) {
4822 try {
4823 window.videoPlayers[key]._player.trigger("hideOverlayBlur");
4824 } catch (err) { }
4825 }
4826 }
4827 });
4828 observer.observe(window.document, {
4829 childList: true,
4830 subtree: true,
4831 });
4832 });
4833}
4834if (a.domCmp(["graphiq-stories.graphiq.com"])) {
4835 a.loopback((ignored, url) => {
4836 if (url.startsWith("/ad?")) {
4837 return "window.FTBAds.blocking = false;";
4838 }
4839 });
4840}
4841if (a.domCmp(["graphiq-stories.graphiq.com"])) {
4842 a.loopback((ignored, url) => {
4843 if (url.startsWith("/ad?")) {
4844 return "window.FTBAds.blocking = false;";
4845 }
4846 });
4847}
4848if (a.domCmp(["nontonanime.org"])) {
4849 a.readOnly("ADBLOCK", true);
4850}
4851if (a.domCmp(["tuba.pl"])) {
4852 a.readOnly("adsOk", true);
4853}
4854if (a.domCmp(["wetter3.de"])) {
4855 a.readOnly("karte1", 18);
4856}
4857if (a.domCmp(["webnovel.com"])) {
4858 //Issue: https://github.com/jspenguin2017/uBlockProtector/issues/457
4859 const bookExtractor = /\/book\/([^/]+)/;
4860 let isInBackground = false;
4861 const scanner = () => {
4862 if (isInBackground) {
4863 return;
4864 }
4865 $(".cha-content._lock").each((lock) => {
4866 //Remove flag
4867 lock.classList.remove("_lock");
4868 //Remove video
4869 const video = lock.closest(".chapter_content").querySelector(".lock-video");
4870 if (video) {
4871 video.remove();
4872 }
4873 //Let user know what is happening
4874 const contentElem = lock.querySelector(".cha-words");
4875 contentElem.insertAdjacentHTML("beforeend", "<p style='opacity:0.5;'>" +
4876 "AAK is fetching the rest of this chapter, this can take up to 30 seconds.</p>");
4877 //Get IDs
4878 const bookID = bookExtractor.exec(location.href)[1];
4879 const chapterID = lock.querySelector("[data-cid]").dataset.cid;
4880 //Check if I got IDs
4881 if (!bookID || !chapterID) {
4882 return;
4883 }
4884 //Get cookie
4885 const cookie = encodeURIComponent(a.cookie("_csrfToken"));
4886 //Get token
4887 $.ajax({
4888 method: "GET",
4889 url: `https://www.webnovel.com/apiajax/chapter/GetChapterContentToken?_csrfToken=` +
4890 `${cookie}&bookId=${bookID}&chapterId=${chapterID}`,
4891 }).done((data) => {
4892 try {
4893 let token = JSON.parse(data).data.token;
4894 token = encodeURIComponent(token);
4895 fetchChapter(cookie, token, contentElem);
4896 } catch (err) {
4897 console.error("AAK failed to find chapter token!");
4898 }
4899 }).fail(() => {
4900 console.error("AAK failed to find chapter token!");
4901 });
4902 });
4903 };
4904 const fetchChapter = (cookie, token, contentElem) => {
4905 const tick = () => {
4906 $.ajax({
4907 method: "GET",
4908 url: `https://www.webnovel.com/apiajax/chapter/GetChapterContentByToken?_csrfToken=` +
4909 `${cookie}&token=${token}`,
4910 }).done((data) => {
4911 try {
4912 const content = JSON.parse(data).data.content.trim();
4913 if (content) {
4914 drawChapter(content, contentElem);
4915 } else {
4916 setTimeout(tick, 2000);
4917 }
4918 } catch (err) {
4919 setTimeout(tick, 2000);
4920 }
4921 }).fail(() => {
4922 setTimeout(tick, 2000);
4923 });
4924 };
4925 tick();
4926 };
4927 const drawChapter = (content, contentElem) => {
4928 const lines = content.split("\n");
4929 contentElem.innerHTML = "";
4930 for (let i = 0; i < lines.length; i++) {
4931 const line = lines[i].trim();
4932 if (!line) {
4933 continue;
4934 }
4935 const p = document.createElement("p");
4936 p.textContent = line;
4937 contentElem.append(p);
4938 }
4939 };
4940 setInterval(scanner, 1000);
4941 a.on("focus", () => { isInBackground = false; });
4942 a.on("blur", () => { isInBackground = true; });
4943}
4944if (a.domCmp(["falter.at"])) {
4945 a.noAccess("showFalterGif");
4946}
4947if (a.domCmp(["ur.ly", "urly.mobi"])) {
4948 const re = /\?ref=.*/;
4949 a.onInsert((node) => {
4950 if (node.id === "skip_button1") {
4951 stop();
4952 location.href = node.href.replace(re, "?href=https://google.com/");
4953 }
4954 });
4955}
4956if (a.domCmp(["shutterdowner.com"])) {
4957 a.bait("div", "#zagshutter");
4958}
4959if (a.domCmp(["gpro.net"])) {
4960 a.ready(() => {
4961 $("#blockblockA").parent().parent().remove();
4962 });
4963}
4964if (a.domCmp(["vsports.pt"])) {
4965 a.readOnly("adblockDetecter", true);
4966}
4967if (a.domCmp(["sledujufilmy.cz"])) {
4968 a.readOnly("ads_ok", true);
4969}
4970if (a.domCmp(["bildungsspender.de"])) {
4971 a.readOnly("werbeblocker", true);
4972}
4973if (a.domCmp(["pseudo-flaw.net"])) {
4974 a.readOnly("stopBlock", () => { });
4975}
4976if (a.domCmp(["clasicotas.org"])) {
4977 a.filter("addEventListener", a.matchMethod.stringExact, "mouseup", "window.document");
4978}
4979if (a.domCmp(["mwpaste.com"])) {
4980 a.css("#downbloq { display:none; } .hidebloq { display:block; }");
4981 a.ready(() => {
4982 a.inject(() => {
4983 "use strict";
4984 const blocks = window.document.querySelectorAll(".hidebloq");
4985 for (let i = 0; i < blocks.length; i++) {
4986 blocks[i].innerHTML = window.atob(blocks[i].textContent);
4987 }
4988 });
4989 });
4990}
4991if (a.domCmp(["portel.pl"])) {
4992 a.readOnly("blokowanko", false);
4993}
4994if (a.domCmp(["mangacanblog.com"])) {
4995 a.readOnly("adblock", 1);
4996}
4997if (a.domCmp(["aargauerzeitung.ch", "badenertagblatt.ch", "basellandschaftlichezeitung.ch", "bzbasel.ch",
4998 "limmattalerzeitung.ch", "solothurnerzeitung.ch", "grenchnertagblatt.ch", "oltnertagblatt.ch"])) {
4999 a.filter("setTimeout", a.matchMethod.string, "[native code]");
5000}
5001if (a.domCmp(["qoshe.com"])) {
5002 a.readOnly("adBlockAlertShown", true);
5003 a.filter("setTimeout", a.matchMethod.string, "adBlockFunction()");
5004}
5005if (a.domCmp(["spiegel.de"])) {
5006 a.generic.FuckAdBlock("ABB", "abb");
5007}
5008if (a.domCmp(["tvnow.de"])) {
5009 a.replace(() => {
5010 if (url.includes("/v3/movies/")) {
5011 this.addEventListener("readystatechange", () => {
5012 if (this.readyState === 4) {
5013 try {
5014 let payload = window.JSON.parse(this.responseText);
5015 payload.ignoreAd = true;
5016 payload.noad = true;
5017 payload.geoblocked = false;
5018 payload.free = true;
5019 payload.blockadeText = "0";
5020 payload.format.enableAd = false;
5021 payload.format.hasFreeEpisodes = true;
5022 payload.format.isGeoBlocked = false;
5023 replace(this, window.JSON.stringify(payload));
5024 } catch (err) { }
5025 }
5026 });
5027 }
5028 });
5029}
5030if (a.domCmp(["acortar.net", "acortalo.net", "vellenger.com", "infobae.net"])) {
5031 a.on("load", () => {
5032 a.inject(() => {
5033 "use strict";
5034 let btn = window.document.querySelector(".linkhidder");
5035 if (btn) {
5036 const fallback = btn.onclick || (() => { });
5037 btn.onclick = () => {
5038 try {
5039 window.location.href = window.href[window.href.length - 1];
5040 } catch (err) {
5041 fallback();
5042 }
5043 };
5044 }
5045 });
5046 });
5047}
5048if (a.domCmp(["peliculasmega.info"])) {
5049 a.css(".linkhidder { display:none; } a[class*='hidden_'] { display:block; }");
5050}
5051if (a.domCmp(["identi.li"])) {
5052 a.css(".linkhidder { display:none; } div[id^='hidden_'] { display:block; }");
5053 a.cookie("BetterJsPop0", "1");
5054 a.ready(() => {
5055 a.inject(() => {
5056 "use strict";
5057 //Type 1
5058 const blocks = window.document.querySelectorAll(".info_bbc");
5059 for (let i = 0; i < blocks.length; i++) {
5060 if (!blocks[i].firstChild.tagName) {
5061 const links = window.GibberishAES.dec(blocks[i].textContent, window.hash);
5062 blocks[i].innerHTML = window.linkify(links);
5063 blocks[i].style.display = "block";
5064 blocks[i].parentNode.previousSibling.remove();
5065 }
5066 }
5067 //Type 2
5068 if (window.$) {
5069 window.$("div #decrypt.myjdownloader").unbind("click").click(function () {
5070 window._decrypt.fnID = "jdownloader";
5071 window._decrypt.fnURL = this.getAttribute("href");
5072 window._decrypt.objeto = null;
5073 window._decrypt.open();
5074 });
5075 }
5076 });
5077 });
5078}
5079if (a.domCmp(["kiss.com.tw"])) {
5080 a.bait("div", "#ads");
5081}
5082if (a.domCmp(["nbcsports.com", "knowyourmeme.com"])) {
5083 a.readOnly("adblockDetect", () => { });
5084}
5085if (a.domCmp(["moviemakeronline.com"])) {
5086 a.readOnly("abNoticeShowed", true);
5087}
5088if (a.domInc(["10co"])) {
5089 a.bait("div", "#myTestAd", true);
5090 a.timewarp("setInterval", a.matchMethod.stringExact, "1000");
5091}
5092if (a.domCmp(["uptostream.com"])) {
5093 a.readOnly("check", () => {
5094 "use strict";
5095 window.$("#apbplus").css("display", "none");
5096 window.$("#vid").css("display", "block");
5097 window.$("#cred").css("display", "block");
5098 });
5099}
5100if (a.domCmp(["adageindia.in", "bombaytimes.com", "businessinsider.in", "gizmodo.in", "iamgujarat.com", "idiva.com",
5101 "in.techradar.com", "indiatimes.com", "lifehacker.co.in", "mensxp.com", "samayam.com", "gadgetsnow.com"])) {
5102 //Part 1
5103 a.inject(() => {
5104 "use strict";
5105 const magic = "a" + window.Math.random().toString(36).substring(2);
5106 const reScript = /typeof otab == 'function'/;
5107 const reComment = /\d{5,} \d{1,2}/;
5108 const getter = () => {
5109 let script;
5110 {
5111 let temp = [...window.document.querySelectorAll(`script:not([src]):not([${magic}])`)];
5112 if (window.document.currentScript && !window.document.currentScript.hasAttribute(magic)) {
5113 temp.unshift(window.document.currentScript);
5114 }
5115 if (!temp.length) {
5116 return true;
5117 }
5118 for (let i = 0; i < temp.length; i++) {
5119 temp[i].setAttribute(magic, 1);
5120 if (reScript.test(temp[i].textContent)) {
5121 script = temp[i];
5122 break;
5123 }
5124 }
5125 }
5126 if (!script) {
5127 return true;
5128 }
5129 {
5130 const previous = script.previousSibling;
5131 let temp = previous;
5132 while (temp = temp.previousSibling) {
5133 if (temp.nodeType === window.Node.COMMENT_NODE && reComment.test(temp.data)) {
5134 previous.style.setProperty("display", "none", "important");
5135 return false;
5136 }
5137 }
5138 }
5139 };
5140 window.Object.defineProperty(window, "trev", {
5141 configurable: false,
5142 set() { },
5143 get() {
5144 let r;
5145 let i = 0;
5146 do {
5147 try {
5148 r = getter();
5149 } catch (err) {
5150 //window.console.error(err);
5151 }
5152 } while (!r && (++i) < 100);
5153 return null;
5154 },
5155 });
5156 window.addEventListener("load", () => {
5157 void window.trev;
5158 });
5159 });
5160 //Part 2
5161 let isInBackground = false;
5162 const reStart = /^\/[a-z_]+\.cms/;
5163 const reEnd = /^ \d{5,} \d{1,2} $/;
5164 const adsHidder = (node) => {
5165 if (!document.body || isInBackground) {
5166 return;
5167 }
5168 let iterator = document.createTreeWalker(document.body, NodeFilter.SHOW_COMMENT);
5169 let comment;
5170 while (comment = iterator.nextNode()) {
5171 if (reStart.test(comment.data)) {
5172 let toHide = [];
5173 let previous = comment;
5174 while (previous = previous.previousSibling) {
5175 if (previous.nodeType === Node.COMMENT_NODE && reEnd.test(previous.data)) {
5176 if (toHide.length < 15) {
5177 for (let i = 0; i < toHide.length; i++) {
5178 try {
5179 toHide[i].style.setProperty("display", "none", "important");
5180 } catch (err) { }
5181 }
5182 }
5183 break;
5184 }
5185 toHide.push(previous);
5186 }
5187 }
5188 }
5189 };
5190 a.setInterval(adsHidder, 1000);
5191 a.on("focus", () => { isInBackground = false; });
5192 a.on("blur", () => { isInBackground = true; });
5193}
5194if (a.domCmp(["aternos.org"])) {
5195 a.filter("setTimeout", a.matchMethod.string, ".ad-detect");
5196}
5197if (a.domCmp(["webcafe.bg"])) {
5198 a.readOnly("bDetect", false);
5199}
5200if (a.domCmp(["telecinco.es", "cuatro.com", "divinity.es", "factoriadeficcion.com", "energytv.es", "bemad.es",
5201 "eltiempohoy.es", "mtmad.es"])) {
5202 //Issue: https://github.com/jspenguin2017/uBlockProtector/issues/448
5203 a.inject(() => {
5204 "use strict";
5205 const err = new TypeError("Failed to execute 'getElementById' on 'Document': 'adsFooter' is not a valid ID.");
5206 const original = window.document.getElementById;
5207 window.document.getElementById = (id, ...rest) => {
5208 if (id === "adsFooter") {
5209 throw err;
5210 } else {
5211 return original.call(window.document, id, ...rest);
5212 }
5213 }
5214 })
5215}
5216if (a.domCmp(["mitele.es"])) {
5217 //Issue: https://github.com/jspenguin2017/uBlockProtector/issues/448
5218 a.inject(() => {
5219 "use strict";
5220 window.google = {};
5221 });
5222}
5223if (a.domCmp(["docer.pl"])) {
5224 a.readOnly("ads_unblocked", true);
5225 a.ready(() => {
5226 $("#square-1").css("width", "1px");
5227 });
5228}
5229if (a.domCmp(["samehadaku.net"])) {
5230 a.readOnly("tieE3", true);
5231}
5232if (a.domCmp(["booogle.net", "nsspot.net"])) {
5233 a.readOnly("gadb", false);
5234}
5235if (a.domCmp(["kbb.com"])) {
5236 a.inject(() => {
5237 "use strict";
5238 const v = window.Object.freeze({
5239 init() { },
5240 start() { },
5241 });
5242 window.KBB = {};
5243 window.Object.defineProperty(window.KBB, "Abb", {
5244 configurable: false,
5245 set() { },
5246 get() {
5247 return v;
5248 },
5249 });
5250 });
5251}
5252if (a.domCmp(["gp.se", "bohuslaningen.se", "hallandsposten.se", "hn.se", "stromstadstidning.se", "ttela.se"])) {
5253 a.inject(() => {
5254 "use strict";
5255 window.scrollTo = () => { };
5256 window.burtApi = {
5257 stopTracking() { },
5258 connect() { },
5259 annotate() { },
5260 startTracking() { },
5261 trackById() {
5262 return {
5263 connect() { },
5264 };
5265 },
5266 };
5267 window._adform = {
5268 readTags() { },
5269 };
5270 });
5271}
5272if (a.domCmp(["playok.com", "kurnik.pl"])) {
5273 a.filter("getElementById", a.matchMethod.stringExact, "abp", "window.document");
5274}
5275if (a.domCmp(["explosm.net"])) {
5276 a.readOnly("showads", true);
5277}
5278if (a.domCmp(["videacesky.cz"])) {
5279 a.filter("setTimeout", a.matchMethod.string, "/dialog/adblock/");
5280}
5281if (a.domCmp(["playrust.io"])) {
5282 a.onInsert((node) => {
5283 if (node.textContent && node.textContent.includes("Advertising enables us")) {
5284 node.remove();
5285 }
5286 });
5287}
5288if (a.domCmp(["linkshrink.net"])) {
5289 //Skip glitchy timer caused by blocking popup
5290 //Based on AdsBypasser
5291 //License: https://github.com/adsbypasser/adsbypasser/blob/master/LICENSE
5292 const matcher = /revC\("([^"]+)"\)/;
5293 a.ready(() => {
5294 let match;
5295 const scripts = document.querySelectorAll("script");
5296 //Start from end as the script tend to be at the end
5297 for (let i = scripts.length - 1; i >= 0; i--) {
5298 if (match = matcher.exec(scripts[i].textContent)) {
5299 location.pathname = "/" + atob(match[1]);
5300 break;
5301 }
5302 }
5303 });
5304}
5305if (a.domCmp(["gamekit.com"])) {
5306 a.filter("setInterval", a.matchMethod.string, "a-d-block-popup");
5307}
5308if (a.domCmp(["dilidili.wang"])) {
5309 a.filter("addEventListener", a.matchMethod.stringExact, "DOMNodeInserted", "window.document");
5310 a.antiCollapse("innerHTML", (elem) => elem === window.document.body);
5311}
5312if (a.domCmp(["gamejolt.net"])) {
5313 a.onInsert((node) => {
5314 if (node && node.innerHTML && node.innerHTML.includes("View ad.")) {
5315 node.querySelector("h3").remove();
5316 node.querySelector("p").remove();
5317 }
5318 });
5319}
5320if (a.domCmp(["haber1903.com"])) {
5321 a.filter("setTimeout", a.matchMethod.string, "adblock");
5322 a.noAccess("EnableRightClick");
5323}
5324
5325if (a.domCmp(["rule34hentai.net"])) {
5326 a.inject(() => {
5327 "use strict";
5328 window.base_href = "";
5329 });
5330}
5331if (a.domCmp(["paksociety.com"])) {
5332 a.css("html, body { overflow:scroll; }");
5333}
5334if (a.domCmp(["tlz.de"])) {
5335 a.filter("addEventListener", a.matchMethod.string, `document.getElementById("ad-container")`,
5336 "window.document");
5337}
5338if (a.domCmp(["cellmapper.net"])) {
5339 a.filter("alert", a.matchMethod.string, "Please disable ad-block");
5340}
5341if (a.domCmp(["1tv.ru"])) {
5342 a.inject(() => {
5343 "use strict";
5344 //Stage 1
5345 const fakeAntiblock = {
5346 opts: {
5347 url: "",
5348 detectOnStart: false,
5349 indicatorName: "",
5350 resources: [],
5351 },
5352 readyState: "ready",
5353 detected: false,
5354 ready(f) {
5355 window.setTimeout(f, 10, false);
5356 return this;
5357 },
5358 detect(f) {
5359 window.setTimeout(f.cb, 10, false, this);
5360 return this;
5361 }
5362 };
5363 window.EUMP = {};
5364 window.Object.defineProperty(window.EUMP, "antiblock", {
5365 configurable: false,
5366 set() { },
5367 get() {
5368 return fakeAntiblock;
5369 }
5370 });
5371 //Stage 2
5372 const original = window.XMLHttpRequest;
5373 window.XMLHttpRequest = function (...args) {
5374 const wrapped = new (window.Function.prototype.bind.apply(original, args));
5375 const _open = wrapped.open;
5376 wrapped.open = function (...args) {
5377 if (args.length > 1 && args[1].startsWith("//v.adfox.ru/")) {
5378 this.withCredentials = false;
5379 }
5380 return _open.apply(wrapped, args);
5381 };
5382 return wrapped;
5383 };
5384 });
5385}
5386if (a.domCmp(["viz.com"])) {
5387 a.readOnly("show_dfp_preroll", false);
5388}
5389if (a.domCmp(["vod.pl"])) {
5390 a.onInsert((node) => {
5391 if (node.tagName !== "SCRIPT" && node.innerText && node.innerText.includes("Prosimy, odblokuj wy\u015Bwietlanie reklam")) {
5392 node.remove();
5393 }
5394 });
5395}
5396if (a.domCmp(["onet.pl", "komputerswiat.pl"])) {
5397 a.beforeScript((script) => {
5398 if (script.id === "adsinit") {
5399 script.remove();
5400 }
5401 });
5402}
5403if (a.domCmp(["oddreaders.com"])) {
5404 a.css(".onp-sl-blur-area { filter:none; }");
5405 a.onInsert((node) => {
5406 if (node.querySelector && node.querySelector("img[src='http://oddreaders.com/wp-content/uploads/2017/07/" +
5407 "A-Publisher-Approach-to-Adblock-Users.png'")) {
5408 node.remove();
5409 }
5410 });
5411}
5412if (a.domCmp(["giallozafferano.it"])) {
5413 a.filter("setTimeout", a.matchMethod.string, "adblock alert");
5414}
5415if (a.domCmp(["gry.wp.pl", "maketecheasier.com"])) {
5416 a.filter("atob");
5417}
5418if (a.domCmp(["di.fm", "jazzradio.com"])) {
5419 a.loopback((ignored, url) => {
5420 if (url.startsWith("https://pubads.g.doubleclick.net/")) {
5421 return `<?xml version="1.0" encoding="UTF-8"?>
5422<VAST xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="vast.xsd" version="3.0">
5423</VAST>`;
5424 }
5425 });
5426}
5427if (a.domCmp(["itv.com"])) {
5428 a.loopback((ignored, url) => {
5429 if (url.startsWith("https://tom.itv.com/itv/tserver/size=")) {
5430 return `<?xml version="1.0" encoding="utf-8"?>
5431<VAST version="2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="vast.xsd">
5432</VAST>`;
5433 }
5434 });
5435}
5436if (a.domCmp(["digitalpoint.com"])) {
5437 a.ready(() => {
5438 a.inject(() => {
5439 "use strict";
5440 window.DigitalPoint._General.blockMessage = () => { };
5441 });
5442 });
5443}
5444if (a.domCmp(["ohmymag.com", "ohmymag.com.br", "ohmymag.de", "gentside.com", "gentside.com.br",
5445 "maxisciences.com"])) {
5446 a.readOnly("adblockPopup", `{
5447 IS_BLOCKED: false,
5448 init() { },
5449 removeAdblockPopup() { },
5450 }`);
5451}
5452if (a.domCmp(["yiv.com"])) {
5453 a.cookie("AdBlockMessage", "yes");
5454}