1! function(e) { 2 if (!e.hasInitialised) { 3 var t = { 4 escapeRegExp: function(e) { 5 return e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&") 6 }, 7 hasClass: function(e, t) { 8 var i = " "; 9 return 1 === e.nodeType && (i + e.className + i).replace(/[\n\t]/g, i).indexOf(i + t + i) >= 0 10 }, 11 addClass: function(e, t) { 12 e.className += " " + t 13 }, 14 removeClass: function(e, t) { 15 var i = new RegExp("\\b" + this.escapeRegExp(t) + "\\b"); 16 e.className = e.className.replace(i, "") 17 }, 18 interpolateString: function(e, t) { 19 var i = /{{([a-z][a-z0-9\-_]*)}}/gi; 20 return e.replace(i, function(e) { 21 return t(arguments[1]) || "" 22 }) 23 }, 24 getCookie: function(e) { 25 var t = "; " + document.cookie, 26 i = t.split("; " + e + "="); 27 return 2 != i.length ? void 0 : i.pop().split(";").shift() 28 }, 29 setCookie: function(e, t, i, n, o) { 30 var s = new Date; 31 s.setDate(s.getDate() + (i || 365)); 32 var r = [e + "=" + t, "expires=" + s.toUTCString(), "path=" + (o || "/")]; 33 n && r.push("domain=" + n), document.cookie = r.join(";") 34 }, 35 deepExtend: function(e, t) { 36 for (var i in t) t.hasOwnProperty(i) && (i in e && this.isPlainObject(e[i]) && this.isPlainObject(t[i]) ? this.deepExtend(e[i], t[i]) : e[i] = t[i]); 37 return e 38 }, 39 throttle: function(e, t) { 40 var i = !1; 41 return function() { 42 i || (e.apply(this, arguments), i = !0, setTimeout(function() { 43 i = !1 44 }, t)) 45 } 46 }, 47 hash: function(e) { 48 var t, i, n, o = 0; 49 if (0 === e.length) return o; 50 for (t = 0, n = e.length; t < n; ++t) i = e.charCodeAt(t), o = (o << 5) - o + i, o |= 0; 51 return o 52 }, 53 normaliseHex: function(e) { 54 return "#" == e[0] && (e = e.substr(1)), 3 == e.length && (e = e[0] + e[0] + e[1] + e[1] + e[2] + e[2]), e 55 }, 56 getContrast: function(e) { 57 e = this.normaliseHex(e); 58 var t = parseInt(e.substr(0, 2), 16), 59 i = parseInt(e.substr(2, 2), 16), 60 n = parseInt(e.substr(4, 2), 16), 61 o = (299 * t + 587 * i + 114 * n) / 1e3; 62 return o >= 128 ? "#000" : "#fff" 63 }, 64 getLuminance: function(e) { 65 var t = parseInt(this.normaliseHex(e), 16), 66 i = 38, 67 n = (t >> 16) + i, 68 o = (t >> 8 & 255) + i, 69 s = (255 & t) + i, 70 r = (16777216 + 65536 * (n < 255 ? n < 1 ? 0 : n : 255) + 256 * (o < 255 ? o < 1 ? 0 : o : 255) + (s < 255 ? s < 1 ? 0 : s : 255)).toString(16).slice(1); 71 return "#" + r 72 }, 73 isMobile: function() { 74 return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent) 75 }, 76 isPlainObject: function(e) { 77 return "object" == typeof e && null !== e && e.constructor == Object 78 } 79 }; 80 e.status = { 81 deny: "deny", 82 allow: "allow", 83 dismiss: "dismiss" 84 }, e.transitionEnd = function() { 85 var e = document.createElement("div"), 86 t = { 87 t: "transitionend", 88 OT: "oTransitionEnd", 89 msT: "MSTransitionEnd", 90 MozT: "transitionend", 91 WebkitT: "webkitTransitionEnd" 92 }; 93 for (var i in t) 94 if (t.hasOwnProperty(i) && "undefined" != typeof e.style[i + "ransition"]) return t[i]; 95 return "" 96 }(), e.hasTransition = !!e.transitionEnd; 97 var i = Object.keys(e.status).map(t.escapeRegExp); 98 e.customStyles = {}, e.Popup = function() { 99 function n() { 100 this.initialise.apply(this, arguments) 101 } 102 103 function o(e) { 104 this.openingTimeout = null, t.removeClass(e, "cc-invisible") 105 } 106 107 function s(t) { 108 t.style.display = "none", t.removeEventListener(e.transitionEnd, this.afterTransition), this.afterTransition = null 109 } 110 111 function r() { 112 var t = this.options.onInitialise.bind(this); 113 if (!window.navigator.cookieEnabled) return t(e.status.deny), !0; 114 if (window.CookiesOK || window.navigator.CookiesOK) return t(e.status.allow), !0; 115 var i = Object.keys(e.status),
116 n = this.getStatus(), 117 o = i.indexOf(n) >= 0; 118 return o && t(n), o 119 } 120 121 function a() { 122 var e = this.options.position.split("-"), 123 t = []; 124 return e.forEach(function(e) { 125 t.push("cc-" + e) 126 }), t 127 } 128 129 function c() { 130 var e = this.options, 131 i = "top" == e.position || "bottom" == e.position ? "banner" : "floating"; 132 t.isMobile() && (i = "floating"); 133 var n = ["cc-" + i, "cc-type-" + e.type, "cc-theme-" + e.theme]; 134 e["static"] && n.push("cc-static"), n.push.apply(n, a.call(this)); 135 p.call(this, this.options.palette); 136 return this.customStyleSelector && n.push(this.customStyleSelector), n 137 } 138 139 function l() { 140 var e = {}, 141 i = this.options; 142 i.showLink || (i.elements.link = "", i.elements.messagelink = i.elements.message), Object.keys(i.elements).forEach(function(n) { 143 e[n] = t.interpolateString(i.elements[n], function(e) { 144 var t = i.content[e]; 145 return e && "string" == typeof t && t.length ? t : "" 146 }) 147 }); 148 var n = i.compliance[i.type]; 149 n || (n = i.compliance.info), e.compliance = t.interpolateString(n, function(t) { 150 return e[t] 151 }); 152 var o = i.layouts[i.layout]; 153 return o || (o = i.layouts.basic), t.interpolateString(o, function(t) { 154 return e[t] 155 }) 156 } 157 158 function u(i) { 159 var n = this.options, 160 o = document.createElement("div"), 161 s = n.container && 1 === n.container.nodeType ? n.container : document.body; 162 o.innerHTML = i; 163 var r = o.children[0]; 164 return r.style.display = "none", t.hasClass(r, "cc-window") && e.hasTransition && t.addClass(r, "cc-invisible"), this.onButtonClick = h.bind(this), r.addEventListener("click", this.onButtonClick), n.autoAttach && (s.firstChild ? s.insertBefore(r, s.firstChild) : s.appendChild(r)), r 165 } 166 167 function h(n) { 168 var o = n.target; 169 if (t.hasClass(o, "cc-btn")) { 170 var s = o.className.match(new RegExp("\\bcc-(" + i.join("|") + ")\\b")), 171 r = s && s[1] || !1; 172 r && (this.setStatus(r), this.close(!0)) 173 } 174 t.hasClass(o, "cc-close") && (this.setStatus(e.status.dismiss), this.close(!0)), t.hasClass(o, "cc-revoke") && this.revokeChoice() 175 } 176 177 function p(e) { 178 var i = t.hash(JSON.stringify(e)), 179 n = "cc-color-override-" + i, 180 o = t.isPlainObject(e); 181 return this.customStyleSelector = o ? n : null, o && d(i, e, "." + n), o 182 } 183 184 function d(i, n, o) { 185 if (e.customStyles[i]) return void++e.customStyles[i].references; 186 var s = {}, 187 r = n.popup, 188 a = n.button, 189 c = n.highlight; 190 r && (r.text = r.text ? r.text : t.getContrast(r.background), r.link = r.link ? r.link : r.text, s[o + ".cc-window"] = ["color: " + r.text, "background-color: " + r.background], s[o + ".cc-revoke"] = ["color: " + r.text, "background-color: " + r.background], s[o + " .cc-link," + o + " .cc-link:active," + o + " .cc-link:visited"] = ["color: " + r.link], a && (a.text = a.text ? a.text : t.getContrast(a.background), a.border = a.border ? a.border : "transparent", s[o + " .cc-btn"] = ["color: " + a.text, "border-color: " + a.border, "background-color: " + a.background], "transparent" != a.background && (s[o + " .cc-btn:hover, " + o + " .cc-btn:focus"] = ["background-color: " + v(a.background)]), c ? (c.text = c.text ? c.text : t.getContrast(c.background), c.border = c.border ? c.border : "transparent", s[o + " .cc-highlight .cc-btn:first-child"] = ["color: " + c.text, "border-color: " + c.border, "background-color: " + c.background]) : s[o + " .cc-highlight .cc-btn:first-child"] = ["color: " + r.text])); 191 var l = document.createElement("style"); 192 document.head.appendChild(l), e.customStyles[i] = { 193 references: 1, 194 element: l.sheet 195 }; 196 var u = -1; 197 for (var h in s) s.hasOwnProperty(h) && l.sheet.insertRule(h + "{" + s[h].join(";") + "}", ++u) 198 } 199 200 function v(e) { 201 return e = t.normaliseHex(e), "000000" == e ? "#222" : t.getLuminance(e) 202 } 203 204 function f(i) { 205 if (t.isPlainObject(i)) { 206 var n = t.hash(JSON.stringify(i)), 207 o = e.customStyles[n]; 208 if (o && !--o.references) { 209 var s = o.element.ownerNode; 210 s && s.parentNode && s.parentNode.removeChild(s), e.customStyles[n] = null 211 } 212 } 213 } 214 215 function m(e, t) { 216 for (var i = 0, n = e.length; i < n; ++i) { 217 var o = e[i]; 218 if (o instanceof RegExp && o.test(t) || "string" == typeof o && o.length && o === t) return !0 219 } 220 return !1 221 } 222 223 function b() { 224 var t = this.setStatus.bind(this), 225 i = this.options.dismissOnTimeout; 226 "number" == typeof i && i >
226= 0 && (this.dismissTimeout = window.setTimeout(function() { 227 t(e.status.dismiss) 228 }, Math.floor(i))); 229 var n = this.options.dismissOnScroll; 230 if ("number" == typeof n && n >= 0) { 231 var o = function(i) { 232 window.pageYOffset > Math.floor(n) && (t(e.status.dismiss), window.removeEventListener("scroll", o), this.onWindowScroll = null) 233 }; 234 this.onWindowScroll = o, window.addEventListener("scroll", o) 235 } 236 } 237 238 function y() { 239 if ("info" != this.options.type && (this.options.revokable = !0), t.isMobile() && (this.options.animateRevokable = !1), this.options.revokable) { 240 var e = a.call(this); 241 this.options.animateRevokable && e.push("cc-animate"), this.customStyleSelector && e.push(this.customStyleSelector); 242 var i = this.options.revokeBtn.replace("{{classes}}", e.join(" ")); 243 this.revokeBtn = u.call(this, i); 244 var n = this.revokeBtn; 245 if (this.options.animateRevokable) { 246 var o = t.throttle(function(e) { 247 var i = !1, 248 o = 20, 249 s = window.innerHeight - 20; 250 t.hasClass(n, "cc-top") && e.clientY < o && (i = !0), t.hasClass(n, "cc-bottom") && e.clientY > s && (i = !0), i ? t.hasClass(n, "cc-active") || t.addClass(n, "cc-active") : t.hasClass(n, "cc-active") && t.removeClass(n, "cc-active") 251 }, 200); 252 this.onMouseMove = o, window.addEventListener("mousemove", o) 253 } 254 } 255 } 256 var g = { 257 enabled: !0, 258 container: null, 259 cookie: { 260 name: "cookieconsent_status", 261 path: "/", 262 domain: "", 263 expiryDays: 365 264 }, 265 onPopupOpen: function() {}, 266 onPopupClose: function() {}, 267 onInitialise: function(e) {}, 268 onStatusChange: function(e, t) {}, 269 onRevokeChoice: function() {}, 270 content: { 271 header: "Cookies used on the website!", 272 message: "This website uses cookies to ensure you get the best experience on our website.", 273 dismiss: "Got it!", 274 allow: "Allow cookies", 275 deny: "Decline", 276 link: "Learn more",
277 href: "http://cookiesandyou.com", 278 close: "❌" 279 }, 280 elements: { 281 header: '<span class="cc-header">{{header}}</span> ', 282 message: '<span id="cookieconsent:desc" class="cc-message">{{message}}</span>', 283 messagelink: '<span id="cookieconsent:desc" class="cc-message">{{message}} <a aria-label="learn more about cookies" role=button tabindex="0" class="cc-link" href="{{href}}" target="_top">{{link}}</a></span>', 284 dismiss: '<a aria-label="dismiss cookie message" role=button tabindex="0" class="cc-btn cc-dismiss">{{dismiss}}</a>', 285 allow: '<a aria-label="allow cookies" role=button tabindex="0" class="cc-btn cc-allow">{{allow}}</a>', 286 deny: '<a aria-label="deny cookies" role=button tabindex="0" class="cc-btn cc-deny">{{deny}}</a>', 287 link: '<a aria-label="learn more about cookies" role=button tabindex="0" class="cc-link" href="{{href}}" target="_top">{{link}}</a>', 288 close: '<span aria-label="dismiss cookie message" role=button tabindex="0" class="cc-close">{{close}}</span>' 289 }, 290 window: '<div role="dialog" aria-live="polite" aria-label="cookieconsent" aria-describedby="cookieconsent:desc" class="cc-window {{classes}}"><!--googleoff: all-->{{children}}<!--googleon: all--></div>', 291 revokeBtn: '<div class="cc-revoke {{classes}}">Cookie Policy</div>', 292 compliance: { 293 info: '<div class="cc-compliance">{{dismiss}}</div>', 294 "opt-in": '<div class="cc-compliance cc-highlight">{{dismiss}}{{allow}}</div>', 295 "opt-out": '<div class="cc-compliance cc-highlight">{{deny}}{{dismiss}}</div>' 296 }, 297 type: "info", 298 layouts: { 299 basic: "{{messagelink}}{{compliance}}", 300 "basic-close": "{{messagelink}}{{compliance}}{{close}}", 301 "basic-header": "{{header}}{{message}}{{link}}{{compliance}}" 302 }, 303 layout: "basic", 304 position: "bottom", 305 theme: "block", 306 "static": !1, 307 palette: null, 308 revokable: !1, 309 animateRevokable: !0, 310 showLink: !0, 311 dismissOnScroll: !1, 312 dismissOnTimeout: !1, 313 autoOpen: !0, 314 autoAttach: !0, 315 whitelistPage: [], 316 blacklistPage: [], 317 overrideHTML: null 318 }; 319 return n.prototype.initialise = function(e) { 320 this.options && this.destroy(), t.deepExtend(this.options = {}, g), t.isPlainObject(e) && t.deepExtend(this.options, e), r.call(this) && (this.options.enabled = !1), m(this.options.blacklistPage, location.pathname) && (this.options.enabled = !1), m(this.options.whitelistPage, location.pathname) && (this.options.enabled = !0); 321 var i = this.options.window.replace("{{classes}}
321", c.call(this).join(" ")).replace("{{children}}", l.call(this)), 322 n = this.options.overrideHTML; 323 if ("string" == typeof n && n.length && (i = n), this.options["static"]) { 324 var o = u.call(this, '<div class="cc-grower">' + i + "</div>"); 325 o.style.display = "", this.element = o.firstChild, this.element.style.display = "none", t.addClass(this.element, "cc-invisible") 326 } else this.element = u.call(this, i); 327 b.call(this), y.call(this), this.options.autoOpen && this.autoOpen() 328 }, n.prototype.destroy = function() { 329 this.onButtonClick && this.element && (this.element.removeEventListener("click", this.onButtonClick), this.onButtonClick = null), this.dismissTimeout && (clearTimeout(this.dismissTimeout), this.dismissTimeout = null), this.onWindowScroll && (window.removeEventListener("scroll", this.onWindowScroll), this.onWindowScroll = null), this.onMouseMove && (window.removeEventListener("mousemove", this.onMouseMove), this.onMouseMove = null), this.element && this.element.parentNode && this.element.parentNode.removeChild(this.element), this.element = null, this.revokeBtn && this.revokeBtn.parentNode && this.revokeBtn.parentNode.removeChild(this.revokeBtn), this.revokeBtn = null, f(this.options.palette), this.options = null 330 }, n.prototype.open = function(t) { 331 if (this.element) return this.isOpen() || (e.hasTransition ? this.fadeIn() : this.element.style.display = "", this.options.revokable && this.toggleRevokeButton(), this.options.onPopupOpen.call(this)), this 332 }, n.prototype.close = function(t) { 333 if (this.element) return this.isOpen() && (e.hasTransition ? this.fadeOut() : this.element.style.display = "none", t && this.options.revokable && this.toggleRevokeButton(!0), this.options.onPopupClose.call(this)), this 334 }, n.prototype.fadeIn = function() { 335 var i = this.element; 336 if (e.hasTransition && i && (this.afterTransition && s.call(this, i), t.hasClass(i, "cc-invisible"))) { 337 if (i.style.display = "", this.options["static"]) { 338 var n = this.element.clientHeight; 339 this.element.parentNode.style.maxHeight = n + "px" 340 } 341 var r = 20; 342 this.openingTimeout = setTimeout(o.bind(this, i), r) 343 } 344 }, n.prototype.fadeOut = function() { 345 var i = this.element; 346 e.hasTransition && i && (this.openingTimeout && (clearTimeout(this.openingTimeout), o.bind(this, i)), t.hasClass(i, "cc-invisible") || (this.options["static"] && (this.element.parentNode.style.maxHeight = ""), this.afterTransition = s.bind(this, i), i.addEventListener(e.transitionEnd, this.afterTransition), t.addClass(i, "cc-invisible"))) 347 }, n.prototype.isOpen = function() { 348 return this.element && "" == this.element.style.display && (!e.hasTransition || !t.hasClass(this.element, "cc-invisible")) 349 }, n.prototype.toggleRevokeButton = function(e) { 350 this.revokeBtn && (this.revokeBtn.style.display = e ? "" : "none") 351 }, n.prototype.revokeChoice = function(e) { 352 this.options.enabled = !0, this.clearStatus(), this.options.onRevokeChoice.call(this), e || this.autoOpen() 353 }, n.prototype.hasAnswered = function(t) { 354 return Object.keys(e.status).indexOf(this.getStatus()) >= 0 355 }, n.prototype.hasConsented = function(t) { 356 var i = this.getStatus(); 357 return i == e.status.allow || i == e.status.dismiss 358 }, n.prototype.autoOpen = function(e) { 359 !this.hasAnswered() && this.options.enabled && this.open() 360 }, n.prototype.setStatus = function(i) { 361 var n = this.options.cookie, 362 o = t.getCookie(n.name), 363 s = Object.keys(e.status).indexOf(o) >= 0; 364 Object.keys(e.status).indexOf(i) >= 0 ? (t.setCookie(n.name, i, n.expiryDays, n.domain, n.path), this.options.onStatusChange.call(this, i, s)) : this.clearStatus() 365 }, n.prototype.getStatus = function() { 366 return t.getCookie(this.options.cookie.name) 367 }, n.prototype.clearStatus = function() { 368 var e = this.options.cookie; 369 t.setCookie(e.name, "", -1, e.domain, e.path) 370 }, n 371 }(), e.Location = function() { 372 function e(e) { 373 t.deepExtend(this.options = {}, s), t.isPlainObject(e) && t.deepExtend(this.options, e), this.currentServiceIndex = -1 374 } 375 376 function i(e, t, i) { 377 var n, o = document.createElement("script"); 378 o.type = "text/" + (e.type || "javascript"), o.src = e.src || e, o.async = !1, o.onreadystatechange = o.onload = function() { 379 var e = o.readyState; 380 clearTimeout(n), t.done || e && !/loaded|complete/.test(e) || (t.done = !0, t(), o.onreadystatechange = o.onload = null) 381 }, document.body.appendChild(o), n = setTimeout(function() { 382 t.done = !0, t(), o.onreadystatechange = o.onload = null 383 }, i) 384 } 385 386 function n(e, t, i, n, o) { 387 var s = new(window.XMLHttpRequest || window.ActiveXObject)("MSXML2.XMLHTTP.3.0"); 388 if (s.open(n ? "POST" : "GET", e, 1), s.setRequestHeader("X-Requested-With", "XMLHttpRequest"), s.setRequestHeader("Content-type", "application/x-www-form-urlencoded"), Array.isArray(o)) 389 for (var r = 0, a = o.length; r < a; ++r) { 390 var c = o[r].split(":", 2); 391 s.setRequestHeader(c[0].replace(/^\s+|\s+$/g, ""), c[1].replace(/^\s+|\s+$/g, "")) 392 } 393 "function" == typeof t && (s.onreadystatechange = function() { 394 s.readyState > 3 && t(s) 395 }), s.send(n) 396 } 397 398 function o(e) { 399 return new Error("Error [" + (e.code || "UNKNOWN") + "]: " + e.error) 400 } 401 var s = { 402 timeout: 5e3, 403 services: ["freegeoip", "ipinfo", "maxmind"], 404 serviceDefinitions: { 405 freegeoip: function() { 406 return { 407 url: "//freegeoip.net/json/?callback={callback}", 408 isScript: !0, 409 callback: function(e, t) { 410 try { 411 var i = JSON.parse(t); 412 return i.error ? o(i) : { 413 code: i.country_code 414 } 415 } catch (n) { 416 return o({ 417 error: "Invalid response
417(" + n + ")" 418 }) 419 } 420 } 421 } 422 }, 423 ipinfo: function() { 424 return { 425 url: "//ipinfo.io", 426 headers: ["Accept: application/json"], 427 callback: function(e, t) { 428 try { 429 var i = JSON.parse(t); 430 return i.error ? o(i) : { 431 code: i.country 432 } 433 } catch (n) { 434 return o({ 435 error: "Invalid response (" + n + ")" 436 }) 437 } 438 } 439 } 440 }, 441 ipinfodb: function(e) { 442 return { 443 url: "//api.ipinfodb.com/v3/ip-country/?key={api_key}&format=json&callback={callback}", 444 isScript: !0, 445 callback: function(e, t) { 446 try { 447 var i = JSON.parse(t); 448 return "ERROR" == i.statusCode ? o({ 449 error: i.statusMessage 450 }) : { 451 code: i.countryCode 452 } 453 } catch (n) { 454 return o({ 455 error: "Invalid response (" + n + ")" 456 }) 457 } 458 } 459 } 460 }, 461 maxmind: function() { 462 return { 463 url: "//js.maxmind.com/js/apis/geoip2/v2.1/geoip2.js", 464 isScript: !0, 465 callback: function(e) { 466 return window.geoip2 ? void geoip2.country(function(t) { 467 try { 468 e({ 469 code: t.country.iso_code 470 }) 471 } catch (i) { 472 e(o(i)) 473 } 474 }, function(t) { 475 e(o(t)) 476 }) : void e(new Error("Unexpected response format. The downloaded script should have exported `geoip2` to the global scope")) 477 } 478 } 479 } 480 } 481 }; 482 return e.prototype.getNextService = function() { 483 var e; 484 do e = this.getServiceByIdx(++this.currentServiceIndex); while (this.currentServiceIndex < this.options.services.length && !e); 485 return e 486 }, e.prototype.getServiceByIdx = function(e) { 487 var i = this.options.services[e]; 488 if ("function" == typeof i) { 489 var n = i(); 490 return n.name && t.deepExtend(n, this.options.serviceDefinitions[n.name](n)), n 491 } 492 return "string" == typeof i ? this.options.serviceDefinitions[i]() : t.isPlainObject(i) ? this.options.serviceDefinitions[i.name](i) : null 493 }, e.prototype.locate = function(e, t) { 494 var i = this.getNextService(); 495 return i ? (this.callbackComplete = e, this.callbackError = t, void this.runService(i, this.runNextServiceOnError.bind(this))) : void t(new Error("No services to run")) 496 }, e.prototype.setupUrl = function(e) { 497 var t = this.getCurrentServiceOpts(); 498 return e.url.replace(/\{(.*?)\}/g, function(i, n) { 499 if ("callback" === n) { 500 var o = "callback" + Date.now(); 501 return window[o] = function(t) { 502 e.__JSONP_DATA = JSON.stringify(t) 503 }, o 504 } 505 if (n in t.interpolateUrl) return t.interpolateUrl[n] 506 }) 507 }, e.prototype.runService = function(e, t) { 508 var o = this; 509 if (e && e.url && e.callback) { 510 var s = e.isScript ? i : n, 511 r = this.setupUrl(e); 512 s(r, function(i) { 513 var n = i ? i.responseText : ""; 514 e.__JSONP_DATA && (n = e.__JSONP_DATA, delete e.__JSONP_DATA), o.runServiceCallback.call(o, t, e, n) 515 }, this.options.timeout, e.data, e.headers) 516 } 517 }, e.prototype.runServiceCallback = function(e, t, i) { 518 var n = this, 519 o = function(t) { 520 s || n.onServiceResult.call(n, e, t) 521 }, 522 s = t.callback(o, i); 523 s && this.onServiceResult.call(this, e, s) 524 }, e.prototype.onServiceResult = function(e, t) { 525 t instanceof Error || t && t.error ? e.call(this, t, null) : e.call(this, null, t) 526 }, e.prototype.runNextServiceOnError = function(e, t) { 527 if (e) { 528 this.logError(e); 529 var i = this.getNextService(); 530 i ? this.runService(i, this.runNextServiceOnError.bind(this)) : this.completeService.call(this, this.callbackError, new Error("All services failed")) 531 } else this.completeService.call(this, this.callbackComplete, t) 532 }, e.prototype.getCurrentServiceOpts = function() { 533 var e = this.options.services[this.currentServiceIndex]; 534 return "string" == typeof e ? { 535 name: e 536 } : "function" == typeof e ? e() : t.isPlainObject(e) ? e : {} 537 }, e.prototype.completeService = function(e, t) { 538 this.currentServiceIndex = -1, e && e(t) 539 }, e.prototype.logError = function(e) { 540 var t = this.currentServiceIndex,
541 i = this.getServiceByIdx(t); 542 console.error("The service[" + t + "] (" + i.url + ") responded with the following error", e) 543 }, e 544 }(), e.Law = function() { 545 function e(e) { 546 this.initialise.apply(this, arguments) 547 } 548 var i = { 549 regionalLaw: !0, 550 hasLaw: ["AT", "BE", "BG", "HR", "CZ", "CY", "DK", "EE", "FI", "FR", "DE", "EL", "HU", "IE", "IT", "LV", "LT", "LU", "MT", "NL", "PL", "PT", "SK", "SI", "ES", "SE", "GB", "UK"], 551 revokable: ["HR", "CY", "DK", "EE", "FR", "DE", "LV", "LT", "NL", "PT", "ES"], 552 explicitAction: ["HR", "IT", "ES"] 553 }; 554 return e.prototype.initialise = function(e) { 555 t.deepExtend(this.options = {}, i), t.isPlainObject(e) && t.deepExtend(this.options, e) 556 }, e.prototype.get = function(e) { 557 var t = this.options; 558 return { 559 hasLaw: t.hasLaw.indexOf(e) >= 0, 560 revokable: t.revokable.indexOf(e) >= 0, 561 explicitAction: t.explicitAction.indexOf(e) >= 0 562 } 563 }, e.prototype.applyLaw = function(e, t) { 564 var i = this.get(t); 565 return i.hasLaw || (e.enabled = !1), this.options.regionalLaw && (i.revokable && (e.revokable = !0), i.explicitAction && (e.dismissOnScroll = !1, e.dismissOnTimeout = !1)), e 566 }, e 567 }(), e.initialise = function(t, i, n) { 568 var o = new e.Law(t.law); 569 i || (i = function() {}), n || (n = function() {}), e.getCountryCode(t, function(n) { 570 delete t.law, delete t.location, n.code && (t = o.applyLaw(t, n.code)), i(new e.Popup(t)) 571 }, function(i) { 572 delete t.law, delete t.location, n(i, new e.Popup(t)) 573 }) 574 }, e.getCountryCode = function(t, i, n) { 575 if (t.law && t.law.countryCode) return void i({ 576 code: t.law.countryCode 577 }); 578 if (t.location) { 579 var o = new e.Location(t.location); 580 return void o.locate(function(e) { 581 i(e || {}) 582 }, n) 583 } 584 i({}) 585 }, e.utils = t, e.hasInitialised = !0, window.cookieconsent = e 586 } 587}(window.cookieconsent || {});
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.