public override void LoadLink(string episodeLink, int episode, int normalEpisode, TempThread tempThred, object extraData, bool isDub)
        {
            try {
                if (episodeLink != "")
                {
                    int    id = int.Parse(episodeLink);
                    string d  = helper.GetAnimeFeverEpisodeStream(id);
                    if (d == "")
                    {
                        return;
                    }

                    string[] dSplit         = d.Split('\n');
                    bool     nextIsVideoUrl = false;
                    string   videoData      = "";

                    Dictionary <string, AnimbeFeverVideo> streams = new Dictionary <string, AnimbeFeverVideo>();

                    foreach (var _line in dSplit)
                    {
                        var line = _line.Replace(" ", "");
                        if (nextIsVideoUrl)
                        {
                            nextIsVideoUrl = false;
                            string[] data = CoreHelpers.GetStringRegex("BANDWIDTH=?, RESOLUTION=?, AUDIO=\"?\"", videoData);
                            if (data == null)
                            {
                                data = CoreHelpers.GetStringRegex("BANDWIDTH=?, RESOLUTION=?", videoData);
                            }

                            if (data == null)
                            {
                                continue;
                            }

                            string key = data.Length > 2 ? data[2] : "DEF" + data[1];
                            if (streams.ContainsKey(key) || key.StartsWith("DEF"))
                            {
                                AnimbeFeverVideo _stream =
                                    _stream = streams.ContainsKey(key) ? streams[key] : new AnimbeFeverVideo();


                                _stream.mainUrl = line;
                                _stream.name    = data[1];
                                streams[key]    = _stream;
                            }
                            else
                            {
                                error("FATAL EX MISSMATCH IN ANIMEFEBEER:: " + d);
                            }
                        }
                        else
                        {
                            if (line.StartsWith("#EXT-X-STREAM-INF:BANDWIDTH"))                               // VIDEO
                            {
                                nextIsVideoUrl = true;
                                videoData      = line;
                            }
                            else if (line.StartsWith("#EXT-X-MEDIA:TYPE=AUDIO"))                               // AUDIO
                            {
                                string[] data = CoreHelpers.GetStringRegex("GROUP-ID=\"?\" NAME=\"?\" LANGUAGE=\"?\" URI=\"?\"", line);
                                if (data != null)
                                {
                                    string key  = data[0];
                                    string name = data[1];
                                    string url  = data[3];
                                    int    prio = 0;
                                    if ((isDub && name.ToLower().StartsWith("eng")) || (!isDub && (name.ToLower().StartsWith("jap") || name.ToLower().StartsWith("jpn"))))
                                    {
                                        prio = 10;
                                    }

                                    if (streams.ContainsKey(key))
                                    {
                                        streams[key].audioStreams.Add(new AdvancedAudioStream()
                                        {
                                            label = name,
                                            url   = url,
                                            prio  = prio,
                                        });
                                    }
                                    else
                                    {
                                        streams.Add(key, new AnimbeFeverVideo()
                                        {
                                            audioStreams = new List <AdvancedAudioStream>()
                                            {
                                                new AdvancedAudioStream()
                                                {
                                                    label = name,
                                                    url   = url,
                                                    prio  = prio,
                                                }
                                            }
                                        });
                                    }
                                }
                            }
                        }
                    }

                    int videoPrio = 2;
                    foreach (var key in streams.Keys)
                    {
                        videoPrio++;
                        var       _stream   = streams[key];
                        BasicLink basicLink = new BasicLink()
                        {
                            isAdvancedLink = true,
                            originSite     = Name,
                            mirror         = 0,
                            name           = Name,
                            label          = _stream.name,
                            typeName       = "m3u8",
                            baseUrl        = _stream.mainUrl,
                            priority       = videoPrio,
                            audioStreams   = _stream.audioStreams,
                            referer        = "https://www.animefever.tv/"                     //((string[])extraData)[normalEpisode]
                        };
                        AddPotentialLink(normalEpisode, basicLink);
                    }
                }
            }
            catch (Exception _ex) {
                error(_ex);
            }
        }
        static StandardElementMapping()
        {
            foObjs = new Hashtable();

            // Declarations and Pagination and Layout Formatting Objects
            foObjs.Add("root", Root.GetMaker());
            foObjs.Add("declarations", Declarations.GetMaker());
            foObjs.Add("color-profile", ColorProfile.GetMaker());
            foObjs.Add("page-sequence", PageSequence.GetMaker());
            foObjs.Add("layout-master-set", LayoutMasterSet.GetMaker());
            foObjs.Add("page-sequence-master", PageSequenceMaster.GetMaker());
            foObjs.Add("single-page-master-reference", SinglePageMasterReference.GetMaker());
            foObjs.Add("repeatable-page-master-reference", RepeatablePageMasterReference.GetMaker());
            foObjs.Add("repeatable-page-master-alternatives", RepeatablePageMasterAlternatives.GetMaker());
            foObjs.Add("conditional-page-master-reference", ConditionalPageMasterReference.GetMaker());
            foObjs.Add("simple-page-master", SimplePageMaster.GetMaker());
            foObjs.Add("region-body", RegionBody.GetMaker());
            foObjs.Add("region-before", RegionBefore.GetMaker());
            foObjs.Add("region-after", RegionAfter.GetMaker());
            foObjs.Add("region-start", RegionStart.GetMaker());
            foObjs.Add("region-end", RegionEnd.GetMaker());
            foObjs.Add("flow", Flow.Flow.GetMaker());
            foObjs.Add("static-content", StaticContent.GetMaker());
            foObjs.Add("title", Title.GetMaker());

            // Block-level Formatting Objects
            foObjs.Add("block", Block.GetMaker());
            foObjs.Add("block-container", BlockContainer.GetMaker());

            // Inline-level Formatting Objects
            foObjs.Add("bidi-override", BidiOverride.GetMaker());
            foObjs.Add("character", Character.GetMaker());
            foObjs.Add("initial-property-set", InitialPropertySet.GetMaker());
            foObjs.Add("external-graphic", ExternalGraphic.GetMaker());
            foObjs.Add("instream-foreign-object", InstreamForeignObject.GetMaker());
            foObjs.Add("inline", Inline.GetMaker());
            foObjs.Add("inline-container", InlineContainer.GetMaker());
            foObjs.Add("leader", Leader.GetMaker());
            foObjs.Add("page-number", PageNumber.GetMaker());
            foObjs.Add("page-number-citation", PageNumberCitation.GetMaker());

            // Formatting Objects for Tables
            foObjs.Add("table-and-caption", TableAndCaption.GetMaker());
            foObjs.Add("table", Table.GetMaker());
            foObjs.Add("table-column", TableColumn.GetMaker());
            foObjs.Add("table-caption", TableCaption.GetMaker());
            foObjs.Add("table-header", TableHeader.GetMaker());
            foObjs.Add("table-footer", TableFooter.GetMaker());
            foObjs.Add("table-body", TableBody.GetMaker());
            foObjs.Add("table-row", TableRow.GetMaker());
            foObjs.Add("table-cell", TableCell.GetMaker());

            // Formatting Objects for Lists
            foObjs.Add("list-block", ListBlock.GetMaker());
            foObjs.Add("list-item", ListItem.GetMaker());
            foObjs.Add("list-item-body", ListItemBody.GetMaker());
            foObjs.Add("list-item-label", ListItemLabel.GetMaker());

            // Dynamic Effects: Link and Multi Formatting Objects
            foObjs.Add("basic-link", BasicLink.GetMaker());
            foObjs.Add("multi-switch", MultiSwitch.GetMaker());
            foObjs.Add("multi-case", MultiCase.GetMaker());
            foObjs.Add("multi-toggle", MultiToggle.GetMaker());
            foObjs.Add("multi-properties", MultiProperties.GetMaker());
            foObjs.Add("multi-property-set", MultiPropertySet.GetMaker());

            // Out-of-Line Formatting Objects
            foObjs.Add("float", Float.GetMaker());
            foObjs.Add("footnote", Footnote.GetMaker());
            foObjs.Add("footnote-body", FootnoteBody.GetMaker());

            // Other Formatting Objects
            foObjs.Add("wrapper", Wrapper.GetMaker());
            foObjs.Add("marker", Marker.GetMaker());
            foObjs.Add("retrieve-marker", RetrieveMarker.GetMaker());
        }