(() => {
    "use strict";
    var t = {
            151: (t, e) => {
                function r(t, e) {
                    if (void 0 === t) throw new Error("".concat(null != e ? e : "Value", " is undefined"));
                    return t
                }

                function i(t, e) {
                    if (null === t) throw new Error("".concat(null != e ? e : "Value", " is null"));
                    return t
                }
                e.ensureNotNull = void 0, e.ensureNotNull = i
            }
        },
        e = {};

    function r(i) {
        var n = e[i];
        if (void 0 !== n) return n.exports;
        var s = e[i] = {
            exports: {}
        };
        return t[i](s, s.exports, r), s.exports
    }(() => {
        var t = r(151);
        const e = {
            "color-cold-gray-300": "#B2B5BE",
            "color-brand": "#2962FF",
            "color-brand-hover": "#1E53E5",
            "color-brand-active": "#1848CC"
        };
        const i = JSON.parse('{"crypto-mkt-screener":{"width":1000,"height":490,"defaultColumn":"overview","market":"crypto","screener_type":"crypto_mkt","displayCurrency":"USD","isTransparent":false},"events":{"width":510,"height":600,"isTransparent":false,"hideImportanceIndicator":false,"autosize":false},"forex-cross-rates":{"width":770,"height":400,"isTransparent":false,"currencies":["EUR","USD","JPY","GBP","CHF","AUD","CAD","NZD"],"frameElementId":null,"autosize":false},"forex-heat-map":{"width":770,"height":400,"isTransparent":false,"currencies":["EUR","USD","JPY","GBP","CHF","AUD","CAD","NZD","CNY"],"frameElementId":null,"autosize":false},"hotlists":{"width":400,"height":600,"isTransparent":false,"dateRange":"12M","showSymbolLogo":false},"market-overview":{"width":400,"height":650,"isTransparent":false,"dateRange":"12M","showSymbolLogo":true},"market-quotes":{"width":770,"height":450,"isTransparent":false,"showSymbolLogo":false},"mini-symbol-overview":{"width":350,"height":220,"symbol":"FX:EURUSD","dateRange":"12M","isTransparent":false,"autosize":false,"largeChartUrl":""},"symbol-overview":{"width":1000,"height":500,"symbols":[["Apple","AAPL|1D"],["Google","GOOGL|1D"],["Microsoft","MSFT|1D"]],"autosize":false,"chartOnly":false,"hideDateRanges":false,"hideMarketStatus":false,"hideSymbolLogo":false,"scalePosition":"right","scaleMode":"Normal","fontFamily":"-apple-system, BlinkMacSystemFont, Trebuchet MS, Roboto, Ubuntu, sans-serif","fontSize":"10","noTimeScale":false,"chartType":"area","valuesTracking":"0","changeMode":"price-and-percent"},"advanced-chart":{"bodyId":"widget-container","bodyClasses":["chart-page","unselectable","on-widget"]},"screener":{"width":1100,"height":523,"defaultColumn":"overview","defaultScreen":"general","market":"forex","showToolbar":true,"isTransparent":false},"single-quote":{"width":350,"symbol":"FX:EURUSD","isTransparent":false},"symbol-profile":{"width":480,"height":650,"symbol":"NASDAQ:AAPL","isTransparent":false},"symbol-info":{"width":1000,"symbol":"NASDAQ:AAPL","isTransparent":false},"technical-analysis":{"interval":"1m","width":425,"isTransparent":false,"height":450,"symbol":"NASDAQ:AAPL","showIntervalTabs":true,"displayMode":"single"},"ticker-tape":{"isTransparent":false,"displayMode":"adaptive","showSymbolLogo":false},"tickers":{"isTransparent":false,"showSymbolLogo":false},"financials":{"width":480,"height":830,"autosize":false,"symbol":"NASDAQ:AAPL","isTransparent":false,"displayMode":"regular","largeChartUrl":""},"timeline":{"width":480,"height":830,"autosize":false,"isTransparent":false,"displayMode":"regular","feedMode":"all_symbols"},"stock-heatmap":{"width":500,"height":500,"autosize":true,"dataSource":"SPX500","exchanges":[],"grouping":"sector","blockSize":"market_cap_basic","blockColor":"change","hasTopBar":false,"isDataSetEnabled":false,"isZoomEnabled":true,"hasSymbolTooltip":true,"symbolUrl":"","isMonoSize":false},"crypto-coins-heatmap":{"width":500,"height":500,"autosize":true,"dataSource":"Crypto","blockSize":"market_cap_calc","blockColor":"change","hasTopBar":false,"isDataSetEnabled":false,"isZoomEnabled":true,"hasSymbolTooltip":true,"symbolUrl":"","isMonoSize":false},"etf-heatmap":{"width":500,"height":500,"autosize":true,"dataSource":"AllUSEtf","blockSize":"aum","blockColor":"change","grouping":"asset_class","hasTopBar":false,"isDataSetEnabled":false,"isZoomEnabled":true,"hasSymbolTooltip":true,"symbolUrl":"","isMonoSize":false}}');
        var n, s;
        ! function(t) {
            let e;
            ! function(t) {
                t.SetSymbol = "set-symbol", t.SetInterval = "set-interval"
            }(e = t.Names || (t.Names = {}))
        }(n || (n = {})),
        function(t) {
            let e;
            ! function(t) {
                t.SymbolClick = "tv-widget-symbol-click", t.WidgetLoad = "tv-widget-load", t.WidgetReady = "tv-widget-ready", t.ResizeIframe = "tv-widget-resize-iframe", t.NoData = "tv-widget-no-data"
            }(e = t.Names || (t.Names = {}))
        }(s || (s = {}));
        const o = "__FAIL__",
            a = "__NHTTP__",
            l = new RegExp("^http(s)?:(//)?");

        function c(t = location.href) {
            const e = function(t) {
                try {
                    const e = new URL(t);
                    return l.test(e.protocol) ? null : a
                } catch (t) {
                    return o
                }
            }(t);
            return e || t.replace(l, "")
        }
        const h = ["locale", "symbol", "market"],
            d = "https://www.tradingview-widget.com",
            g = "BATTLE";
        new class extends class {
            constructor(t) {
                this._copyrightContainer = null;
                const e = null != t ? t : this._getScriptInfo();
                e && this._replaceScript(e)
            }
            hasCopyright() {
                return !!this._copyrightContainer
            }
            get widgetId() {
                throw new Error("Method must be overridden")
            }
            widgetUtmName() {
                return this.widgetId
            }
            get defaultSettings() {
                return i[this.widgetId]
            }
            get propertiesToWorkWith() {
                return []
            }
            get useParamsForConnectSocket() {
                return !1
            }
            get useSnowplowPageView() {
                return !1
            }
            filterRawSettings(t) {
                const e = {},
                    r = Object.keys(t),
                    i = new Set(this.propertiesToWorkWith);
                return r.forEach((r => {
                    i.has(r) && (e[r] = t[r])
                })), e
            }
            get shouldListenToIframeResize() {
                return !0
            }
            get propertiesToSkipInHash() {
                return ["customer", "locale"]
            }
            get propertiesToAddToGetParams() {
                return ["locale"]
            }
            _defaultWidth() {}
            _defaultHeight() {}
            _getScriptInfo() {
                const t = document.currentScript;
                if (!t || !t.src) return console.error("Could not self-replace the script, widget embedding has been aborted"), null;
                return {
                    scriptURL: function(t) {
                        const e = new URL(t, document.baseURI);
                        return {
                            host: e.host,
                            pathname: e.pathname,
                            href: e.href,
                            protocol: e.protocol
                        }
                    }(t.src),
                    scriptElement: t,
                    id: t.id,
                    rawSettings: this._scriptContentToJSON(t),
                    overrideHost: t.getAttribute("override-host")
                }
            }
            _replaceScript(r) {
                const {
                    scriptURL: i,
                    scriptElement: n,
                    rawSettings: o,
                    id: a,
                    overrideHost: l
                } = r, c = l || function(t) {
                    if ("BATTLE" === g) {
                        if (window.WIDGET_HOST) return window.WIDGET_HOST;
                        if (t.host.match(/\.\wst\w*\.\wv$/i)) return `https://${t.host.replace(/\.(\w)v$/i,((t,e)=>`-widget.${e}v`))}`
                    }
                    return d
                }(i), h = n.parentNode;
                o && "timeline" === this.widgetUtmName() && (o.locale = "en");
                const u = n.nonce || n.getAttribute("nonce"),
                    p = function(t) {
                        if (null === t) return null;
                        const e = t.querySelector("#tradingview-copyright"),
                            r = t.querySelector("#tradingview-quotes"),
                            i = e || r;
                        return i && t.removeChild(i), i
                    }(h),
                    m = h.querySelector(".tradingview-widget-copyright");
                this._copyrightContainer = p || m;
                const f = h.classList.contains("tradingview-widget-container");
                this.iframeContainer = h && f ? h : document.createElement("div"), o && (this.settings = this.filterRawSettings(o)), o && this._validateSettings() || (console.error("Invalid settings provided, fall back to defaults"), this.settings = this.filterRawSettings(this.defaultSettings));
                const w = "32px",
                    {
                        width: y,
                        height: b
                    } = this.settings,
                    S = void 0 === b ? void 0 : `${b}${Number.isInteger(b)?"px":""}`,
                    v = void 0 === y ? void 0 : `${y}${Number.isInteger(y)?"px":""}`;
                void 0 !== v && (this.iframeContainer.style.width = v),
                    void 0 !== S && (this.iframeContainer.style.height = S);
                const T = function() {
                    const t = document.createElement("style");
                    return t.innerHTML = `\n\t.tradingview-widget-copyright {\n\t\tfont-size: 13px !important;\n\t\tline-height: 32px !important;\n\t\ttext-align: center !important;\n\t\tvertical-align: middle !important;\n\t\t/* @mixin sf-pro-display-font; */\n\t\tfont-family: -apple-system, BlinkMacSystemFont, 'Trebuchet MS', Roboto, Ubuntu, sans-serif !important;\n\t\tcolor: ${e["color-cold-gray-300"]} !important;\n\t}\n\n\t.tradingview-widget-copyright .blue-text {\n\t\tcolor: ${e["color-brand"]} !important;\n\t}\n\n\t.tradingview-widget-copyright a {\n\t\ttext-decoration: none !important;\n\t\tcolor: ${e["color-cold-gray-300"]} !important;\n\t}\n\n\t.tradingview-widget-copyright a:visited {\n\t\tcolor: ${e["color-cold-gray-300"]} !important;\n\t}\n\n\t.tradingview-widget-copyright a:hover .blue-text {\n\t\tcolor: ${e["color-brand-hover"]} !important;\n\t}\n\n\t.tradingview-widget-copyright a:active .blue-text {\n\t\tcolor: ${e["color-brand-active"]} !important;\n\t}\n\n\t.tradingview-widget-copyright a:visited .blue-text {\n\t\tcolor: ${e["color-brand"]} !important;\n\t}\n\t`, t
                }();
                u && T.setAttribute("nonce", u), this.iframeContainer.appendChild(T);
                const _ = this.hasCopyright() ? "calc(100% - 32px)" : "100%",
                    C = location.hostname,
                    k = m ? "widget_new" : "widget",
                    A = this.widgetUtmName();
                this.settings.utm_source = C, this.settings.utm_medium = k, this.settings.utm_campaign = A, this._updateCopyrightHrefParams(C, k, A);
                const E = this.settings.iframeTitle || `${this.widgetId.replace("-"," ")} TradingView widget`,
                    x = this.settings.iframeLang || "en";
                this.iframe = this._createIframe(_, c, a, E, x), this._addCSPErrorListener(c), u && this.iframe.setAttribute("nonce", u);
                const I = this.iframeContainer.querySelector(".tradingview-widget-container__widget");
                if (I ? ((0, t.ensureNotNull)(I.parentElement).replaceChild(this.iframe, I), null == n || n.remove()) : f ? (this.iframeContainer.appendChild(this.iframe), null == n || n.remove()) : (this.iframeContainer.appendChild(this.iframe), h.replaceChild(this.iframeContainer, (0, t.ensureNotNull)(n))), this.shouldListenToIframeResize && function(t, e, r) {
                        const i = e.contentWindow;
                        if (!i) return console.error("Cannot listen to the event from the provided iframe, contentWindow is not available"), () => {};

                        function n(e) {
                            e.source && e.source === i && e.data && e.data.name && e.data.name === t && r(e.data.data)
                        }
                        window.addEventListener("message", n, !1)
                    }(s.Names.ResizeIframe, this.iframe, (t => {
                        t.width && (this.iframe.style.width = t.width + "px", this.iframeContainer.style.width = t.width + "px"), this.iframe.style.height = t.height + "px", this.iframeContainer.style.height = t.height + (this.hasCopyright() ? 32 : 0) + "px"
                    })), p) {
                    const t = document.createElement("div");
                    t.style.height = w, t.style.lineHeight = w, void 0 !== v && (t.style.width = v), t.style.textAlign = "center", t.style.verticalAlign = "middle", t.innerHTML = p.innerHTML, this.iframeContainer.appendChild(t)
                }
            }
            _iframeSrcBase(t) {
                let e = `${t}/embed-widget/${this.widgetId}/`;
                return this.settings.customer && -1 !== this.propertiesToSkipInHash.indexOf("customer") && (e += `${this.settings.customer}/`),
                    e
            }
            _validateSettings() {
                const t = (t, e) => {
                        if (void 0 === t) return e;
                        const r = String(t);
                        return /^\d+$/.test(r) ? parseInt(r) : /^(\d+%|auto)$/.test(r) ? r : null
                    },
                    e = t(this.settings.width, this._defaultWidth()),
                    r = t(this.settings.height, this._defaultHeight());
                return null !== e && null !== r && (this.settings.width = e, this.settings.height = r, !0)
            }
            _setSettingsQueryString(t) {
                const e = this.propertiesToAddToGetParams.filter((t => -1 !== h.indexOf(t))),
                    r = function(t, e) {
                        const r = Object.create(Object.getPrototypeOf(t));
                        for (const i of e) Object.prototype.hasOwnProperty.call(t, i) && (r[i] = t[i]);
                        return r
                    }(this.settings, e);
                for (const [e, i] of Object.entries(r)) t.searchParams.append(e, i)
            }
            _setHashString(t, e) {
                const r = {};
                e && (r.frameElementId = e), Object.keys(this.settings).forEach((t => {
                    -1 === this.propertiesToSkipInHash.indexOf(t) && (r[t] = this.settings[t])
                })), (this.useParamsForConnectSocket || this.useSnowplowPageView) && (r["page-uri"] = c());
                Object.keys(r).length > 0 && (t.hash = encodeURIComponent(JSON.stringify(r)))
            }
            _scriptContentToJSON(t) {
                const e = t.innerHTML.trim();
                try {
                    return JSON.parse(e)
                } catch (t) {
                    return console.error(`Widget settings parse error: ${t}`), null
                }
            }
            _createIframe(t, e, r, i, n) {
                const s = document.createElement("iframe");
                r && (s.id = r), this.settings.enableScrolling || s.setAttribute("scrolling", "no"), s.setAttribute("allowtransparency", "true"), s.setAttribute("frameborder", "0"), s.style.userSelect = "none", s.style.boxSizing = "border-box", s.style.display = "block", s.style.height = t, s.style.width = "100%";
                const o = new URL(this._iframeSrcBase(e));
                return this._setSettingsQueryString(o), this._setHashString(o, r), s.setAttribute("src", o.toString()), s.title = i, s.lang = n, s
            }
            _addCSPErrorListener(t) {
                document.addEventListener("securitypolicyviolation", (e => {
                    e.blockedURI.includes(t) && (this._tryFixCSPIssueWithFallback(t), console.warn("Please update your CSP rules to allow the tradingview-widget.com origin for frame-src."))
                }))
            }
            _tryFixCSPIssueWithFallback(t) {
                const e = this.iframe.getAttribute("src");
                if (e) {
                    const r = new URL(e.replace(t, "https://s.tradingview.com"));
                    this.iframe.setAttribute("src", r.href)
                }
            }
            _updateCopyrightHrefParams(t, e, r) {
                if (this._copyrightContainer) {
                    const i = this._copyrightContainer.querySelector("a");
                    if (i) {
                        const n = i.getAttribute("href");
                        if (n) try {
                            const s = new URL(n);
                            s.searchParams.set("utm_source", t), s.searchParams.set("utm_medium", e), s.searchParams.set("utm_campaign", r), i.setAttribute("href", s.toString())
                        } catch (t) {
                            console.log(`Cannot update link UTM params, href="${n}"`)
                        }
                    }
                }
            }
        } {
            get widgetId() {
                const t = this.settings;
                return t && "crypto_mkt" === t.screener_type ? "crypto-mkt-screener" : "screener"
            }
            get useSnowplowPageView() {
                return !0
            }
            widgetUtmName() {
                const t = this.settings;
                if (t) {
                    if ("forex" === t.market) return "forexscreener";
                    if ("crypto_mkt" === t.screener_type) return "cryptomktscreener";
                    if ("crypto" === t.market) return "cryptoscreener"
                }
                return "screener"
            }
            get propertiesToWorkWith() {
                return ["colorTheme", "customer", "defaultColumn", "defaultScreen", "displayCurrency", "height", "largeChartUrl", "locale", "market", "screener_type", "showToolbar", "isTransparent", "width"]
            }
            filterRawSettings(t) {
                const e = super.filterRawSettings(t);
                return void 0 !== t.transparency && (e.isTransparent = t.transparency), "crypto_mkt" === e.screener_type && (e.market = "crypto"), e.enableScrolling = !0, e
            }
        }
    })()
})();