/*! modernizr 3.6.0 (Custom) | MIT */ ! function(window, document, undefined) {
    function is(A, e) {
        return typeof A === e
    }

    function testRunner() {
        var A, e, t, n, r, o, i;
        for (var d in tests)
            if (tests.hasOwnProperty(d)) {
                if (A = [], e = tests[d], e.name && (A.push(e.name.toLowerCase()), e.options && e.options.aliases && e.options.aliases.length))
                    for (t = 0; t < e.options.aliases.length; t++) A.push(e.options.aliases[t].toLowerCase());
                for (n = is(e.fn, "function") ? e.fn() : e.fn, r = 0; r < A.length; r++) o = A[r], i = o.split("."), 1 === i.length ? Modernizr[i[0]] = n : (!Modernizr[i[0]] || Modernizr[i[0]] instanceof Boolean || (Modernizr[i[0]] = new Boolean(Modernizr[i[0]])), Modernizr[i[0]][i[1]] = n), classes.push((n ? "" : "no-") + i.join("-"))
            }
    }

    function createElement() {
        return "function" != typeof document.createElement ? document.createElement(arguments[0]) : isSVG ? document.createElementNS.call(document, "http://www.w3.org/2000/svg", arguments[0]) : document.createElement.apply(document, arguments)
    }

    function getBody() {
        var A = document.body;
        return A || (A = createElement(isSVG ? "svg" : "body"), A.fake = !0), A
    }

    function computedStyle(A, e, t) {
        var n;
        if ("getComputedStyle" in window) {
            n = getComputedStyle.call(window, A, e);
            var r = window.console;
            if (null !== n) t && (n = n.getPropertyValue(t));
            else if (r) {
                var o = r.error ? "error" : "log";
                r[o].call(r, "getComputedStyle returning null, its possible modernizr test results are inaccurate")
            }
        } else n = !e && A.currentStyle && A.currentStyle[t];
        return n
    }

    function cssToDOM(A) {
        return A.replace(/([a-z])-([a-z])/g, function(A, e, t) {
            return e + t.toUpperCase()
        }).replace(/^-/, "")
    }

    function setClasses(A) {
        var e = docElement.className,
            t = Modernizr._config.classPrefix || "";
        if (isSVG && (e = e.baseVal), Modernizr._config.enableJSClass) {
            var n = new RegExp("(^|\\s)" + t + "no-js(\\s|$)");
            e = e.replace(n, "$1" + t + "js$2")
        }
        Modernizr._config.enableClasses && (e += " " + t + A.join(" " + t), isSVG ? docElement.className.baseVal = e : docElement.className = e)
    }

    function addTest(A, e) {
        if ("object" == typeof A)
            for (var t in A) hasOwnProp(A, t) && addTest(t, A[t]);
        else {
            A = A.toLowerCase();
            var n = A.split("."),
                r = Modernizr[n[0]];
            if (2 == n.length && (r = r[n[1]]), "undefined" != typeof r) return Modernizr;
            e = "function" == typeof e ? e() : e, 1 == n.length ? Modernizr[n[0]] = e : (!Modernizr[n[0]] || Modernizr[n[0]] instanceof Boolean || (Modernizr[n[0]] = new Boolean(Modernizr[n[0]])), Modernizr[n[0]][n[1]] = e), setClasses([(e && 0 != e ? "" : "no-") + n.join("-")]), Modernizr._trigger(A, e)
        }
        return Modernizr
    }

    function injectElementWithStyles(A, e, t, n) {
        var r, o, i, d, a = "modernizr",
            s = createElement("div"),
            w = getBody();
        if (parseInt(t, 10))
            for (; t--;) i = createElement("div"), i.id = n ? n[t] : a + (t + 1), s.appendChild(i);
        return r = createElement("style"), r.type = "text/css", r.id = "s" + a, (w.fake ? w : s).appendChild(r), w.appendChild(s), r.styleSheet ? r.styleSheet.cssText = A : r.appendChild(document.createTextNode(A)), s.id = a, w.fake && (w.style.background = "", w.style.overflow = "hidden", d = docElement.style.overflow, docElement.style.overflow = "hidden", docElement.appendChild(w)), o = e(s, A), w.fake ? (w.parentNode.removeChild(w), docElement.style.overflow = d, docElement.offsetHeight) : s.parentNode.removeChild(s), !!o
    }

    function contains(A, e) {
        return !!~("" + A).indexOf(e)
    }

    function fnBind(A, e) {
        return function() {
            return A.apply(e, arguments)
        }
    }

    function testDOMProps(A, e, t) {
        var n;
        for (var r in A)
            if (A[r] in e) return t === !1 ? A[r] : (n = e[A[r]], is(n, "function") ? fnBind(n, t || e) : n);
        return !1
    }

    function domToCSS(A) {
        return A.replace(/([A-Z])/g, function(A, e) {
            return "-" + e.toLowerCase()
        }).replace(/^ms-/, "-ms-")
    }

    function nativeTestProps(A, e) {
        var t = A.length;
        if ("CSS" in window && "supports" in window.CSS) {
            for (; t--;)
                if (window.CSS.supports(domToCSS(A[t]), e)) return !0;
            return !1
        }
        if ("CSSSupportsRule" in window) {
            for (var n = []; t--;) n.push("(" + domToCSS(A[t]) + ":" + e + ")");
            return n = n.join(" or "), injectElementWithStyles("@supports (" + n + ") { #modernizr { position: absolute; } }", function(A) {
                return "absolute" == computedStyle(A, null, "position")
            })
        }
        return undefined
    }

    function testProps(A, e, t, n) {
        function r() {
            i && (delete mStyle.style, delete mStyle.modElem)
        }
        if (n = is(n, "undefined") ? !1 : n, !is(t, "undefined")) {
            var o = nativeTestProps(A, t);
            if (!is(o, "undefined")) return o
        }
        for (var i, d, a, s, w, c = ["modernizr", "tspan", "samp"]; !mStyle.style && c.length;) i = !0, mStyle.modElem = createElement(c.shift()), mStyle.style = mStyle.modElem.style;
        for (a = A.length, d = 0; a > d; d++)
            if (s = A[d], w = mStyle.style[s], contains(s, "-") && (s = cssToDOM(s)), mStyle.style[s] !== undefined) {
                if (n || is(t, "undefined")) return r(), "pfx" == e ? s : !0;
                try {
                    mStyle.style[s] = t
                } catch (l) {}
                if (mStyle.style[s] != w) return r(), "pfx" == e ? s : !0
            }
        return r(), !1
    }

    function testPropsAll(A, e, t, n, r) {
        var o = A.charAt(0).toUpperCase() + A.slice(1),
            i = (A + " " + cssomPrefixes.join(o + " ") + o).split(" ");
        return is(e, "string") || is(e, "undefined") ? testProps(i, e, n, r) : (i = (A + " " + domPrefixes.join(o + " ") + o).split(" "), testDOMProps(i, e, t))
    }

    function detectDeleteDatabase(A, e) {
        var t = A.deleteDatabase(e);
        t.onsuccess = function() {
            addTest("indexeddb.deletedatabase", !0)
        }, t.onerror = function() {
            addTest("indexeddb.deletedatabase", !1)
        }
    }
    var tests = [],
        ModernizrProto = {
            _version: "3.6.0",
            _config: {
                classPrefix: "",
                enableClasses: !0,
                enableJSClass: !0,
                usePrefixes: !0
            },
            _q: [],
            on: function(A, e) {
                var t = this;
                setTimeout(function() {
                    e(t[A])
                }, 0)
            },
            addTest: function(A, e, t) {
                tests.push({
                    name: A,
                    fn: e,
                    options: t
                })
            },
            addAsyncTest: function(A) {
                tests.push({
                    name: null,
                    fn: A
                })
            }
        },
        Modernizr = function() {};
    Modernizr.prototype = ModernizrProto, Modernizr = new Modernizr, Modernizr.addTest("applicationcache", "applicationCache" in window), Modernizr.addTest("blobconstructor", function() {
        try {
            return !!new Blob
        } catch (A) {
            return !1
        }
    }, {
        aliases: ["blob-constructor"]
    }), Modernizr.addTest("cors", "XMLHttpRequest" in window && "withCredentials" in new XMLHttpRequest), Modernizr.addTest("customelements", "customElements" in window), Modernizr.addTest("customprotocolhandler", function() {
        if (!navigator.registerProtocolHandler) return !1;
        try {
            navigator.registerProtocolHandler("thisShouldFail")
        } catch (A) {
            return A instanceof TypeError
        }
        return !1
    }), Modernizr.addTest("customevent", "CustomEvent" in window && "function" == typeof window.CustomEvent), Modernizr.addTest("dataview", "undefined" != typeof DataView && "getFloat64" in DataView.prototype), Modernizr.addTest("eventlistener", "addEventListener" in window), Modernizr.addTest("geolocation", "geolocation" in navigator), Modernizr.addTest("history", function() {
        var A = navigator.userAgent;
        return -1 === A.indexOf("Android 2.") && -1 === A.indexOf("Android 4.0") || -1 === A.indexOf("Mobile Safari") || -1 !== A.indexOf("Chrome") || -1 !== A.indexOf("Windows Phone") || "file:" === location.protocol ? window.history && "pushState" in window.history : !1
    }), Modernizr.addTest("ie8compat", !window.addEventListener && !!document.documentMode && 7 === document.documentMode), Modernizr.addTest("notification", function() {
        if (!window.Notification || !window.Notification.requestPermission) return !1;
        if ("granted" === window.Notification.permission) return !0;
        try {
            new window.Notification("")
        } catch (A) {
            if ("TypeError" === A.name) return !1
        }
        return !0
    }), Modernizr.addTest("postmessage", "postMessage" in window), Modernizr.addTest("queryselector", "querySelector" in document && "querySelectorAll" in document), Modernizr.addTest("serviceworker", "serviceWorker" in navigator), Modernizr.addTest("templatestrings", function() {
        var supports;
        try {
            eval("``"), supports = !0
        } catch (e) {}
        return !!supports
    }), Modernizr.addTest("svg", !!document.createElementNS && !!document.createElementNS("http://www.w3.org/2000/svg", "svg").createSVGRect), Modernizr.addTest("typedarrays", "ArrayBuffer" in window), Modernizr.addTest("webaudio", function() {
        var A = "webkitAudioContext" in window,
            e = "AudioContext" in window;
        return Modernizr._config.usePrefixes ? A || e : e
    }), Modernizr.addTest("microdata", "getItems" in document);
    var supports = !1;
    try {
        supports = "WebSocket" in window && 2 === window.WebSocket.CLOSING
    } catch (e) {}
    Modernizr.addTest("websockets", supports), Modernizr.addTest("xdomainrequest", "XDomainRequest" in window), Modernizr.addTest("mutationobserver", !!window.MutationObserver || !!window.WebKitMutationObserver), Modernizr.addTest("passiveeventlisteners", function() {
        var A = !1;
        try {
            var e = Object.defineProperty({}, "passive", {
                get: function() {
                    A = !0
                }
            });
            window.addEventListener("test", null, e)
        } catch (t) {}
        return A
    }), Modernizr.addTest("picture", "HTMLPictureElement" in window), Modernizr.addTest("es5date", function() {
        var A = "2013-04-12T06:06:37.307Z",
            e = !1;
        try {
            e = !!Date.parse(A)
        } catch (t) {}
        return !!(Date.now && Date.prototype && Date.prototype.toISOString && Date.prototype.toJSON && e)
    }), Modernizr.addTest("es5array", function() {
        return !!(Array.prototype && Array.prototype.every && Array.prototype.filter && Array.prototype.forEach && Array.prototype.indexOf && Array.prototype.lastIndexOf && Array.prototype.map && Array.prototype.some && Array.prototype.reduce && Array.prototype.reduceRight && Array.isArray)
    }), Modernizr.addTest("es5function", function() {
        return !(!Function.prototype || !Function.prototype.bind)
    }), Modernizr.addTest("es5object", function() {
        return !!(Object.keys && Object.create && Object.getPrototypeOf && Object.getOwnPropertyNames && Object.isSealed && Object.isFrozen && Object.isExtensible && Object.getOwnPropertyDescriptor && Object.defineProperty && Object.defineProperties && Object.seal && Object.freeze && Object.preventExtensions)
    }), Modernizr.addTest("strictmode", function() {
        "use strict";
        return !this
    }()), Modernizr.addTest("es5string", function() {
        return !(!String.prototype || !String.prototype.trim)
    }), Modernizr.addTest("es5syntax", function() {
        var value, obj, stringAccess, getter, setter, reservedWords, zeroWidthChars;
        try {
            return stringAccess = eval('"foobar"[3] === "b"'), getter = eval("({ get x(){ return 1 } }).x === 1"), eval("({ set x(v){ value = v; } }).x = 1"), setter = 1 === value, eval("obj = ({ if: 1 })"), reservedWords = 1 === obj["if"], zeroWidthChars = eval("_?? = true"), stringAccess && getter && setter && reservedWords && zeroWidthChars
        } catch (ignore) {
            return !1
        }
    }), Modernizr.addTest("es5undefined", function() {
        var A, e;
        try {
            e = window.undefined, window.undefined = 12345, A = "undefined" == typeof window.undefined, window.undefined = e
        } catch (t) {
            return !1
        }
        return A
    }), Modernizr.addTest("es6array", !!(Array.prototype && Array.prototype.copyWithin && Array.prototype.fill && Array.prototype.find && Array.prototype.findIndex && Array.prototype.keys && Array.prototype.entries && Array.prototype.values && Array.from && Array.of)), Modernizr.addTest("arrow", function() {
        try {
            eval("()=>{}")
        } catch (e) {
            return !1
        }
        return !0
    }), Modernizr.addTest("es6collections", !!(window.Map && window.Set && window.WeakMap && window.WeakSet)), Modernizr.addTest("generators", function() {
        try {
            new Function("function* test() {}")()
        } catch (A) {
            return !1
        }
        return !0
    }), Modernizr.addTest("es6math", !!(Math && Math.clz32 && Math.cbrt && Math.imul && Math.sign && Math.log10 && Math.log2 && Math.log1p && Math.expm1 && Math.cosh && Math.sinh && Math.tanh && Math.acosh && Math.asinh && Math.atanh && Math.hypot && Math.trunc && Math.fround)), Modernizr.addTest("es6number", !!(Number.isFinite && Number.isInteger && Number.isSafeInteger && Number.isNaN && Number.parseInt && Number.parseFloat && Number.isInteger(Number.MAX_SAFE_INTEGER) && Number.isInteger(Number.MIN_SAFE_INTEGER) && Number.isFinite(Number.EPSILON))), Modernizr.addTest("es6object", !!(Object.assign && Object.is && Object.setPrototypeOf)), Modernizr.addTest("promises", function() {
        return "Promise" in window && "resolve" in window.Promise && "reject" in window.Promise && "all" in window.Promise && "race" in window.Promise && function() {
            var A;
            return new window.Promise(function(e) {
                A = e
            }), "function" == typeof A
        }()
    }), Modernizr.addTest("es6string", !!(String.fromCodePoint && String.raw && String.prototype.codePointAt && String.prototype.repeat && String.prototype.startsWith && String.prototype.endsWith && String.prototype.includes)), Modernizr.addTest("devicemotion", "DeviceMotionEvent" in window), Modernizr.addTest("deviceorientation", "DeviceOrientationEvent" in window), Modernizr.addTest("filereader", !!(window.File && window.FileList && window.FileReader)), Modernizr.addTest("beacon", "sendBeacon" in navigator), Modernizr.addTest("lowbandwidth", function() {
        var A = navigator.connection || {
            type: 0
        };
        return 3 == A.type || 4 == A.type || /^[23]g$/.test(A.type)
    }), Modernizr.addTest("eventsource", "EventSource" in window), Modernizr.addTest("fetch", "fetch" in window), Modernizr.addTest("xhrresponsetype", function() {
        if ("undefined" == typeof XMLHttpRequest) return !1;
        var A = new XMLHttpRequest;
        return A.open("get", "/", !0), "response" in A
    }()), Modernizr.addTest("xhr2", "XMLHttpRequest" in window && "withCredentials" in new XMLHttpRequest), Modernizr.addTest("speechsynthesis", "SpeechSynthesisUtterance" in window), Modernizr.addTest("localstorage", function() {
        var A = "modernizr";
        try {
            return localStorage.setItem(A, A), localStorage.removeItem(A), !0
        } catch (e) {
            return !1
        }
    }), Modernizr.addTest("sessionstorage", function() {
        var A = "modernizr";
        try {
            return sessionStorage.setItem(A, A), sessionStorage.removeItem(A), !0
        } catch (e) {
            return !1
        }
    }), Modernizr.addTest("websqldatabase", "openDatabase" in window), Modernizr.addTest("svgfilters", function() {
        var A = !1;
        try {
            A = "SVGFEColorMatrixElement" in window && 2 == SVGFEColorMatrixElement.SVG_FECOLORMATRIX_TYPE_SATURATE
        } catch (e) {}
        return A
    }), Modernizr.addTest("urlparser", function() {
        var A;
        try {
            return A = new URL("http://modernizr.com/"), "http://modernizr.com/" === A.href
        } catch (e) {
            return !1
        }
    }), Modernizr.addTest("urlsearchparams", "URLSearchParams" in window), Modernizr.addTest("getUserMedia", "mediaDevices" in navigator && "getUserMedia" in navigator.mediaDevices), Modernizr.addTest("websocketsbinary", function() {
        var A, e = "https:" == location.protocol ? "wss" : "ws";
        if ("WebSocket" in window) {
            if (A = "binaryType" in WebSocket.prototype) return A;
            try {
                return !!new WebSocket(e + "://.").binaryType
            } catch (t) {}
        }
        return !1
    }), Modernizr.addTest("atobbtoa", "atob" in window && "btoa" in window, {
        aliases: ["atob-btoa"]
    }), Modernizr.addTest("framed", window.location != top.location);
    var classes = [];
    Modernizr.addTest("contains", is(String.prototype.contains, "function"));
    var docElement = document.documentElement;
    Modernizr.addTest("contextmenu", "contextMenu" in docElement && "HTMLMenuItemElement" in window), Modernizr.addTest("classlist", "classList" in docElement), Modernizr.addTest("documentfragment", function() {
        return "createDocumentFragment" in document && "appendChild" in docElement
    });
    var isSVG = "svg" === docElement.nodeName.toLowerCase();
    Modernizr.addTest("canvas", function() {
        var A = createElement("canvas");
        return !(!A.getContext || !A.getContext("2d"))
    }), Modernizr.addTest("canvastext", function() {
        return Modernizr.canvas === !1 ? !1 : "function" == typeof createElement("canvas").getContext("2d").fillText
    }), Modernizr.addTest("contenteditable", function() {
        if ("contentEditable" in docElement) {
            var A = createElement("div");
            return A.contentEditable = !0, "true" === A.contentEditable
        }
    }), Modernizr.addTest("emoji", function() {
        if (!Modernizr.canvastext) return !1;
        var A = window.devicePixelRatio || 1,
            e = 12 * A,
            t = createElement("canvas"),
            n = t.getContext("2d");
        return n.fillStyle = "#f00", n.textBaseline = "top", n.font = "32px Arial", n.fillText("??", 0, 0), 0 !== n.getImageData(e, e, 1, 1).data[0]
    }), Modernizr.addTest("olreversed", "reversed" in createElement("ol")), Modernizr.addTest("userdata", !!createElement("div").addBehavior), Modernizr.addTest("video", function() {
        var A = createElement("video"),
            e = !1;
        try {
            e = !!A.canPlayType, e && (e = new Boolean(e), e.ogg = A.canPlayType('video/ogg; codecs="theora"').replace(/^no$/, ""), e.h264 = A.canPlayType('video/mp4; codecs="avc1.42E01E"').replace(/^no$/, ""), e.webm = A.canPlayType('video/webm; codecs="vp8, vorbis"').replace(/^no$/, ""), e.vp9 = A.canPlayType('video/webm; codecs="vp9"').replace(/^no$/, ""), e.hls = A.canPlayType('application/x-mpegURL; codecs="avc1.42E01E"').replace(/^no$/, ""))
        } catch (t) {}
        return e
    }), Modernizr.addTest("webanimations", "animate" in createElement("div")), Modernizr.addTest("audioloop", "loop" in createElement("audio")), Modernizr.addTest("canvasblending", function() {
        if (Modernizr.canvas === !1) return !1;
        var A = createElement("canvas").getContext("2d");
        try {
            A.globalCompositeOperation = "screen"
        } catch (e) {}
        return "screen" === A.globalCompositeOperation
    });
    var canvas = createElement("canvas");
    Modernizr.addTest("todataurljpeg", function() {
        return !!Modernizr.canvas && 0 === canvas.toDataURL("image/jpeg").indexOf("data:image/jpeg")
    }), Modernizr.addTest("todataurlpng", function() {
        return !!Modernizr.canvas && 0 === canvas.toDataURL("image/png").indexOf("data:image/png")
    }), Modernizr.addTest("todataurlwebp", function() {
        var A = !1;
        try {
            A = !!Modernizr.canvas && 0 === canvas.toDataURL("image/webp").indexOf("data:image/webp")
        } catch (e) {}
        return A
    }), Modernizr.addTest("canvaswinding", function() {
        if (Modernizr.canvas === !1) return !1;
        var A = createElement("canvas").getContext("2d");
        return A.rect(0, 0, 10, 10), A.rect(2, 2, 6, 6), A.isPointInPath(5, 5, "evenodd") === !1
    }), Modernizr.addTest("dataset", function() {
        var A = createElement("div");
        return A.setAttribute("data-a-b", "c"), !(!A.dataset || "c" !== A.dataset.aB)
    }), Modernizr.addTest("outputelem", "value" in createElement("output")), Modernizr.addTest("progressbar", createElement("progress").max !== undefined), Modernizr.addTest("meter", createElement("meter").max !== undefined), Modernizr.addTest("ruby", function() {
        function A(A, e) {
            var t;
            return window.getComputedStyle ? t = document.defaultView.getComputedStyle(A, null).getPropertyValue(e) : A.currentStyle && (t = A.currentStyle[e]), t
        }

        function e() {
            docElement.removeChild(t), t = null, n = null, r = null
        }
        var t = createElement("ruby"),
            n = createElement("rt"),
            r = createElement("rp"),
            o = "display",
            i = "fontSize";
        return t.appendChild(r), t.appendChild(n), docElement.appendChild(t), "none" == A(r, o) || "ruby" == A(t, o) && "ruby-text" == A(n, o) || "6pt" == A(r, i) && "6pt" == A(n, i) ? (e(), !0) : (e(), !1)
    }), Modernizr.addTest("time", "valueAsDate" in createElement("time")), Modernizr.addTest("unknownelements", function() {
        var A = createElement("a");
        return A.innerHTML = "<xyz></xyz>", 1 === A.childNodes.length
    }), Modernizr.addTest("sandbox", "sandbox" in createElement("iframe")), Modernizr.addTest("seamless", "seamless" in createElement("iframe")), Modernizr.addTest("srcdoc", "srcdoc" in createElement("iframe")), Modernizr.addTest("imgcrossorigin", "crossOrigin" in createElement("img")), Modernizr.addTest("scriptasync", "async" in createElement("script")), Modernizr.addTest("scriptdefer", "defer" in createElement("script")), Modernizr.addTest("inlinesvg", function() {
        var A = createElement("div");
        return A.innerHTML = "<svg/>", "http://www.w3.org/2000/svg" == ("undefined" != typeof SVGRect && A.firstChild && A.firstChild.namespaceURI)
    }), Modernizr.addTest("videocrossorigin", "crossOrigin" in createElement("video")), Modernizr.addTest("videoloop", "loop" in createElement("video")), Modernizr.addTest("videopreload", "preload" in createElement("video"));
    var hasEvent = function() {
        function A(A, t) {
            var n;
            return A ? (t && "string" != typeof t || (t = createElement(t || "div")), A = "on" + A, n = A in t, !n && e && (t.setAttribute || (t = createElement("div")), t.setAttribute(A, ""), n = "function" == typeof t[A], t[A] !== undefined && (t[A] = undefined), t.removeAttribute(A)), n) : !1
        }
        var e = !("onblur" in document.documentElement);
        return A
    }();
    ModernizrProto.hasEvent = hasEvent, Modernizr.addTest("ambientlight", hasEvent("devicelight", window)), Modernizr.addTest("hashchange", function() {
        return hasEvent("hashchange", window) === !1 ? !1 : document.documentMode === undefined || document.documentMode > 7
    }), Modernizr.addTest("audio", function() {
        var A = createElement("audio"),
            e = !1;
        try {
            e = !!A.canPlayType, e && (e = new Boolean(e), e.ogg = A.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/, ""), e.mp3 = A.canPlayType('audio/mpeg; codecs="mp3"').replace(/^no$/, ""), e.opus = A.canPlayType('audio/ogg; codecs="opus"') || A.canPlayType('audio/webm; codecs="opus"').replace(/^no$/, ""), e.wav = A.canPlayType('audio/wav; codecs="1"').replace(/^no$/, ""), e.m4a = (A.canPlayType("audio/x-m4a;") || A.canPlayType("audio/aac;")).replace(/^no$/, ""))
        } catch (t) {}
        return e
    }), Modernizr.addTest("bdi", function() {
        var A = createElement("div"),
            e = createElement("bdi");
        e.innerHTML = "&#1573;", A.appendChild(e), docElement.appendChild(A);
        var t = "rtl" === computedStyle(e, null, "direction");
        return docElement.removeChild(A), t
    }), Modernizr.addTest("json", "JSON" in window && "parse" in JSON && "stringify" in JSON), Modernizr.addTest("es5", function() {
        return !!(Modernizr.es5array && Modernizr.es5date && Modernizr.es5function && Modernizr.es5object && Modernizr.strictmode && Modernizr.es5string && Modernizr.json && Modernizr.es5syntax && Modernizr.es5undefined)
    });
    var testXhrType = function(A) {
        if ("undefined" == typeof XMLHttpRequest) return !1;
        var e = new XMLHttpRequest;
        e.open("get", "/", !0);
        try {
            e.responseType = A
        } catch (t) {
            return !1
        }
        return "response" in e && e.responseType == A
    };
    Modernizr.addTest("xhrresponsetypearraybuffer", testXhrType("arraybuffer")), Modernizr.addTest("xhrresponsetypeblob", testXhrType("blob")), Modernizr.addTest("xhrresponsetypedocument", testXhrType("document")), Modernizr.addTest("xhrresponsetypejson", testXhrType("json")), Modernizr.addTest("xhrresponsetypetext", testXhrType("text"));
    var toStringFn = {}.toString;
    Modernizr.addTest("svgclippaths", function() {
        return !!document.createElementNS && /SVGClipPath/.test(toStringFn.call(document.createElementNS("http://www.w3.org/2000/svg", "clipPath")))
    }), Modernizr.addTest("svgforeignobject", function() {
        return !!document.createElementNS && /SVGForeignObject/.test(toStringFn.call(document.createElementNS("http://www.w3.org/2000/svg", "foreignObject")))
    }), Modernizr.addTest("smil", function() {
        return !!document.createElementNS && /SVGAnimate/.test(toStringFn.call(document.createElementNS("http://www.w3.org/2000/svg", "animate")))
    });
    var inputElem = createElement("input"),
        inputattrs = "autocomplete autofocus list placeholder max min multiple pattern required step".split(" "),
        attrs = {};
    Modernizr.input = function(A) {
        for (var e = 0, t = A.length; t > e; e++) attrs[A[e]] = !!(A[e] in inputElem);
        return attrs.list && (attrs.list = !(!createElement("datalist") || !window.HTMLDataListElement)), attrs
    }(inputattrs), Modernizr.addTest("datalistelem", Modernizr.input.list);
    var hasOwnProp;
    ! function() {
        var A = {}.hasOwnProperty;
        hasOwnProp = is(A, "undefined") || is(A.call, "undefined") ? function(A, e) {
            return e in A && is(A.constructor.prototype[e], "undefined")
        } : function(e, t) {
            return A.call(e, t)
        }
    }(), ModernizrProto._l = {}, ModernizrProto.on = function(A, e) {
        this._l[A] || (this._l[A] = []), this._l[A].push(e), Modernizr.hasOwnProperty(A) && setTimeout(function() {
            Modernizr._trigger(A, Modernizr[A])
        }, 0)
    }, ModernizrProto._trigger = function(A, e) {
        if (this._l[A]) {
            var t = this._l[A];
            setTimeout(function() {
                var A, n;
                for (A = 0; A < t.length; A++)(n = t[A])(e)
            }, 0), delete this._l[A]
        }
    }, Modernizr._q.push(function() {
        ModernizrProto.addTest = addTest
    }), Modernizr.addAsyncTest(function() {
        var A, e, t = function(A) {
                docElement.contains(A) || docElement.appendChild(A)
            },
            n = function(A) {
                A.fake && A.parentNode && A.parentNode.removeChild(A)
            },
            r = function(A, e) {
                var t = !!A;
                if (t && (t = new Boolean(t), t.blocked = "blocked" === A), addTest("flash", function() {
                        return t
                    }), e && s.contains(e)) {
                    for (; e.parentNode !== s;) e = e.parentNode;
                    s.removeChild(e)
                }
            };
        try {
            e = "ActiveXObject" in window && "Pan" in new window.ActiveXObject("ShockwaveFlash.ShockwaveFlash")
        } catch (o) {}
        if (A = !("plugins" in navigator && "Shockwave Flash" in navigator.plugins || e), A || isSVG) r(!1);
        else {
            var i, d, a = createElement("embed"),
                s = getBody();
            if (a.type = "application/x-shockwave-flash", s.appendChild(a), !("Pan" in a || e)) return t(s), r("blocked", a), void n(s);
            i = function() {
                return t(s), docElement.contains(s) ? (docElement.contains(a) ? (d = a.style.cssText, "" !== d ? r("blocked", a) : r(!0, a)) : r("blocked"), void n(s)) : (s = document.body || s, a = createElement("embed"), a.type = "application/x-shockwave-flash", s.appendChild(a), setTimeout(i, 1e3))
            }, setTimeout(i, 10)
        }
    }), addTest("htmlimports", "import" in createElement("link")), Modernizr.addAsyncTest(function() {
        function A() {
            clearTimeout(e), window.removeEventListener("deviceproximity", A), addTest("proximity", !0)
        }
        var e, t = 300;
        "ondeviceproximity" in window && "onuserproximity" in window ? (window.addEventListener("deviceproximity", A), e = setTimeout(function() {
            window.removeEventListener("deviceproximity", A), addTest("proximity", !1)
        }, t)) : addTest("proximity", !1)
    }), Modernizr.addAsyncTest(function() {
        function A(t) {
            clearTimeout(e);
            var r = t !== undefined && "loadeddata" === t.type ? !0 : !1;
            n.removeEventListener("loadeddata", A, !1), addTest("audiopreload", r), n.parentNode && n.parentNode.removeChild(n)
        }
        var e, t = 300,
            n = createElement("audio"),
            r = n.style;
        if (!(Modernizr.audio && "preload" in n)) return void addTest("audiopreload", !1);
        r.position = "absolute", r.height = 0, r.width = 0;
        try {
            if (Modernizr.audio.mp3) n.src = "data:audio/mpeg;base64,//MUxAAB6AXgAAAAAPP+c6nf//yi/6f3//MUxAMAAAIAAAjEcH//0fTX6C9Lf//0//MUxA4BeAIAAAAAAKX2/6zv//+IlR4f//MUxBMCMAH8AAAAABYWalVMQU1FMy45//MUxBUB0AH0AAAAADkuM1VVVVVVVVVV//MUxBgBUATowAAAAFVVVVVVVVVVVVVV";
            else if (Modernizr.audio.m4a) n.src = "data:audio/x-m4a;base64,AAAAGGZ0eXBNNEEgAAACAGlzb21pc28yAAAACGZyZWUAAAAfbWRhdN4EAABsaWJmYWFjIDEuMjgAAAFoAQBHAAACiG1vb3YAAABsbXZoZAAAAAB8JbCAfCWwgAAAA+gAAAAYAAEAAAEAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAG0dHJhawAAAFx0a2hkAAAAD3wlsIB8JbCAAAAAAQAAAAAAAAAYAAAAAAAAAAAAAAAAAQAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAABUG1kaWEAAAAgbWRoZAAAAAB8JbCAfCWwgAAArEQAAAQAVcQAAAAAAC1oZGxyAAAAAAAAAABzb3VuAAAAAAAAAAAAAAAAU291bmRIYW5kbGVyAAAAAPttaW5mAAAAEHNtaGQAAAAAAAAAAAAAACRkaW5mAAAAHGRyZWYAAAAAAAAAAQAAAAx1cmwgAAAAAQAAAL9zdGJsAAAAW3N0c2QAAAAAAAAAAQAAAEttcDRhAAAAAAAAAAEAAAAAAAAAAAACABAAAAAArEQAAAAAACdlc2RzAAAAAAMZAAEABBFAFQAAAAABftAAAAAABQISCAYBAgAAABhzdHRzAAAAAAAAAAEAAAABAAAEAAAAABxzdHNjAAAAAAAAAAEAAAABAAAAAQAAAAEAAAAUc3RzegAAAAAAAAAXAAAAAQAAABRzdGNvAAAAAAAAAAEAAAAoAAAAYHVkdGEAAABYbWV0YQAAAAAAAAAhaGRscgAAAAAAAAAAbWRpcmFwcGwAAAAAAAAAAAAAAAAraWxzdAAAACOpdG9vAAAAG2RhdGEAAAABAAAAAExhdmY1Mi42NC4y";
            else if (Modernizr.audio.ogg) n.src = "data:audio/ogg;base64, ";
            else {
                if (!Modernizr.audio.wav) return void addTest("audiopreload", !1);
                n.src = "data:audio/wav;base64, ";
            }
        } catch (o) {
            return void addTest("audiopreload", !1)
        }
        n.setAttribute("preload", "auto"), n.style.cssText = "display:none", docElement.appendChild(n), setTimeout(function() {
            n.addEventListener("loadeddata", A, !1), e = setTimeout(A, t)
        }, 0)
    }), Modernizr.addAsyncTest(function() {
        if (!Modernizr.canvas) return !1;
        var A = new Image,
            e = createElement("canvas"),
            t = e.getContext("2d");
        A.onload = function() {
            addTest("apng", function() {
                return "undefined" == typeof e.getContext ? !1 : (t.drawImage(A, 0, 0), 0 === t.getImageData(0, 0, 1, 1).data[3])
            })
        }, A.src = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAACGFjVEwAAAABAAAAAcMq2TYAAAANSURBVAiZY2BgYPgPAAEEAQB9ssjfAAAAGmZjVEwAAAAAAAAAAQAAAAEAAAAAAAAAAAD6A+gBAbNU+2sAAAARZmRBVAAAAAEImWNgYGBgAAAABQAB6MzFdgAAAABJRU5ErkJggg=="
    }), Modernizr.addAsyncTest(function() {
        var A = new Image;
        A.onerror = function() {
            addTest("webpanimation", !1, {
                aliases: ["webp-animation"]
            })
        }, A.onload = function() {
            addTest("webpanimation", 1 == A.width, {
                aliases: ["webp-animation"]
            })
        }, A.src = "data:image/webp;base64,UklGRlIAAABXRUJQVlA4WAoAAAASAAAAAAAAAAAAQU5JTQYAAAD/////AABBTk1GJgAAAAAAAAAAAAAAAAAAAGQAAABWUDhMDQAAAC8AAAAQBxAREYiI/gcA"
    }), Modernizr.addTest("svgasimg", document.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#Image", "1.1")), Modernizr.addAsyncTest(function() {
        function A(i) {
            r++, clearTimeout(e);
            var d = i && "playing" === i.type || 0 !== o.currentTime;
            return !d && n > r ? void(e = setTimeout(A, t)) : (o.removeEventListener("playing", A, !1), addTest("videoautoplay", d), void(o.parentNode && o.parentNode.removeChild(o)))
        }
        var e, t = 200,
            n = 5,
            r = 0,
            o = createElement("video"),
            i = o.style;
        if (!(Modernizr.video && "autoplay" in o)) return void addTest("videoautoplay", !1);
        i.position = "absolute", i.height = 0, i.width = 0;
        try {
            if (Modernizr.video.ogg) o.src = "data:video/ogg;base64, ";
            else {
                if (!Modernizr.video.h264) return void addTest("videoautoplay", !1);
                o.src = "data:video/mp4;base64,AAAAIGZ0eXBpc29tAAACAGlzb21pc28yYXZjMW1wNDEAAAAIZnJlZQAAAs1tZGF0AAACrgYF//+q3EXpvebZSLeWLNgg2SPu73gyNjQgLSBjb3JlIDE0OCByMjYwMSBhMGNkN2QzIC0gSC4yNjQvTVBFRy00IEFWQyBjb2RlYyAtIENvcHlsZWZ0IDIwMDMtMjAxNSAtIGh0dHA6Ly93d3cudmlkZW9sYW4ub3JnL3gyNjQuaHRtbCAtIG9wdGlvbnM6IGNhYmFjPTEgcmVmPTMgZGVibG9jaz0xOjA6MCBhbmFseXNlPTB4MzoweDExMyBtZT1oZXggc3VibWU9NyBwc3k9MSBwc3lfcmQ9MS4wMDowLjAwIG1peGVkX3JlZj0xIG1lX3JhbmdlPTE2IGNocm9tYV9tZT0xIHRyZWxsaXM9MSA4eDhkY3Q9MSBjcW09MCBkZWFkem9uZT0yMSwxMSBmYXN0X3Bza2lwPTEgY2hyb21hX3FwX29mZnNldD0tMiB0aHJlYWRzPTEgbG9va2FoZWFkX3RocmVhZHM9MSBzbGljZWRfdGhyZWFkcz0wIG5yPTAgZGVjaW1hdGU9MSBpbnRlcmxhY2VkPTAgYmx1cmF5X2NvbXBhdD0wIGNvbnN0cmFpbmVkX2ludHJhPTAgYmZyYW1lcz0zIGJfcHlyYW1pZD0yIGJfYWRhcHQ9MSBiX2JpYXM9MCBkaXJlY3Q9MSB3ZWlnaHRiPTEgb3Blbl9nb3A9MCB3ZWlnaHRwPTIga2V5aW50PTI1MCBrZXlpbnRfbWluPTEwIHNjZW5lY3V0PTQwIGludHJhX3JlZnJlc2g9MCByY19sb29rYWhlYWQ9NDAgcmM9Y3JmIG1idHJlZT0xIGNyZj0yMy4wIHFjb21wPTAuNjAgcXBtaW49MCBxcG1heD02OSBxcHN0ZXA9NCBpcF9yYXRpbz0xLjQwIGFxPTE6MS4wMACAAAAAD2WIhAA3//728P4FNjuZQQAAAu5tb292AAAAbG12aGQAAAAAAAAAAAAAAAAAAAPoAAAAZAABAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACGHRyYWsAAABcdGtoZAAAAAMAAAAAAAAAAAAAAAEAAAAAAAAAZAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAEAAAAAAAgAAAAIAAAAAACRlZHRzAAAAHGVsc3QAAAAAAAAAAQAAAGQAAAAAAAEAAAAAAZBtZGlhAAAAIG1kaGQAAAAAAAAAAAAAAAAAACgAAAAEAFXEAAAAAAAtaGRscgAAAAAAAAAAdmlkZQAAAAAAAAAAAAAAAFZpZGVvSGFuZGxlcgAAAAE7bWluZgAAABR2bWhkAAAAAQAAAAAAAAAAAAAAJGRpbmYAAAAcZHJlZgAAAAAAAAABAAAADHVybCAAAAABAAAA+3N0YmwAAACXc3RzZAAAAAAAAAABAAAAh2F2YzEAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAgACAEgAAABIAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAY//8AAAAxYXZjQwFkAAr/4QAYZ2QACqzZX4iIhAAAAwAEAAADAFA8SJZYAQAGaOvjyyLAAAAAGHN0dHMAAAAAAAAAAQAAAAEAAAQAAAAAHHN0c2MAAAAAAAAAAQAAAAEAAAABAAAAAQAAABRzdHN6AAAAAAAAAsUAAAABAAAAFHN0Y28AAAAAAAAAAQAAADAAAABidWR0YQAAAFptZXRhAAAAAAAAACFoZGxyAAAAAAAAAABtZGlyYXBwbAAAAAAAAAAAAAAAAC1pbHN0AAAAJal0b28AAAAdZGF0YQAAAAEAAAAATGF2ZjU2LjQwLjEwMQ=="
            }
        } catch (d) {
            return void addTest("videoautoplay", !1)
        }
        o.setAttribute("autoplay", ""), i.cssText = "display:none", docElement.appendChild(o), setTimeout(function() {
            o.addEventListener("playing", A, !1), e = setTimeout(A, t)
        }, 0)
    });
    var testStyles = ModernizrProto.testStyles = injectElementWithStyles;
    Modernizr.addTest("hiddenscroll", function() {
        return testStyles("#modernizr {width:100px;height:100px;overflow:scroll}", function(A) {
            return A.offsetWidth === A.clientWidth
        })
    }), Modernizr.addTest("mathml", function() {
        var A;
        return testStyles("#modernizr{position:absolute;display:inline-block}", function(e) {
            e.innerHTML += "<math><mfrac><mi>xx</mi><mi>yy</mi></mfrac></math>", A = e.offsetHeight > e.offsetWidth
        }), A
    }), Modernizr.addTest("unicoderange", function() {
        return Modernizr.testStyles('@font-face{font-family:"unicodeRange";src:local("Arial");unicode-range:U+0020,U+002E}#modernizr span{font-size:20px;display:inline-block;font-family:"unicodeRange",monospace}#modernizr .mono{font-family:monospace}', function(A) {
            for (var e = [".", ".", "m", "m"], t = 0; t < e.length; t++) {
                var n = createElement("span");
                n.innerHTML = e[t], n.className = t % 2 ? "mono" : "", A.appendChild(n), e[t] = n.clientWidth
            }
            return e[0] !== e[1] && e[2] === e[3]
        })
    }), Modernizr.addTest("unicode", function() {
        var A, e = createElement("span"),
            t = createElement("span");
        return testStyles("#modernizr{font-family:Arial,sans;font-size:300em;}", function(n) {
            e.innerHTML = isSVG ? "?" : "&#5987;", t.innerHTML = isSVG ? "?" : "&#9734;", n.appendChild(e), n.appendChild(t), A = "offsetWidth" in e && e.offsetWidth !== t.offsetWidth
        }), A
    }), Modernizr.addTest("details", function() {
        var A, e = createElement("details");
        return "open" in e ? (testStyles("#modernizr details{display:block}", function(t) {
            t.appendChild(e), e.innerHTML = "<summary>a</summary>b", A = e.offsetHeight, e.open = !0, A = A != e.offsetHeight
        }), A) : !1
    });
    var omPrefixes = "Moz O ms Webkit",
        domPrefixes = ModernizrProto._config.usePrefixes ? omPrefixes.toLowerCase().split(" ") : [];
    ModernizrProto._domPrefixes = domPrefixes, Modernizr.addTest("pointerevents", function() {
        var A = !1,
            e = domPrefixes.length;
        for (A = Modernizr.hasEvent("pointerdown"); e-- && !A;) hasEvent(domPrefixes[e] + "pointerdown") && (A = !0);
        return A
    });
    var cssomPrefixes = ModernizrProto._config.usePrefixes ? omPrefixes.split(" ") : [];
    ModernizrProto._cssomPrefixes = cssomPrefixes;
    var atRule = function(A) {
        var e, t = prefixes.length,
            n = window.CSSRule;
        if ("undefined" == typeof n) return undefined;
        if (!A) return !1;
        if (A = A.replace(/^@/, ""), e = A.replace(/-/g, "_").toUpperCase() + "_RULE", e in n) return "@" + A;
        for (var r = 0; t > r; r++) {
            var o = prefixes[r],
                i = o.toUpperCase() + "_" + e;
            if (i in n) return "@-" + o.toLowerCase() + "-" + A
        }
        return !1
    };
    ModernizrProto.atRule = atRule;
    var modElem = {
        elem: createElement("modernizr")
    };
    Modernizr._q.push(function() {
        delete modElem.elem
    });
    var mStyle = {
        style: modElem.elem.style
    };
    Modernizr._q.unshift(function() {
        delete mStyle.style
    }), ModernizrProto.testAllProps = testPropsAll;
    var prefixed = ModernizrProto.prefixed = function(A, e, t) {
        return 0 === A.indexOf("@") ? atRule(A) : (-1 != A.indexOf("-") && (A = cssToDOM(A)), e ? testPropsAll(A, e, t) : testPropsAll(A, "pfx"))
    };
    Modernizr.addTest("batteryapi", !!prefixed("battery", navigator), {
        aliases: ["battery-api"]
    });
    var crypto = prefixed("crypto", window);
    Modernizr.addTest("crypto", !!prefixed("subtle", crypto)), Modernizr.addTest("dart", !!prefixed("startDart", navigator)), Modernizr.addTest("forcetouch", function() {
        return hasEvent(prefixed("mouseforcewillbegin", window, !1), window) ? MouseEvent.WEBKIT_FORCE_AT_MOUSE_DOWN && MouseEvent.WEBKIT_FORCE_AT_FORCE_MOUSE_DOWN : !1
    }), Modernizr.addTest("fullscreen", !(!prefixed("exitFullscreen", document, !1) && !prefixed("cancelFullScreen", document, !1))), Modernizr.addTest("gamepads", !!prefixed("getGamepads", navigator)), Modernizr.addAsyncTest(function() {
        var A;
        try {
            A = prefixed("indexedDB", window)
        } catch (e) {}
        if (A) {
            var t = "modernizr-" + Math.random(),
                n = A.open(t);
            n.onerror = function() {
                n.error && "InvalidStateError" === n.error.name ? addTest("indexeddb", !1) : (addTest("indexeddb", !0), detectDeleteDatabase(A, t))
            }, n.onsuccess = function() {
                addTest("indexeddb", !0), detectDeleteDatabase(A, t)
            }
        } else addTest("indexeddb", !1)
    }), Modernizr.addAsyncTest(function() {
        var A, e, t, n, r = "detect-blob-support",
            o = !1;
        try {
            A = prefixed("indexedDB", window)
        } catch (i) {}
        if (!Modernizr.indexeddb || !Modernizr.indexeddb.deletedatabase) return !1;
        try {
            A.deleteDatabase(r).onsuccess = function() {
                e = A.open(r, 1), e.onupgradeneeded = function() {
                    e.result.createObjectStore("store")
                }, e.onsuccess = function() {
                    t = e.result;
                    try {
                        n = t.transaction("store", "readwrite").objectStore("store").put(new Blob, "key"), n.onsuccess = function() {
                            o = !0
                        }, n.onerror = function() {
                            o = !1
                        }
                    } catch (i) {
                        o = !1
                    } finally {
                        addTest("indexeddbblob", o), t.close(), A.deleteDatabase(r)
                    }
                }
            }
        } catch (i) {
            addTest("indexeddbblob", !1)
        }
    }), Modernizr.addTest("intl", !!prefixed("Intl", window)), Modernizr.addTest("pagevisibility", !!prefixed("hidden", document, !1)), Modernizr.addTest("performance", !!prefixed("performance", window)), Modernizr.addTest("pointerlock", !!prefixed("exitPointerLock", document)), Modernizr.addTest("quotamanagement", function() {
        if (navigator.storage) return "function" == typeof navigator.storage.persist;
        var A = prefixed("temporaryStorage", navigator),
            e = prefixed("persistentStorage", navigator);
        return !(!A || !e)
    }), Modernizr.addTest("requestanimationframe", !!prefixed("requestAnimationFrame", window), {
        aliases: ["raf"]
    }), Modernizr.addTest("vibrate", !!prefixed("vibrate", navigator)), Modernizr.addTest("lowbattery", function() {
        var A = .2,
            e = prefixed("battery", navigator);
        return !!(e && !e.charging && e.level <= A)
    }), Modernizr.addTest("webintents", !!prefixed("startActivity", navigator)), Modernizr.addTest("filesystem", !!prefixed("requestFileSystem", window)), Modernizr.addTest("speechrecognition", !!prefixed("SpeechRecognition", window));
    var url = prefixed("URL", window, !1);
    url = url && window[url], Modernizr.addTest("bloburls", url && "revokeObjectURL" in url && "createObjectURL" in url), Modernizr.addTest("peerconnection", !!prefixed("RTCPeerConnection", window)), Modernizr.addTest("datachannel", function() {
        if (!Modernizr.peerconnection) return !1;
        for (var A = 0, e = domPrefixes.length; e > A; A++) {
            var t = window[domPrefixes[A] + "RTCPeerConnection"];
            if (t) {
                var n = new t(null);
                return "createDataChannel" in n
            }
        }
        return !1
    }), Modernizr.addTest("matchmedia", !!prefixed("matchMedia", window)), Modernizr.addAsyncTest(function() {
        try {
            var A = "Modernizr",
                e = new Worker("data:text/javascript;base64,dGhpcy5vbm1lc3NhZ2U9ZnVuY3Rpb24oZSl7cG9zdE1lc3NhZ2UoZS5kYXRhKX0=");
            e.onmessage = function(t) {
                e.terminate(), addTest("dataworkers", A === t.data), e = null
            }, e.onerror = function() {
                addTest("dataworkers", !1), e = null
            }, setTimeout(function() {
                addTest("dataworkers", !1)
            }, 200), e.postMessage(A)
        } catch (t) {
            setTimeout(function() {
                addTest("dataworkers", !1)
            }, 0)
        }
    }), Modernizr.addAsyncTest(function() {
        function A() {
            addTest("blobworkers", !1), e()
        }

        function e() {
            d && n.revokeObjectURL(d), i && i.terminate(), a && clearTimeout(a)
        }
        try {
            var t = window.BlobBuilder,
                n = window.URL;
            Modernizr._config.usePrefix && (t = t || window.MozBlobBuilder || window.WebKitBlobBuilder || window.MSBlobBuilder || window.OBlobBuilder, n = n || window.MozURL || window.webkitURL || window.MSURL || window.OURL);
            var r, o, i, d, a, s = "Modernizr",
                w = "this.onmessage=function(e){postMessage(e.data)}";
            try {
                r = new Blob([w], {
                    type: "text/javascript"
                })
            } catch (c) {}
            r || (o = new t, o.append(w), r = o.getBlob()), d = n.createObjectURL(r), i = new Worker(d), i.onmessage = function(A) {
                addTest("blobworkers", s === A.data), e()
            }, i.onerror = A, a = setTimeout(A, 200), i.postMessage(s)
        } catch (c) {
            A()
        }
    }), Modernizr.addTest("sharedworkers", "SharedWorker" in window), Modernizr.addTest("webworkers", "Worker" in window), testRunner(), delete ModernizrProto.addTest, delete ModernizrProto.addAsyncTest;
    for (var i = 0; i < Modernizr._q.length; i++) Modernizr._q[i]();
    window.Modernizr = Modernizr
}(window, document);